Python library to interact with the Gekko trading bot found at https://github.com/askmike/gekko.
- Install Gekko
- Start Gekko
- Clone this repository
- Enjoy Gekko in Python!
You can access the Gekko server from Python to pull candle data or run backtests.
from gekkopy.gekko_client import GekkoClient
gekko = GekkoClient('http://localhost:3000')
data = gekko.pull_candles(
'binance', 'BTC', 'USDT',
candlesize=60,
date_start='2019-01-01', date_end='2019-06-01')
from gekkopy.gekko_client import GekkoClient
gekko = GekkoClient('http://localhost:3000')
macd_cfg = {
'short': 10,
'long': 21,
'signal': 9,
'thresholds': {
'down': -0.025,
'up': 0.025,
'persistence': 1,
}
}
bt_config = gekko.build_backtest_config(
exchange='binance',
asset='BTC',
currency='USDT',
candlesize=360,
strategy='MACD',
strat_config=macd_cfg,
date_start='2019-01-01',
date_end='2019-06-01'
)
report, jdf, profits = gekko.backtest(bt_config)
print(report)
# {'startTime': '2019-02-19 23:59:00',
# 'endTime': '2019-06-01 00:01:00',
# 'timespan': '3 months',
# 'market': 118.83289531934932,
# 'balance': 5605.98664554,
# 'profit': 1598.1966455399997,
# 'relativeProfit': 39.87725518402908,
# 'yearlyProfit': 5779.418924137776,
# 'relativeYearlyProfit': 144.20463457760448,
# 'startPrice': 3699.94,
# 'endPrice': 8551.53,
# 'trades': 34,
# 'startBalance': 4007.79,
# 'exposure': 0.4925674839454903,
# 'sharpe': 13.77354874158137,
# 'downside': -2.5799428969375042,
# 'alpha': 1479.3637502206504}
# visualize backtest
gekko.plot_stats(jdf, profits, figsize=(10,10));
Open the run-backtest notebook to see the visualizations.
- In Python
- implement the
Strategy
class - register your class with the
StratServer
- start the
StratServer
- implement the
- In Gekko
- copy the
RESTAPI.js
strategy into thestrategies
folder of your Gekko installation - copy the
RESTAPI.toml
configuration into theconfig/strageies
folder of your Gekko installation - run the strategy from the Gekko UI. Just make sure to adjust the URL to your
StratServer and make sure that the last part of the
url
config field matches the name under which you registered your strategy.
- copy the
Here's an example of a dummy strategy:
from gekkopy.serving import Strategy, StratServer
import numpy as np
class DummyStrategy(Strategy):
""" Strategy that creates random advice, just to demo how to implement the
interface. """
def __init__(self):
super().__init__()
def window_size(self):
return 5
def advice(self, data):
cond = np.ceil(np.sum(data)) % 3
if cond == 1:
return self.LONG
elif cond == 2:
return self.SHORT
else:
return self.HOLD
if __name__ == "__main__":
dummy_strat = DummyStrategy()
StratServer.register("dummy", dummy_strat)
StratServer.start('localhost', port=2626, debug=True)
Now you're ready to give (random) advice!
After running this script, you can use the RESTAPI strategy in Gekko. Make sure to
change the last part of the url to dummy
.
url = "http://localhost:2626/strats/dummy" # no trailing slash!
Marius Helf
The original sourcecode can be found at https://github.com/mariushelf/gekkopy.