]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix(reforcexy): reward analysis idle penalty
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 6 Oct 2025 18:12:29 +0000 (20:12 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 6 Oct 2025 18:12:29 +0000 (20:12 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
ReforceXY/reward_space_analysis/reward_space_analysis.py

index e671f53ceb6b5462bf5d47a8bdc69e3f453ef2a2..261a397bb5a721b186957ff171f0be459df8c252 100644 (file)
@@ -489,18 +489,26 @@ def _idle_penalty(
     """Mirror the environment's idle penalty behaviour."""
     idle_penalty_scale = _get_param_float(params, "idle_penalty_scale", 0.75)
     idle_penalty_power = _get_param_float(params, "idle_penalty_power", 1.0)
-    max_trade_duration_candles = params.get("max_trade_duration_candles", 128)
-    max_idle_duration_candles = params.get("max_idle_duration_candles")
+    max_trade_duration_candles = params.get("max_trade_duration_candles")
     try:
-        max_idle_duration = (
-            int(max_idle_duration_candles)
-            if max_idle_duration_candles is not None
-            else 2 * max_trade_duration_candles
-        )
+        if max_trade_duration_candles is not None:
+            max_trade_duration_candles = int(max_trade_duration_candles)
+        else:
+            max_trade_duration_candles = int(context.max_trade_duration)
     except (TypeError, ValueError):
-        max_idle_duration = max_trade_duration_candles
-    if max_idle_duration <= 0:
+        max_trade_duration_candles = int(context.max_trade_duration)
+
+    max_idle_duration_candles = params.get("max_idle_duration_candles")
+    if max_idle_duration_candles is None:
         max_idle_duration = 2 * max_trade_duration_candles
+    else:
+        try:
+            max_idle_duration = int(max_idle_duration_candles)
+        except (TypeError, ValueError):
+            max_idle_duration = 2 * max_trade_duration_candles
+        if max_idle_duration <= 0:
+            max_idle_duration = 2 * max_trade_duration_candles
+
     idle_duration_ratio = context.idle_duration / max(1, max_idle_duration)
     return -idle_factor * idle_penalty_scale * idle_duration_ratio**idle_penalty_power