14522262e6
Reset del progetto su fondamenta verificate dopo la scoperta che l'intera libreria "validata OOS" era artefatto di feed contaminato (print fantasma del feed Cerbero TESTNET + storico Binance/USDT). - Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE 50-82% barre flat; XRP/BNB non certificabili). - Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST con segnale residuo, da ri-validare in isolamento. - Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio, runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/ portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/ (preservati, non cancellati). Diario consolidato in un unico documento. - Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal + src/backtest/engine + load_data; tool dati certificati (rebuild_history, certify_feed, audit_feed, multi_source_check). - Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
1.2 KiB
Python
25 lines
1.2 KiB
Python
import pytest
|
|
from src.portfolio.base import Portfolio, SleeveSpec
|
|
from scripts.analysis.report_families import build_everything
|
|
from scripts.analysis.combine_portfolio import port_returns, metrics, SPLIT
|
|
|
|
|
|
def _master9_specs():
|
|
fade = [SleeveSpec(kind="single", name=f"{c}", sid=f"{c}_{a}", asset=a, cluster=f"{a}-rev")
|
|
for a in ("BTC", "ETH") for c in ("MR01", "MR02", "MR07")]
|
|
honest = [SleeveSpec(kind="single", name="DIP01", sid="DIP01_BTC", asset="BTC", cluster="BTC-rev"),
|
|
SleeveSpec(kind="single", name="TR01", sid="TR01_basket", cluster="trend"),
|
|
SleeveSpec(kind="single", name="ROT02", sid="ROT02_rot", cluster="rotation")]
|
|
return fade + honest
|
|
|
|
|
|
def test_master9_backtest_matches_report():
|
|
p = Portfolio(code="PORT03", label="Master", sleeves=_master9_specs(), weighting="equal")
|
|
res = p.backtest()
|
|
S, _, _, _ = build_everything()
|
|
dr_ref = port_returns(S)
|
|
ref_full, ref_oos = metrics(dr_ref), metrics(dr_ref, lo=SPLIT)
|
|
assert res.full["sharpe"] == pytest.approx(ref_full["sharpe"], abs=1e-6)
|
|
assert res.full["dd"] == pytest.approx(ref_full["dd"], abs=1e-6)
|
|
assert res.oos["sharpe"] == pytest.approx(ref_oos["sharpe"], abs=1e-6)
|