diff --git a/app.py b/app.py index c2baac6..7366996 100644 --- a/app.py +++ b/app.py @@ -1,46 +1,32 @@ -import backtrader -import krakenex import logging import os +from kraken_bot.KrakenBot import KrakenBot +from kraken_bot.LinearRegression import LinearRegression +from kraken_bot.HighLowCutoff import HighLowCutoff 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) +model = LinearRegression( + r_value_target = float(os.getenv('R_VALUE_TARGET')) + ) +strategy = HighLowCutoff( + investment_count = int(os.getenv('INVESTMENT_COUNT')), + investment_volume = float(os.getenv('INVESTMENT_VOLUME')), + target_gain = float(os.getenv('TARGET_GAIN')), + max_loss = float(os.getenv('MAX_LOSS')) + ) +bot = KrakenBot( + token = os.getenv('KRAKEN_API_TOKEN'), + secret = os.getenv('KRAKEN_API_SEC'), + tier = 'Pro', + model = model, + trading_strategy = strategy + ) 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') + bot.update(full=True) + bot.execute() diff --git a/kraken_bot/KrakenBot.py b/kraken_bot/KrakenBot.py index 54ebe32..de6ad0b 100644 --- a/kraken_bot/KrakenBot.py +++ b/kraken_bot/KrakenBot.py @@ -77,3 +77,28 @@ class KrakenBot(KrakenAPI): order.close_price, order.close_price2, order.deadline, order.validate, order.otp) self.log.info(order) self.update() + + def update(self, full=False): + self.log.debug(f"update: full={full}") + self._update_tradable_asset_pairs() + self._filter_tradable_asset_pairs() + self._update_account_balance() + self._filter_account_balance() + self._update_trade_balance() + if full: + self._update_ohlc_data() + self.model.update( + self.tradable_asset_pairs, + self.ohlc_data + ) + self.trading_strategy.update( + self.tradable_asset_pairs, + self.ohlc_data, + self.model.analysis, + self.account_balance + ) + + def execute(self): + self.log.debug(f"execute") + for order in self.trading_strategy.orders: + self._add_standard_order(order)