Vai al contenuto
Tutte le strategie

Strategie

BTC Riporto del momentum tra sessioni — Long-Short, strumento singolo OHLCV: la direzione del movimento della sessione ASIA predice il movimento della sessione US; opera nella sessione US nella stessa direzione ONLY quando il movimento asiatico è ampio, resta flat durante la notte (BINANCE BTCUSDT USD-M, barre 1H, intraday, 2 parametri)

Esito: Abbandonato

BtcAsiaToUsSessionCarryoverLS

Ben misurato: 594 operazioni nell'intera cronologia di 2020-2026 1H, con posizioni long/short bilanciate (293/301), esecuzione pulita (594 segnalate, 594 inviate, nessuna scartata)

Ipotesi

Una strategia LONG-SHORT, SINGLE-INSTRUMENT, pura OHLCV INTRADAY su BTCUSDT.BINANCE USD-M perpetual, appartenente a una famiglia davvero diversa da tutte quelle in sospeso o scartate qui: NOT è una strategia trend/breakout (momentum su due TF, SuperTrend, Donchian, ORB), NOT è una strategia di mean reversion/fade (entrambe scartate) e NOT è un segnale basato su feed supplementari (tutti perdenti al netto dei costi). Sfrutta un SESSION intraday LEAD-LAG: la direzione definita durante la sessione asiatica ASIA, con……Mostra altroMostra meno

Una strategia LONG-SHORT, SINGLE-INSTRUMENT, pura OHLCV INTRADAY su BTCUSDT.BINANCE USD-M perpetual, appartenente a una famiglia davvero diversa da tutte quelle in sospeso o scartate qui: NOT è una strategia trend/breakout (momentum su due TF, SuperTrend, Donchian, ORB), NOT è una strategia di mean reversion/fade (entrambe scartate) e NOT è un segnale basato su feed supplementari (tutti perdenti al netto dei costi). Sfrutta un SESSION intraday LEAD-LAG: la direzione definita durante la sessione asiatica ASIA, con scarsa partecipazione (00:00-08:00 UTC), tende a PERSIST durante la sessione US, più liquida (13:00-21:00 UTC), mentre i flussi US e istituzionali proseguono il movimento invece di invertirlo. Ogni giorno UTC, si misurano segno e ampiezza del rendimento della sessione asiatica; quando il movimento asiatico è LARGE (un vero segnale direzionale, non rumore), la strategia entra nella sessione US nella direzione SAME e mantiene la posizione solo per quella sessione, restando FLAT durante la notte (nessuna esposizione al funding, nessun gap notturno, nessun rischio di trend su più giorni). È distinta dal breakout dell’intervallo di apertura BTC in sospeso (che scambia un intervallo BREAKOUT delle prime ore): qui non c’è breakout, ma un CARRYOVER direzionale di un movimento di sessione già avviato, verso una sessione successiva separata. Mantiene le caratteristiche sostenibili (singolo strumento, puro OHLCV con cronologia completa 2020-2026 di 1H, long-short, nessun feed supplementare dopo la lezione delle perdite nette, nessuna seconda gamba secondo L69) ed è progettata per superare i filtri statistici: una frequenza quasi giornaliera produce un numero di operazioni LARGE (>100/anno), sufficiente a superare la soglia minima di misurabilità e a rendere più precisa la stima dello Sharpe deflazionato; solo 2 parametri FREE (soglia d’ingresso sul movimento asiatico, moltiplicatore dello stop ATR) riducono al minimo la penalità di deflazione tra i migliori -225 tentativi. Inoltre, completa la categoria a breve orizzonte, finora poco rappresentata (8.6% contro 10%).

L'iterazione 2 corregge alla lettera il problema di Layer-2: tutti e sei gli scenari sintetici hanno generato «TypeError: _day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2». L'harness Layer-2 riassocia ogni attributo invocabile del proxy come metodo BOUND, quindi gli helper @staticmethod _day_of/_hour_of ricevevano l'istanza come primo argomento e la barra come secondo. Correzione: entrambi ora sono normali metodi d'istanza (self, bar) — i punti di chiamata usavano già……Mostra altroMostra meno

L'iterazione 2 corregge alla lettera il problema di Layer-2: tutti e sei gli scenari sintetici hanno generato «TypeError: _day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2». L'harness Layer-2 riassocia ogni attributo invocabile del proxy come metodo BOUND, quindi gli helper @staticmethod _day_of/_hour_of ricevevano l'istanza come primo argomento e la barra come secondo. Correzione: entrambi ora sono normali metodi d'istanza (self, bar) — i punti di chiamata usavano già self._day_of(bar)/self._hour_of(bar), quindi non è cambiato altro e il comportamento nel motore è identico. Seconda modifica preventiva nello stesso percorso dell'helper: il timestamp segnalato dall'harness (1735690980000) è in MILLISECONDS, mentre il motore fornisce nanosecondi; il vecchio codice divideva incondizionatamente per 1e9, il che con l'harness avrebbe ricondotto tutte le barre sintetiche alla stessa ora/giorno e bloccato la logica di sessione (un secondo problema latente di Layer-2 una volta risolto il TypeError). Il nuovo _epoch_secs() normalizza in base all'ordine di grandezza (ns/us/ms/s) e non interviene sulle barre reali espresse in nanosecondi, quindi Layer-3 e il backtest reale non ne risentono. Forma del segnale, regole di entrata/uscita, ATR, dimensionamento, importazioni e struttura della classe restano invariati rispetto al codice che aveva già superato Layer 1.

Premessa di aspettativa negativa su un campione storico completo ben misurato. Su 594 operazioni in 2020-2026, il carryover della sessione Asia->US comporta perdite: profit_factor 0.937 (<1), total_return -9.81%, aspettativa -$17.34/operazione, Sharpe -0.15 con CI [-0.760, 0.458] a cavallo dello zero, information_ratio -0.76. L'unico anno positivo è 2020 (+15.3%); tutti gli anni successivi sono negativi o piatti (2021 -8.1, 2022 -5.8, 2025 -10.8), con lo Sharpe mobile in calo fino a -8.3 entro 2026 — l'ipotesi «un grande movimento in Asia predice il movimento US» semplicemente non trova conferma. È anche al limite rispetto alle commissioni: avg_trade_return_pct 0.110% è inferiore alla soglia minima 0.15% di Binance USD-M (L22). Con soli 2 parametri liberi e un vantaggio direzionale netto negativo, l'ottimizzazione non può invertire il segno di un vantaggio che non esiste. Questa è la firma di un perdente netto fee_edge/no_edge — non vale la pena dedicarvi 2 ore di ottimizzazione.

Implementazione

BTCUSDT.BINANCE USD-M perpetual, barre da 1H, relazione intraday long-short di anticipo e ritardo tra sessioni. Ogni giorno UTC, il rendimento della sessione asiatica (00:00-08:00 UTC da apertura a chiusura) si accumula progressivamente e viene normalizzato con la deviazione standard degli ultimi 30 rendimenti asiatici (ripiego sulla dispersione basata su ATR durante la fase iniziale, finché la cronologia si completa), producendo a ogni barra uno z-score continuo e invariante di scala. All’ora di apertura della……Mostra altroMostra meno

BTCUSDT.BINANCE USD-M perpetual, barre da 1H, relazione intraday long-short di anticipo e ritardo tra sessioni. Ogni giorno UTC, il rendimento della sessione asiatica (00:00-08:00 UTC da apertura a chiusura) si accumula progressivamente e viene normalizzato con la deviazione standard degli ultimi 30 rendimenti asiatici (ripiego sulla dispersione basata su ATR durante la fase iniziale, finché la cronologia si completa), producendo a ogni barra uno z-score continuo e invariante di scala. All’ora di apertura della sessione US (13:00 UTC), la strategia entra nella direzione SAME della variazione asiatica quando |z| >= entry_z, con al massimo un ingresso per giorno di calendario. Esce all’ora di chiusura della sessione US (20:00 UTC), così la posizione resta FLAT durante la notte (niente funding né rischio di gap), oppure prima in caso di stop basato su ATR (stop_atr_mult x ATR, con minimo di min_stop_pct). La dimensione della posizione rischia risk_frac del capitale lungo la distanza dello stop, con un limite lordo di max_notional_frac x il capitale. Tutto lo stato (ATR, rendimento della sessione, coda di dispersione) richiede O(1) per barra; il cambio di giorno è ancorato al timestamp della barra stessa, non al contatore delle barre.

Risultati di verifica

CLEAN RESTART 2026-09-04 — la cronologia dei verdetti e i record di apprendimento di questa esecuzione sono stati rimossi e il processo è ripartito dalla verifica. Il precedente abbandono dipendeva 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 — QA ora valuta solo la correttezza), e i timeout della sandbox erano dovuti alla carenza di slot per i backtest (risolto). L'ipotesi e il codice della strategia non sono cambiati. Valuta il codice in base ai suoi meriti; le prestazioni saranno determinate in seguito dal backtest completo e dall'ottimizzatore.

Aggiungi _param_bounds = {entry_z: [...], stop_atr_mult: [...]} in modo che corrisponda ai limiti imposti dal codice; lascia fuori le costanti relative alle ore di sessione/ATR/al rischio.

La configurazione dichiara NO _param_bounds, sebbene l'ipotesi si basi su «solo 2 FREE parametri», per ridurre la penalità di deflazione dovuta alle -225 prove migliori. Senza questo vincolo, l'ottimizzatore non ha una superficie esplicita che lo leghi a {entry_z, stop_atr_mult}, indebolendo la disciplina dei 2 parametri. Non è un difetto di correttezza.

Imposta us_exit_hour=21 per l'intera finestra oppure documenta che 20:00 è intenzionale.

L'ipotesi indica la sessione US 13:00-21:00 UTC, ma us_exit_hour è 20, costringendo a restare flat un'ora prima. Dettaglio minore, non cambia il meccanismo né l'invariante di restare flat durante la notte.

Revisione Backtest

Sharpe
-0,15
Rendimento totale
-9,81%
Drawdown massimo
23,40%
Operazioni totali
594
Tasso di successo
44,8%
Profit Factor
0,94

Ben misurato: 594 operazioni nell'intera cronologia di 2020-2026 1H, con posizioni long/short bilanciate (293/301), esecuzione pulita (594 segnalate, 594 inviate, nessuna scartata)

Famiglia intraday di anticipo-ritardo tra sessioni davvero distinta; flat durante la notte, bassa correlazione con il benchmark (0.025), nessuna dipendenza da feed supplementari

Perdente netto: profit_factor 0.937 (<1), total_return -9.81%, aspettativa -$17.34/operazione, Sharpe -0.15 (CI a cavallo dello zero), information_ratio -0.76

avg_trade_return_pct 0.110% è inferiore alla soglia minima delle commissioni 0.15% di Binance USD-M — al limite rispetto alle commissioni anche ignorando l'aspettativa negativa

Solo 2020 (+15.3%) è significativamente positivo; tutti gli anni successivi sono negativi o piatti (2025 -10.8%), lo Sharpe mobile tende a -8.3 entro 2026 — la premessa del trascinamento tra sessioni non presenta un vantaggio persistente

return_kurtosis 78.6 — andamento irregolare (ad es. una giornata da -6.07% su 2023-08-29), anziché un vantaggio costante

Cronologia iterazioni

Verifica non superata (Layer 2 — scenari sintetici): Parametri utilizzati: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Verifica che __init__ imposti tutti gli attributi usando self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2……Mostra altroMostra meno

Verifica non superata (Layer 2 — scenari sintetici): Parametri utilizzati: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Verifica che __init__ imposti tutti gli attributi usando self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000) - steady_downtrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000) - flat_ranging: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000) - volatility_spike: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000) - zero_volume: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000) - price_gap: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() richiede 1 argomento posizionale ma ne sono stati forniti 2 (timestamp della barra: 1735690980000)

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.