Strategie
Rotazione momentum relativa ETH-vs-BTC, long-short dollar-neutral (perpetual ETHUSDT.BINANCE + BTCUSDT.BINANCE su due strumenti, barre giornaliere — long sul più forte / short sul più debole in base al momentum del rapporto ETH/BTC MOMENTUM, con deadband, solo OHLCV, 2 parametri)
Esito: Abbandonato
EthBtcRelativeMomentumRotationLS
Implementa fedelmente l'ipotesi: rotazione momentum del rapporto ETH/BTC dollar-neutral, market-neutral (benchmark_meaningful=false, quindi buy-and-hold non è correttamente il parametro di confronto)
Ipotesi
Valore atteso negativo su un campione affidabile di 582 operazioni / 6.7 anni: profit_factor 0.9999 (lordo piatto, nessun vantaggio netto), avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo. Il +7.83% total_return è interamente non realizzato (end_unrealized_pct 7.91) — una posizione finale non chiusa, non un vantaggio realizzato. Sharpe 0.26 con CI [-0.48, 1.01] attraversa lo zero, max_drawdown 56.6% e impact_cost_pct 101% (capacità ~$98k) significano che il solo impatto sul mercato assorbe l'intero vantaggio. Il momentum di forza relativa ETH/BTC non persiste abbastanza da generare profitti dollar-neutral al netto dei costi — è un'affermazione sull'ingresso, che IS l'ipotesi. Ottimizzare i parametri 2 (lookback, deadband) non può rendere profittevole un risultato lordo piatto/PF<1. Non vale la pena dedicare 2 ore all'ottimizzazione. abandon_class=negative_expectancy.
Implementazione
Risultati di verifica
CLEAN RESTART 2026-09-04 — la cronologia dei verdetti e i record di apprendimento di questa esecuzione sono stati rimossi ed è ripartita dalla verifica. L'abbandono precedente è dipeso dalla pipeline, non dal mercato: l'harness Layer-2 associava in modo errato gli helper @staticmethod (corretto), QA emetteva verdetti definitivi sulle prestazioni basati su uno smoke test non ottimizzato (rimosso — ora QA valuta solo la correttezza) e i timeout della sandbox erano dovuti alla carenza di slot per il backtest (corretta). L'ipotesi e il codice della strategia non sono cambiati. Valuta il codice in base ai suoi meriti; le prestazioni saranno giudicate in seguito dal backtest completo e dall'ottimizzatore.
Vantaggio quasi nullo o negativo su un campione misurabile dell'intera storia (550 operazioni, PF 0.965, -22.4%, avg_trade_return_pct +0.061% sotto le commissioni delle due gambe) — la coppia ETH/BTC a bassa dispersione che l'ipotesi stessa indicava come più debole di SOL/ETH. Implementazione fedele: il risultato sul vantaggio è quindi utile all'analista. Abbandonare in fase di revisione del backtest, secondo la condizione preregistrata dallo sviluppatore (PF non ha superato 1); non ottimizzare.
Drawdown massimo 57.8% (CI a 83%, durata di 1894 giorni) su un portafoglio nominalmente neutrale rispetto al mercato: dollar-neutral solo all'ingresso; un'esposizione lorda di 70% accumula perdite contro trend persistenti del rapporto ETH/BTC tra gli stop 6%. Non è un bug di copertura — la riconciliazione per nozionale uguale è corretta — ma un profilo di rischio che il Risk Officer dovrebbe conoscere.
Revisione Backtest
- Sharpe
- 0,26
- Rendimento totale
- 7,83%
- Drawdown massimo
- 56,58%
- Operazioni totali
- 582
- Tasso di successo
- 45,9%
- Profit Factor
- 1,00
Implementa fedelmente l'ipotesi: rotazione momentum del rapporto ETH/BTC dollar-neutral, market-neutral (benchmark_meaningful=false, quindi buy-and-hold non è correttamente il parametro di confronto)
Campione affidabile e misurabile: 582 rotazioni di coppia in 6.7 anni, metrics_reliable=true, pipeline di ingresso in buono stato (291 long / 291 short, nessuno scarto)
Davvero una superficie a 2 parametri, con basso rischio di overfitting
profit_factor 0.9999 — lordo piatto, non c'è alcun vantaggio netto verso cui l'ottimizzazione possa convergere
Valore atteso negativo su un campione affidabile: avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo
Il dato principale +7.83% è interamente non realizzato (end_unrealized_pct 7.91) — una posizione finale non chiusa, non un vantaggio realizzato
max_drawdown 56.6% (da CI a 80%); Sharpe 0.26 con CI [-0.48, 1.01] attraversa lo zero — indistinguibile dall'assenza di abilità
impact_cost_pct 101% con capacity_usd ~$98k — il solo impatto di mercato assorbe tutto il vantaggio; praticabile solo su scala minuscola
I rendimenti del terzile «normale» di regime_performance sono -56% a 60% DD — nessun vantaggio strutturale di forza relativa
Cronologia iterazioni
Verifica non superata (Layer 2 — scenari sintetici): Parametri usati: ['deadband', 'leg_frac', 'max_days', 'vol_window', 'mom_lookback', 'size_precision', 'stop_ratio_pct', 'min_notional_btc', 'min_notional_eth'] Controlla che __init__ imposti tutti gli attributi tramite self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000) - zero_volume: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000) - price_gap: TypeError: super(type, obj): obj must be an instance or subtype of type (timestamp della barra: 1735689600000)
Stratmill è uno strumento di ricerca e paper trading, non una consulenza finanziaria né un broker. I risultati di backtest e paper trading sono ipotetici. Il trading comporta un rischio di perdita.