Clarify ETA messaging and reuse formatter

This commit is contained in:
fredmaloggia
2025-11-16 18:52:41 +01:00
parent 9d5cc56653
commit 92eeb2fe3a

View File

@@ -136,6 +136,18 @@ def clamp01(x):
return np.nan
return float(min(1.0, max(0.0, x)))
def format_eta(seconds):
"""Format a duration (seconds) as Xm Ys or Xh Ym Ys for readability."""
if not np.isfinite(seconds):
return "n/a"
seconds = max(0, int(round(seconds)))
minutes, secs = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
if hours:
return f"{hours}h {minutes:02d}m {secs:02d}s"
return f"{minutes}m {secs:02d}s"
# ================= HURST (sui RENDIMENTI) =================
def hurst_rs_returns(r, win_grid=None, min_seg=1):
r = pd.Series(r).dropna().astype("float64").values
@@ -917,12 +929,17 @@ for i, isin in enumerate(isins, 1):
avg_t = total_t / i
eta = avg_t * (len(isins) - i)
print(f"… backtest {i}/{len(isins)} completati — {dt:.2f} sec (avg {avg_t:.2f}s, ETA {eta:.1f}s)")
print(
f"… backtest {i}/{len(isins)} completati — {dt:.2f} sec "
f"(avg {avg_t:.2f}s, ETA {format_eta(eta)} rimanenti)"
)
# ---- TIMER FINALE ----
end_all = time.perf_counter()
print(f"⏱️ Tempo totale: {end_all - start_all:.2f} sec")
print(f"⏱️ Tempo medio per asset: {(end_all - start_all)/len(isins):.2f} sec")
total_elapsed = end_all - start_all
avg_elapsed = total_elapsed / max(len(isins), 1)
print(f"⏱️ Tempo totale: {format_eta(total_elapsed)} ({total_elapsed:.2f} sec)")
print(f"⏱️ Tempo medio per asset: {format_eta(avg_elapsed)} ({avg_elapsed:.2f} sec)")
bt_signals_df = pd.concat(bt_signals, ignore_index=True) if bt_signals else pd.DataFrame(