From 73dc4539fe737dace48f47b6758a55f2b71075d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Tue, 18 Mar 2025 16:21:31 +0100 Subject: [PATCH] refactor(qav3): factor out trade candle extraction MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../user_data/strategies/QuickAdapterV3.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 39a028c..28cbfaf 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -383,6 +383,13 @@ class QuickAdapterV3(IStrategy): def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame: return df + def get_trade_entry_candle(self, df: DataFrame, trade: Trade) -> DataFrame | None: + entry_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc) + entry_candle = df.loc[(df["date"] == entry_date)] + if entry_candle.empty: + return None + return entry_candle.squeeze() + def get_stoploss_distance(self, trade: Trade, entry_natr: float) -> float: stoploss_natr_distance = trade.open_rate * entry_natr * self.stoploss_natr_ratio return stoploss_natr_distance / trade.leverage @@ -405,11 +412,9 @@ class QuickAdapterV3(IStrategy): if df.empty: return None - entry_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc) - entry_candle = df.loc[(df["date"] == entry_date)] - if entry_candle.empty: + entry_candle = self.get_trade_entry_candle(df, trade) + if entry_candle is None: return None - entry_candle = entry_candle.squeeze() entry_natr = entry_candle["natr_ratio_labeling_window"] stoploss_distance = self.get_stoploss_distance(trade, entry_natr) @@ -464,11 +469,9 @@ class QuickAdapterV3(IStrategy): ): return "maxima_detected_long" - entry_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc) - entry_candle = df.loc[(df["date"] == entry_date)] - if entry_candle.empty: + entry_candle = self.get_trade_entry_candle(df, trade) + if entry_candle is None: return None - entry_candle = entry_candle.squeeze() entry_natr = entry_candle["natr_ratio_labeling_window"] take_profit_distance = self.get_take_profit_distance(trade, entry_natr) if trade.is_short: -- 2.43.0