import backtrader import krakenex import logging import os from dotenv import load_dotenv from pykrakenapi import KrakenAPI from time import sleep from kraken_bot.MovingAverageCrossOver import MA_CrossOver load_dotenv() token = os.getenv('KRAKEN_API_TOKEN') secret = os.getenv('KRAKEN_API_SEC') tier = os.getenv('KRAKEN_API_TIER', 'Pro') asset_pair = os.getenv('KRAKEN_TRADABLE_ASSET_PAIR', 'XBTUSD') interval = int(os.getenv('KRAKEN_DATA_INTERVAL', 60)) percents = float(os.getenv('CEREBRO_SIZER_PERCENTS', 50)) logger = logging.getLogger(__name__) kraken = KrakenAPI(krakenex.API(token, secret), tier) cerebro = backtrader.Cerebro() market = kraken.get_tradable_asset_pairs(pair=asset_pair).iloc[0] sleep(kraken.factor) cerebro.broker.setcommission(commission=market.fees[0][1]/100) ohlc, last = kraken.get_ohlc_data(asset_pair, interval=interval, since=None, ascending=True) sleep(kraken.factor) cerebro.adddata(backtrader.feeds.PandasData(dataname=ohlc)) account_balance = kraken.get_trade_balance(asset='ZUSD').loc['eb'].ZUSD sleep(kraken.factor) cerebro.broker.setcash(account_balance) cerebro.addsizer(backtrader.sizers.PercentSizer, percents=percents) cerebro.addstrategy(MA_CrossOver) if __name__ == '__main__': start_balance = cerebro.broker.getvalue() print('Starting Portfolio Value: %.6f' % start_balance) x = cerebro.run() end_balance = cerebro.broker.getvalue() print('Final Portfolio Value: %.6f' % end_balance) print('Percent change: %.6f' % (((end_balance - start_balance)/start_balance) * 100)) cerebro.plot(style='candlestick')