Calibrate Torch forecast thresholds

This commit is contained in:
Codex
2026-06-23 16:35:24 +03:00
parent 12f470e0a3
commit 13de641fe3
8 changed files with 778 additions and 9 deletions
+7 -2
View File
@@ -108,6 +108,8 @@ class Settings:
time_series_min_candles: int
time_series_forecast_horizon: int
time_series_min_edge_percent: float
time_series_min_probability_up: float
time_series_min_confidence: float
time_series_max_adjustment: float
time_series_lstm_enabled: bool
time_series_lstm_model_path: Path
@@ -185,6 +187,7 @@ def load_settings(env_file: str | Path | None = None) -> Settings:
top_symbols_count = len(FIXED_SPOT_SYMBOLS)
symbols = FIXED_SPOT_SYMBOLS
forecast_enabled_default = strategy_mode == "torch_forecast"
min_signal_confidence = _float_env("MIN_SIGNAL_CONFIDENCE", 0.64)
settings = Settings(
trading_mode=mode,
host=os.getenv("HOST", "127.0.0.1"),
@@ -207,7 +210,7 @@ def load_settings(env_file: str | Path | None = None) -> Settings:
fast_entry_cooldown_seconds=_int_env("FAST_ENTRY_COOLDOWN_SECONDS", 20),
max_entries_per_minute=_int_env("MAX_ENTRIES_PER_MINUTE", 12),
websocket_enabled=_bool_env("WEBSOCKET_ENABLED", True),
min_signal_confidence=_float_env("MIN_SIGNAL_CONFIDENCE", 0.64),
min_signal_confidence=min_signal_confidence,
max_spread_percent=_float_env("MAX_SPREAD_PERCENT", 0.18),
min_24h_turnover_usdt=_float_env("MIN_24H_TURNOVER_USDT", 1000000.0),
pattern_analysis_enabled=_bool_env("PATTERN_ANALYSIS_ENABLED", False),
@@ -247,7 +250,9 @@ def load_settings(env_file: str | Path | None = None) -> Settings:
time_series_forecast_enabled=_bool_env("TIME_SERIES_FORECAST_ENABLED", forecast_enabled_default),
time_series_min_candles=_int_env("TIME_SERIES_MIN_CANDLES", 120),
time_series_forecast_horizon=_int_env("TIME_SERIES_FORECAST_HORIZON", 3),
time_series_min_edge_percent=_float_env("TIME_SERIES_MIN_EDGE_PERCENT", 0.04),
time_series_min_edge_percent=_float_env("TIME_SERIES_MIN_EDGE_PERCENT", 0.10),
time_series_min_probability_up=_float_env("TIME_SERIES_MIN_PROBABILITY_UP", 0.64),
time_series_min_confidence=_float_env("TIME_SERIES_MIN_CONFIDENCE", 0.72),
time_series_max_adjustment=_float_env("TIME_SERIES_MAX_ADJUSTMENT", 0.08),
time_series_lstm_enabled=_bool_env("TIME_SERIES_LSTM_ENABLED", True),
time_series_lstm_model_path=Path(os.getenv("TIME_SERIES_LSTM_MODEL_PATH", "runtime/lstm_forecaster.json")),
+5
View File
@@ -224,6 +224,8 @@ def _safe_config(settings: Settings) -> dict[str, Any]:
"time_series_min_candles": settings.time_series_min_candles,
"time_series_forecast_horizon": settings.time_series_forecast_horizon,
"time_series_min_edge_percent": settings.time_series_min_edge_percent,
"time_series_min_probability_up": settings.time_series_min_probability_up,
"time_series_min_confidence": settings.time_series_min_confidence,
"time_series_max_adjustment": settings.time_series_max_adjustment,
"time_series_lstm_enabled": settings.time_series_lstm_enabled,
"time_series_lstm_model_path": str(settings.time_series_lstm_model_path),
@@ -1062,6 +1064,9 @@ HTML = r"""
['Лимит на пару', money(config.max_symbol_exposure_usdt)],
['Риск на сделку', `${num((config.risk_per_trade_percent || 0) * 100, 2)}% equity`],
['RSI входа', `${num(config.trend_rsi_min, 1)} - ${num(config.trend_rsi_max, 1)}`],
['Torch min edge', `${num(config.time_series_min_edge_percent, 3)}%`],
['Torch min P роста', `${num((config.time_series_min_probability_up || 0) * 100, 1)}%`],
['Torch min confidence', `${num(config.time_series_min_confidence, 3)}`],
['Лимит в позициях', money(config.max_total_exposure_usdt)],
['Лимит позиций', `${config.max_open_positions} всего / ${config.max_positions_per_symbol} на пару`],
['Стоп', `${num(config.stop_loss_percent * 100, 2)}%`],
+3 -2
View File
@@ -644,7 +644,7 @@ def _torch_forecast_entry_signal(
"expected_edge_ok": expected_return >= min_edge,
"probability_ok": probability_up >= min_probability,
"skill_ok": skill > 0.0,
"confidence_ok": confidence >= settings.min_signal_confidence,
"confidence_ok": confidence >= settings.time_series_min_confidence,
"spread_ok": spread_ok,
"liquidity_ok": liquidity_ok,
"risk_size_ok": position_notional >= settings.min_position_usdt,
@@ -661,6 +661,7 @@ def _torch_forecast_entry_signal(
"min_edge_percent": min_edge,
"probability_up": probability_up,
"min_probability_up": min_probability,
"min_confidence": settings.time_series_min_confidence,
"skill": skill,
"spread_percent": round(ticker.spread_percent, 5),
"turnover_24h": ticker.turnover_24h,
@@ -766,7 +767,7 @@ def _is_torch_forecast(forecast: dict) -> bool:
def _torch_min_probability(settings: Settings) -> float:
return round(_clamp(settings.min_signal_confidence - 0.08, 0.52, 0.68), 4)
return round(_clamp(settings.time_series_min_probability_up, 0.45, 0.75), 4)
def _torch_forecast_confidence(settings: Settings, forecast: dict) -> float: