Clarify ETA messaging and reuse formatter
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user