From 52693cda96cc47530b319241395df686949195f1 Mon Sep 17 00:00:00 2001 From: eric o meehan Date: Mon, 23 Sep 2024 20:24:38 -0400 Subject: [PATCH] v0.0.16 --- app.py | 8 ++++--- kraken_bot/HighLowCutoff.py | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 kraken_bot/HighLowCutoff.py diff --git a/app.py b/app.py index 8e11687..7366996 100644 --- a/app.py +++ b/app.py @@ -3,7 +3,7 @@ import os from kraken_bot.KrakenBot import KrakenBot from kraken_bot.LinearRegression import LinearRegression -from kraken_bot.MyStrategy import MyStrategy +from kraken_bot.HighLowCutoff import HighLowCutoff from dotenv import load_dotenv load_dotenv() @@ -13,9 +13,11 @@ logger = logging.getLogger(__name__) model = LinearRegression( r_value_target = float(os.getenv('R_VALUE_TARGET')) ) -strategy = MyStrategy( +strategy = HighLowCutoff( investment_count = int(os.getenv('INVESTMENT_COUNT')), - investment_volume = float(os.getenv('INVESTMENT_VOLUME')) + 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'), diff --git a/kraken_bot/HighLowCutoff.py b/kraken_bot/HighLowCutoff.py new file mode 100644 index 0000000..dabd962 --- /dev/null +++ b/kraken_bot/HighLowCutoff.py @@ -0,0 +1,46 @@ +from kraken_bot.TradingStrategy import TradingStrategy +from kraken_bot.KrakenOrder import KrakenOrder + +class HighLowCutoff(TradingStrategy): + def __init__(self, investment_count, investment_volume, target_gain, max_loss): + super().__init__(investment_count, investment_volume) + self.target_gain = self.investment_volume * (1 + target_gain) + self.max_loss = self.investment_volume * (1 - max_loss) + + def update(self, tradable_asset_pairs, ohlc_data, market_analysis, account_balance): + self.orders = [] + investment_count = len(account_balance) - 1 + for asset in account_balance[(account_balance.index != 'ZUSD')].index: + market = tradable_asset_pairs[ + (tradable_asset_pairs.base == asset) & + (tradable_asset_pairs.quote == 'ZUSD') + ] + ohlc, last = ohlc_data[market.index[0]] + last_close = ohlc.iloc[-1].close + value = account_balance.loc[asset].vol * last_close + if (value <= self.max_loss) or (value >= self.target_gain): + self.orders.append(KrakenOrder( + ordertype = 'market', + type = 'sell', + pair = market.index[0], + volume = account_balance.loc[asset].vol, + validate = False + )) + investment_count -= 1 + new_investments = [] + while investment_count < self.investment_count: + for market in market_analysis.index: + base = tradable_asset_pairs.loc[market].base + if base not in account_balance.index and base not in new_investments: + ohlc, last = ohlc_data[market] + volume = self.investment_volume / ohlc.iloc[-2].close + self.orders.append(KrakenOrder( + ordertype = 'market', + type = 'buy', + pair = market, + volume = volume, + validate = False + )) + new_investments.append(base) + investment_count += 1 + break