47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
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')
|