From 78f1225c018f6c47952a151c5368729e6cd5a2a4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 20 Jul 2025 19:34:50 +0200 Subject: [PATCH] perf(qav3): compute the secure take profit price from the partial exit stages MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 12 +++++------ .../user_data/strategies/QuickAdapterV3.py | 20 ++++++++----------- quickadapter/user_data/strategies/Utils.py | 8 ++++---- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index f3ca654..dfe5a07 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -280,7 +280,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): model_training_parameters = self.model_training_parameters - start = time.time() + start_time = time.time() if self._optuna_hyperopt: self.optuna_optimize( pair=dk.pair, @@ -356,7 +356,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): model_training_parameters=model_training_parameters, init_model=self.get_init_model(dk.pair), ) - time_spent = time.time() - start + time_spent = time.time() - start_time self.dd.update_metric_tracker("fit_time", time_spent, dk.pair) return model @@ -1437,13 +1437,13 @@ def zigzag( def calculate_volatility_quantile(pos: int) -> float: if pos not in volatility_quantile_cache: - start = max(0, pos + 1 - natr_period) - end = min(pos + 1, n) - if start >= end: + start_pos = max(0, pos + 1 - natr_period) + end_pos = min(pos + 1, n) + if start_pos >= end_pos: volatility_quantile_cache[pos] = np.nan else: volatility_quantile_cache[pos] = calculate_quantile( - natr_values[start:end], natr_values[pos] + natr_values[start_pos:end_pos], natr_values[pos] ) return volatility_quantile_cache[pos] diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 40cb0d5..cd6e2bf 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -886,15 +886,13 @@ class QuickAdapterV3(IStrategy): if self.position_adjustment_enable: if exit_stage == start_partial_exit_stage: return None + natr_ratio_percent = ( + self.partial_exit_stages[exit_stage][0] + if exit_stage in self.partial_exit_stages + else 1.0 + ) secure_take_profit_distance = self.get_take_profit_distance( - df, - trade, - min( - self.config.get("exit_pricing", {}).get( - "trade_secure_percent", 0.2 - ), - self.partial_exit_stages[start_partial_exit_stage][0] * 0.95, - ), + df, trade, natr_ratio_percent / 3 ) if isna(secure_take_profit_distance) or secure_take_profit_distance <= 0: return None @@ -920,12 +918,10 @@ class QuickAdapterV3(IStrategy): if exit_stage < final_exit_stage: trade.set_custom_data(key="exit_stage", value=final_exit_stage) return f"secure_take_profit_{trade.trade_direction}_{final_exit_stage}" - if exit_stage == final_exit_stage: - natr_ratio_percent = 1.0 - else: + if start_partial_exit_stage < exit_stage < final_exit_stage: return None else: - if start_partial_exit_stage <= exit_stage <= end_partial_exit_stage: + if exit_stage in self.partial_exit_stages: trade.set_custom_data(key="exit_stage", value=final_exit_stage) natr_ratio_percent = 0.7 diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 3c42ffa..85a029e 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -432,13 +432,13 @@ def zigzag( def calculate_volatility_quantile(pos: int) -> float: if pos not in volatility_quantile_cache: - start = max(0, pos + 1 - natr_period) - end = min(pos + 1, n) - if start >= end: + start_pos = max(0, pos + 1 - natr_period) + end_pos = min(pos + 1, n) + if start_pos >= end_pos: volatility_quantile_cache[pos] = np.nan else: volatility_quantile_cache[pos] = calculate_quantile( - natr_values[start:end], natr_values[pos] + natr_values[start_pos:end_pos], natr_values[pos] ) return volatility_quantile_cache[pos] -- 2.43.0