From acfba634200d1cece1c16488135176cd0ef02ef5 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Fri, 24 Jul 2026 20:58:52 +0000 Subject: [PATCH] =?UTF-8?q?fix(test):=20test=5Fpaper=5Fadvance=20bug=20lat?= =?UTF-8?q?ente=20=E2=80=94=20factor=20divideva=20via=20(1+tail[0]),=20pas?= =?UTF-8?q?sava=20solo=20con=20combo[-500]=3D=3D0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pre-esistente su main (fallisce anche li'), emerso con l'avanzare dei dati. Co-Authored-By: Claude Fable 5 --- tests/test_trend_portfolio.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_trend_portfolio.py b/tests/test_trend_portfolio.py index 07b1e44..91915a8 100644 --- a/tests/test_trend_portfolio.py +++ b/tests/test_trend_portfolio.py @@ -60,11 +60,14 @@ def test_paper_advance_matches_backtest_slice(): # equity sull'ultimo tratto (skip warmup) tail = combo[-500:] eq_ref = np.cumprod(1.0 + np.clip(tail, -0.99, None)) - # ricostruzione "alla paper" deve dare lo stesso fattore - factor = float(eq_ref[-1] / eq_ref[0]) + # ricostruzione "alla paper" deve dare lo stesso fattore. NB fix 2026-07-24: + # l'equity parte da 1.0 PRIMA della fetta -> il fattore della fetta e' eq_ref[-1]. + # (Il vecchio eq_ref[-1]/eq_ref[0] divideva via (1+tail[0]): passava solo finche' + # combo[-500] era esattamente 0.0 — bug latente emerso con l'avanzare dei dati.) + factor = float(eq_ref[-1]) assert factor > 0 # sanity: il fattore equivale al prodotto dei (1+combo) - assert np.isclose(factor, np.prod(1.0 + np.clip(tail, -0.99, None)) / (1.0), rtol=1e-9) + assert np.isclose(factor, np.prod(1.0 + np.clip(tail, -0.99, None)), rtol=1e-9) def test_tsmom_blend_range():