]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): switch stoploss factor to soft saturation method arctan
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 17 Aug 2025 11:20:30 +0000 (13:20 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 17 Aug 2025 11:20:30 +0000 (13:20 +0200)
based

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/strategies/QuickAdapterV3.py

index 43d3e2051d8e3523b9f8a98dd50be0fa85871578..e75aa1ef13ecacaf676afaa3b3361f6545e0f8bc 100644 (file)
@@ -744,8 +744,8 @@ class QuickAdapterV3(IStrategy):
 
     @staticmethod
     @lru_cache(maxsize=128)
-    def get_stoploss_log_factor(trade_duration_candles: int) -> float:
-        return 1 / math.log10(2.0 + 0.25 * trade_duration_candles)
+    def get_stoploss_factor(trade_duration_candles: int) -> float:
+        return 2.75 / (1.2675 + math.atan(0.25 * trade_duration_candles))
 
     def get_stoploss_distance(
         self,
@@ -764,14 +764,14 @@ class QuickAdapterV3(IStrategy):
             current_rate
             * (trade_natr / 100.0)
             * self.get_label_natr_ratio_percent(trade.pair, natr_ratio_percent)
-            * QuickAdapterV3.get_stoploss_log_factor(
-                trade_duration_candles + int(round(trade.nr_of_successful_exits**1.25))
+            * QuickAdapterV3.get_stoploss_factor(
+                trade_duration_candles + int(round(trade.nr_of_successful_exits**1.5))
             )
         )
 
     @staticmethod
     @lru_cache(maxsize=128)
-    def get_take_profit_log_factor(trade_duration_candles: int) -> float:
+    def get_take_profit_factor(trade_duration_candles: int) -> float:
         return math.log10(9.75 + 0.25 * trade_duration_candles)
 
     def get_take_profit_distance(
@@ -787,7 +787,7 @@ class QuickAdapterV3(IStrategy):
             trade.open_rate
             * (trade_natr / 100.0)
             * self.get_label_natr_ratio_percent(trade.pair, natr_ratio_percent)
-            * QuickAdapterV3.get_take_profit_log_factor(trade_duration_candles)
+            * QuickAdapterV3.get_take_profit_factor(trade_duration_candles)
         )
 
     def throttle_callback(
@@ -1124,7 +1124,7 @@ class QuickAdapterV3(IStrategy):
         rate: float,
         min_natr_ratio_percent: float = 0.00999,
         max_natr_ratio_percent: float = 0.099,
-        lookback_period: int = 0,
+        lookback_period: int = 1,
         decay_ratio: float = 0.9,
     ) -> bool:
         """