Update status for using KubuntuPC

This commit is contained in:
DaM
2026-03-02 20:04:42 +01:00
parent 2ec51d0daa
commit 8259e85b68
4 changed files with 203 additions and 71 deletions

View File

@@ -135,8 +135,6 @@ def inspect_strategies_config(
overall_status = "ok"
log.info(f"🔥 Strategies received: {len(payload.strategies)}")
results: List[Dict[str, Any]] = []
series: Dict[str, Any] = {"strategies": {}} if include_series else {}
@@ -154,6 +152,9 @@ def inspect_strategies_config(
"strategy_id": sid,
"status": "fail",
"message": f"Unknown strategy_id: {sid}",
"warnings": [],
"series_available": False,
"series_error": "Unknown strategy_id (not in registry)",
"n_windows": 0,
"oos_final_equity": payload.account_equity,
"oos_total_return_pct": 0.0,
@@ -180,6 +181,9 @@ def inspect_strategies_config(
"strategy_id": sid,
"status": "fail",
"message": msg,
"warnings": [],
"series_available": False,
"series_error": "Unknown strategy_id (not in registry)",
"n_windows": 0,
"oos_final_equity": payload.account_equity,
"oos_total_return_pct": 0.0,
@@ -224,6 +228,9 @@ def inspect_strategies_config(
log.info(f"🧠 Step3 | WF run | strategy={sid}")
try:
series_available = False
series_error = None
wf = WalkForwardValidator(
strategy_class=strategy_class,
param_grid=None,
@@ -252,11 +259,54 @@ def inspect_strategies_config(
status = "warning"
msg = "No closed trades in OOS"
warnings_list.append("Walk-forward produced no closed trades.")
# ✅ Registrar resultado SIEMPRE (no continue silencioso)
results.append({
"strategy_id": sid,
"status": status,
"message": msg,
"warnings": warnings_list,
# ✅ OPCIÓN B: serie disponible si include_series (aunque sea baseline/empty)
"series_available": bool(include_series),
"series_error": None if include_series else "WF produced no closed trades / empty windows",
"n_windows": 0,
"oos_final_equity": float(payload.account_equity),
"oos_total_return_pct": 0.0,
"oos_max_dd_worst_pct": 0.0,
"degradation_sharpe": None,
"windows": [],
})
# ✅ Serie mínima para poder renderizar algo (equity baseline)
if include_series:
series["strategies"][sid] = {
"window_returns_pct": [],
"window_equity": [float(payload.account_equity)],
"window_trades": [],
}
if overall_status == "ok":
overall_status = "warning"
continue
else:
# 🔒 Validación explícita de columnas WF (no fallbacks silenciosos)
required_cols = {"return_pct", "max_dd_pct", "trades", "window", "train_start", "train_end", "test_start", "test_end", "sharpe", "params"}
missing = required_cols - set(win_df.columns)
if missing:
raise ValueError(f"WF windows missing required columns: {sorted(missing)}")
oos_returns = win_df["return_pct"].tolist()
oos_dd = win_df["max_dd_pct"].tolist()
n_windows = len(win_df)
required_cols = {"return_pct", "max_dd_pct", "trades", "window", "train_start", "train_end", "test_start", "test_end", "sharpe", "params"}
missing = required_cols - set(win_df.columns)
if missing:
raise ValueError(f"WF windows missing required columns: {sorted(missing)}")
trades = win_df["trades"].astype(int).tolist()
too_few = sum(t < int(payload.wf.min_trades_test) for t in trades)
@@ -301,7 +351,9 @@ def inspect_strategies_config(
"strategy_id": sid,
"status": status,
"message": msg,
"warnings": warnings_list if status == "warning" else [],
"warnings": warnings_list,
"series_available": bool(include_series),
"series_error": None,
"n_windows": int(len(windows_out)),
"oos_final_equity": oos_final,
"oos_total_return_pct": float(oos_total_return),
@@ -323,6 +375,9 @@ def inspect_strategies_config(
"strategy_id": sid,
"status": "fail",
"message": f"Exception: {e}",
"warnings": [],
"series_available": False,
"series_error": f"{type(e).__name__}: {e}",
"n_windows": 0,
"oos_final_equity": float(payload.account_equity),
"oos_total_return_pct": 0.0,