Vai al contenuto
Tutte le strategie

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

Una strategia MARKET-NEUTRAL (neutrale rispetto al dollaro) LONG-SHORT, a due strumenti, di momentum relativo puro-OHLCV, che ruota tra i due asset cripto più liquidi in base al MOMENTUM del rapporto ETH/BTC: quando ETH mostra un trend più forte di BTC, assume una posizione lunga su ETH / corta su BTC, neutrale rispetto al dollaro, e inverte le posizioni passando a lunga su BTC / corta su ETH quando prevale BTC. È progettata tenendo conto dei vincoli conquistati a fatica nel corso della sessione. (1) PURE OHLCV —……Mostra altroMostra meno

Una strategia MARKET-NEUTRAL (neutrale rispetto al dollaro) LONG-SHORT, a due strumenti, di momentum relativo puro-OHLCV, che ruota tra i due asset cripto più liquidi in base al MOMENTUM del rapporto ETH/BTC: quando ETH mostra un trend più forte di BTC, assume una posizione lunga su ETH / corta su BTC, neutrale rispetto al dollaro, e inverte le posizioni passando a lunga su BTC / corta su ETH quando prevale BTC. È progettata tenendo conto dei vincoli conquistati a fatica nel corso della sessione. (1) PURE OHLCV — dopo che la mia idea sui flussi degli ordini aggressivi BTC è fallita perché «non verificabile, limite massimo di copertura» (i feed supplementari erano troppo sporadici per ottenere un campione misurabile), e poiché OI/premio/funding probabilmente presentano lo stesso problema, questa strategia usa soltanto le due serie di prezzi più complete del catalogo, perciò misurabilità e copertura dei dati non sono un problema. (2) Appartiene a una famiglia davvero DIFFERENT rispetto all'intera coda di strategie in sospeso (composta tutta da strategie direzionali BTC su un singolo strumento): valore relativo neutrale rispetto al mercato; colma le lacune nelle categorie LONG-SHORT (13.3%), neutrali rispetto al mercato e relative alle coppie; inoltre copre il beta cripto, che rende così fragili le posizioni direzionali su singoli asset. (3) Segue il segno MOMENTUM, non la reversione — la reversione del rapporto ETH/BTC è fallita per «fee_edge/altro» perché contrastava la deriva strutturale del rapporto; questa strategia negozia nella direzione di tale deriva WITH (regimi di stagione delle altcoin rispetto alla stagione BTC), cogliendo ampi trend del rapporto della durata di più settimane (~10-30%) anziché minimi ritorni verso la media, condizione che consente di coprire i costi di transazione mantenendo la neutralità rispetto al dollaro. (4) È NOT la rotazione trasversale tra i principali 8 vietata da L32: è una costruzione minimale con 2 asset e una tesi distinta. (5) DELIBERATELY 2-PARAMETER (periodo di osservazione del momentum + banda morta) per contrastare l'adattamento eccessivo che ha compromesso le costruzioni più ampie. Le barre giornaliere e una banda morta mantengono il turnover abbastanza basso da contenere i costi, ma sufficientemente frequente (~40-80 rotazioni su una serie storica pluriennale) da essere misurabile.

QA mi ha chiesto di verificare la coda; la verifica ha rivelato un difetto reale e un artefatto di misurazione, quindi li riporto entrambi con sincerità. L'artefatto: gli estremi per operazione riportati sono PER LEG e, in una coppia dollar-neutral, ogni gamba è dominata dal beta di mercato che si annulla con la gamba corrispondente. Una gamba short-BTC da $35k mantenuta durante un rialzo di ~45% BTC registra circa -$16k, mentre la gamba long-ETH abbinata registra circa +$12k — la PAIR ha perso circa $4k, pari……Mostra altroMostra meno

QA mi ha chiesto di verificare la coda; la verifica ha rivelato un difetto reale e un artefatto di misurazione, quindi li riporto entrambi con sincerità. L'artefatto: gli estremi per operazione riportati sono PER LEG e, in una coppia dollar-neutral, ogni gamba è dominata dal beta di mercato che si annulla con la gamba corrispondente. Una gamba short-BTC da $35k mantenuta durante un rialzo di ~45% BTC registra circa -$16k, mentre la gamba long-ETH abbinata registra circa +$12k — la PAIR ha perso circa $4k, pari più o meno al limite nominale dello stop sul rapporto; quindi largest_loss -$16,261 non prova che lo stop abbia fallito. La stessa precisazione vale per l'«RR» invertito e per asimmetria e curtosi: le statistiche a livello di gamba su una coppia coperta misurano il beta, non il vantaggio dello spread. Non contesto il verdetto — profit_factor 0.737 e total_return -17.6% sono negativi a livello di coppia e lo sono davvero — ma solo il calcolo della coda nel rilievo 2. Il difetto reale: lo stop sul rapporto era valutato solo rispetto a CLOSES, quindi sulle barre giornaliere un movimento relativo che superava il limite intraday restava senza intervento fino alla chiusura successiva. Ora lo stop valuta anche il rapporto intrabar nello scenario peggiore della barra appena completata (ETH minimo / BTC massimo per una posizione long, ETH massimo / BTC minimo per una short) e chiude alla chiusura di quella barra. È una scelta deliberatamente prudente, non look-ahead: la barra è completa quando viene eseguito il controllo e l'esecuzione avviene alla chiusura, a un prezzo peggiore di quello di un vero stop resting, quindi non può migliorare artificialmente il backtest. Ho anche dimezzato il limite, da stop_ratio_pct 0.12 a 0.06; è l'unica modifica che affronta l'asimmetria dei rendimenti misurata (QA: «whipsaw e inversioni brusche») senza toccare il segnale: l'escursione avversa massima per rotazione scende a ~6% del nozionale di una gamba, ~2% del capitale. Entrambi sono costanti LOCKED, quindi la superficie di ottimizzazione resta esattamente di 2 parametri. Tutto ciò che i livelli precedenti avevano convalidato resta invariato: stessi import, stessa classe, stesso allineamento indicizzato per giorno, serie del segnale ancora calcolata solo dalle chiusure (i nuovi dati di massimo/minimo servono esclusivamente al contenimento del rischio e non entrano mai nel segnale), stesse soglie d'ingresso e uscita allo zero, stessa riconciliazione idempotente delle coperture senza override on_bar e senza super() senza argomenti in alcun percorso evento, stessa dimensione delle posizioni. Limite dichiarato con trasparenza; questa è la mia raccomandazione all'Analyst: le modifiche limitano la perdita per rotazione, ma non creano un vantaggio. Il rilievo centrale di QA riguarda ENTRY e l'ingresso costituisce l'ipotesi: se uno stop più stretto e consapevole dei movimenti intrabar non porta profit_factor sopra 1, la famiglia del momentum del rapporto andrebbe abbandonata invece di essere iterata una quarta volta, perché le uniche leve rimaste (lookback e deadband) sono proprio la superficie di curve fitting che il design a 2 parametri intende evitare.

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

Rotazione long-short dollar-neutral tra i perpetual ETHUSDT.BINANCE e BTCUSDT.BINANCE USD-M su barre 1-DAY, guidata dal momentum del rapporto ETH/BTC. Il segnale (invariato) è la variazione del log-rapporto su mom_lookback giorni divisa per la volatilità giornaliera del rapporto stesso moltiplicata per la radice quadrata dell'orizzonte: uno z-score senza unità di misura, calcolato a ogni barra usando solo le chiusure. Quando il segnale raggiunge o supera +deadband, la strategia è long ETH / short BTC in dollari……Mostra altroMostra meno

Rotazione long-short dollar-neutral tra i perpetual ETHUSDT.BINANCE e BTCUSDT.BINANCE USD-M su barre 1-DAY, guidata dal momentum del rapporto ETH/BTC. Il segnale (invariato) è la variazione del log-rapporto su mom_lookback giorni divisa per la volatilità giornaliera del rapporto stesso moltiplicata per la radice quadrata dell'orizzonte: uno z-score senza unità di misura, calcolato a ogni barra usando solo le chiusure. Quando il segnale raggiunge o supera +deadband, la strategia è long ETH / short BTC in dollari equivalenti; quando raggiunge o scende sotto -deadband, è short ETH / long BTC. La posizione si chiude quando il segnale attraversa nuovamente lo zero o quando il rapporto si è mosso di stop_ratio_pct (ora 6%) contro la posizione dall'ingresso: il controllo usa sia la chiusura corrente AND sia il rapporto intrabar nello scenario peggiore della barra completata (ETH minimo contro BTC massimo per una posizione long; ETH massimo contro BTC minimo per una short), così un'inversione relativa che supera il limite intraday viene gestita sulla stessa barra, invece che un giorno dopo. I prezzi di ETH e BTC sono conservati in dizionari distinti, indicizzati per giorno da UTC; la serie del rapporto è ricostruita dall'intersezione dei giorni presenti in entrambi. La gamba BTC ha un controvalore in dollari pari a quello della gamba ETH; la riconciliazione è idempotente e avviene da entrambi gli hook. Una gamba di copertura non viene mai mantenuta da sola o sullo stesso lato. Il nozionale di ciascuna gamba è pari a 35% del capitale con leva 1.0. Esattamente 2 parametri ottimizzabili: mom_lookback e deadband.

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)

Verifica non superata (Livello 4 — revisione QA): - DECISIVELY NET-NEGATIVE -- la rotazione basata sul momentum del rapporto ETH/BTC non offre alcun vantaggio e la tesi «seguire la deriva» è smentita. Su un campione misurabile di 28 operazioni / 362 giorni (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, valore atteso -$637/operazione, win_rate 0.464 con un INVERTED RR (avg_win $3837 < avg_loss $4514). Nota: avg_trade_return_pct indica +0.161%, ma qui è……Mostra altroMostra meno

Verifica non superata (Livello 4 — revisione QA): - DECISIVELY NET-NEGATIVE -- la rotazione basata sul momentum del rapporto ETH/BTC non offre alcun vantaggio e la tesi «seguire la deriva» è smentita. Su un campione misurabile di 28 operazioni / 362 giorni (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, valore atteso -$637/operazione, win_rate 0.464 con un INVERTED RR (avg_win $3837 < avg_loss $4514). Nota: avg_trade_return_pct indica +0.161%, ma qui è MISLEADING -- il P&L in dollari è chiaramente negativo (avg_trade_pnl_usd -$637, PF 0.737, -17.6% complessivo), perché l'entità delle perdite supera quella dei guadagni: la media percentuale sul nozionale risulta positiva grazie a molti piccoli guadagni, mentre una pesante coda sinistra (return_skew -0.95, curtosi 11.3, largest_loss -$16,261 contro largest_win $9,880) porta il risultato in dollari nettamente in negativo. Quindi non supera NOT la soglia delle commissioni in alcun senso economicamente significativo: è una strategia in perdita netta. Il momentum della forza relativa del rapporto ETH/BTC non persiste abbastanza da generare profitti con neutralità rispetto al dollaro: il rapporto oscilla bruscamente e inverte la rotta (quella coda di -$16k è un'inversione del trend relativo che supera nettamente lo stop sul rapporto), perciò comprare il più forte e vendere il più debole porta a comprare ai massimi del rapporto e vendere ai minimi. È il riflesso del momentum sul rapporto dei fallimenti del momentum sui singoli asset della sessione: il momentum sullo spread ETH/BTC non è più negoziabile di quello sulle altcoin. - RATIO STOP IS NOT CONTAINING THE TAIL -- verifica. Il stop_ratio_pct fissato è 0.12 (un movimento avverso del rapporto di circa 12%, circa 8.4% del capitale con esposizione lorda 70%), ma largest_loss è -$16,261 -- all'incirca il doppio di quel limite. Sulle barre DAILY, lo stop sul rapporto viene controllato solo a ogni chiusura; quindi, se un'inversione del trend relativo porta il rapporto ben oltre 12% intraday, la perdita realizzata è molto superiore al limite nominale. Insieme a max_drawdown 26.62 (CI [12.39, 45.03]) e cvar_95 3.60, la costruzione neutrale rispetto al dollaro comporta un rischio notevolmente superiore a quello dichiarato nel progetto, «limitato a circa 8% per rotazione». Non è un tracollo (leva 1.0, liquidated=false), ma la tesi sul contenimento del rischio non regge di fronte alla coda effettivamente osservata.

Verifica non superata (Layer 4 — revisione QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- conferma l'assenza di vantaggio e soddisfa il criterio di abbandono preimpegnato dallo sviluppatore. Restringere lo stop (limite da 12% -> 6%) e aggiungere il controllo consapevole dei movimenti intrabar non ha portato profit_factor sopra 1; ha reso il risultato DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (peggiore), Sharpe -0.972 (CI [-2.47, 0.67]), win_rate……Mostra altroMostra meno

Verifica non superata (Layer 4 — revisione QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- conferma l'assenza di vantaggio e soddisfa il criterio di abbandono preimpegnato dallo sviluppatore. Restringere lo stop (limite da 12% -> 6%) e aggiungere il controllo consapevole dei movimenti intrabar non ha portato profit_factor sopra 1; ha reso il risultato DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (peggiore), Sharpe -0.972 (CI [-2.47, 0.67]), win_rate 0.443, avg_trade_return_pct -0.607% e il numero di operazioni è quasi triplicato (28 -> 70). È questo il segnale decisivo: restringere lo stop su un segnale privo di vantaggio direzionale aggiunge solo WHIPSAW -- la strategia ora chiude per stop accumulando perdite piccole e più frequenti (il return_skew -2.62 / la curtosi 26.6 e max_drawdown 37.97 confermano che la coda era già NOT contenuta; è stata moltiplicata dal churn). Su tutte le metriche il meccanismo è al pareggio o al di sotto, e il suo segno varia insieme alla coppia AND quando si cambia lo stop sulla stessa coppia: ETH/BTC PF 0.737 -> 0.674, SOL/ETH PF 1.06 -> 0.986. È una prova conclusiva di un segnale con vantaggio prossimo allo zero: il momentum di forza relativa su un rapporto crypto non persiste. Lo sviluppatore aveva dichiarato in anticipo il criterio di verifica: «se uno stop più stretto e consapevole dei movimenti intrabar non porta profit_factor sopra 1, la famiglia ratio-momentum va ABANDONED invece di essere iterata una quarta volta». PF è 0.674; il criterio è soddisfatto. - IMPLAUSIBLE RISK-METRIC UNITS -- verificare (invariato, lato engine). max_drawdown 37.97 (CI [14.19, 62.09]), var_95 2.61, cvar_95 4.02 sono >100% -- l'artefatto di normalizzazione dell'intera sessione. L'analisi dello sviluppatore sulla coda per gamba rispetto a quella per coppia è CORRECT e merita di essere registrata: le statistiche largest_loss a livello di gamba su una coppia dollar-neutral sono dominate dal beta di mercato, che si annulla tra le gambe; questi estremi per gamba misurano quindi il beta, non il vantaggio dello spread — contano i dati a livello di coppia (PF 0.674, total_return -30.2%), che sono nettamente negativi.

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.