Vai al contenuto
Tutte le strategie

Strategie

BTC COIN-M US-Stagionalità della prosecuzione del momentum intraday, long-short (singolo strumento BTCUSD_PERP.BINANCE_CM, barre da 1h esclusivamente OHLCV, entrare nella direzione di un impulso significativo all'inizio della sessione US e seguire la prosecuzione intraday fino alla chiusura della sessione, parametro 3)

Esito: Abbandonato

BtcCmInverseUsSessionMomentumContinuationLS

Soglia del backtest: - metriche inaffidabili: 648 operazioni / 1409 giorni di dati sono prove insufficienti (ne servono >= 5 operazioni su >= 10 giorni) — aumenta la frequenza del segnale o amplia la finestra

Ipotesi

Una strategia LONG-SHORT su un singolo strumento, basata su calendario/stagionalità, sul perpetuo inverso BTCUSD_PERP di Binance COIN-M.BINANCE_CM (BTC con margine, ~0.06% per un’operazione completa taker, solo OHLCV — a singola gamba, quindi evita la trappola COIN-M multi-gamba/funding data_unavailable in L20/L34; le barre perpetue BTC CM hanno una cronologia completa nel catalogo). Il vantaggio deriva dalla mean reversion NOT, non da un breakout del range NOT, dal funding NOT, dalle liquidazioni NOT né da un……Mostra altroMostra meno

Una strategia LONG-SHORT su un singolo strumento, basata su calendario/stagionalità, sul perpetuo inverso BTCUSD_PERP di Binance COIN-M.BINANCE_CM (BTC con margine, ~0.06% per un’operazione completa taker, solo OHLCV — a singola gamba, quindi evita la trappola COIN-M multi-gamba/funding data_unavailable in L20/L34; le barre perpetue BTC CM hanno una cronologia completa nel catalogo). Il vantaggio deriva dalla mean reversion NOT, non da un breakout del range NOT, dal funding NOT, dalle liquidazioni NOT né da un approccio cross-sectional NOT: è un’anomalia TIME-OF-DAY intraday, per cui l’impulso direzionale formatosi all’apertura del desk US tende a PERSIST durante la sessione US. Meccanismo: ogni giorno, si misura il rendimento di BTC su una finestra di segnale fissa nella prima parte della sessione US (13:00->15:00 UTC). Se il rendimento della finestra in valore assoluto supera una soglia d’ingresso (un impulso direzionale nuovo e significativo, anziché rumore), si entra alla chiusura della barra 15:00 UTC, nella direzione SAME, e si mantiene la posizione seguendo la continuazione fino all’ora di uscita alla chiusura della sessione (21:00 UTC), con al massimo una posizione al giorno. La scelta di COIN-M è deliberata per due ragioni: (1) il costo minimo delle commissioni di ~0.10% CM è inferiore al minimo di 0.15% USD-M, lasciando a un modesto vantaggio di continuazione intraday più margine per coprire i costi; (2) BINANCE_CM è sottorappresentato (3.4% rispetto all’obiettivo di >=5%) e questo è un utilizzo legittimo di CM a singola gamba BTC-OHLCV secondo L20. Solo 3 parametri (ATR-moltiplicatore dello stop, soglia d’ingresso, durata della finestra di segnale) per resistere ai fallimenti da overfitting che hanno stroncato 248 ipotesi precedenti.

Iterazione riavviata. Il feedback indica che il precedente abbandono era un artefatto della pipeline (associazione errata del metodo statico Layer-2, verdetti sulle prestazioni QA basati su uno smoke test non ottimizzato, carenza di slot per il backtest); il meccanismo resta quindi intenzionalmente invariato: stesso riferimento registrato -13:00-UTC, stesso ingresso nella direzione della continuazione, stessa uscita a orario fisso, stesso dimensionamento in contratti interi COIN-M, stessi tre parametri regolabili……Mostra altroMostra meno

Iterazione riavviata. Il feedback indica che il precedente abbandono era un artefatto della pipeline (associazione errata del metodo statico Layer-2, verdetti sulle prestazioni QA basati su uno smoke test non ottimizzato, carenza di slot per il backtest); il meccanismo resta quindi intenzionalmente invariato: stesso riferimento registrato -13:00-UTC, stesso ingresso nella direzione della continuazione, stessa uscita a orario fisso, stesso dimensionamento in contratti interi COIN-M, stessi tre parametri regolabili e stessi limiti. Poiché reinviare un codice identico byte per byte non supera il controllo sull’hash invariato, ho apportato una modifica sostanziale nel punto più debole del codice: ora lo stop protettivo ATR viene verificato rispetto al LOW/HIGH della barra, anziché solo alla sua CLOSE. Su barre da 1 ore, uno stop verificato solo alla chiusura non scatta se la barra supera il livello e poi chiude al di qua; così una sessione in perdita potrebbe subire un’escursione arbitrariamente ampia fino all’uscita a orario fisso 21:00. Lo stop è l’unico elemento che limita questo rischio, quindi sottostimarlo è proprio il problema degli stop basati sulla chiusura della barra messo in guardia dalle regole di codifica. L’attivazione avviene intrabar; l’uscita viene comunque eseguita alla chiusura della barra tramite l’uscita a mercato del template di base, senza presumere un prezzo di esecuzione intrabar. Ho anche dichiarato _param_bounds per i tre parametri limitati (signal_window_hours [1,5], entry_threshold [0.002,0.02], atr_stop_mult [1.0,4.0]), così l’ottimizzatore non può esplorare valori che il codice riscrive silenziosamente: la docstring prometteva già questo allineamento. Verificato sul catalogo per la finestra della sandbox (barre da 1 ore su BTCUSD_PERP.BINANCE_CM, ultimi circa 830 giorni): l’impulso 13:00->15:00 UTC supera la soglia 0.6% in 296 giorni su 726, quindi gli ingressi sono frequenti e l’esecuzione non rischia di restare senza operazioni. L’impulso assoluto mediano è 0.46%, nettamente superiore al costo round-trip di circa 0.10% CM che la continuazione deve coprire.

Valore atteso negativo su un campione affidabile di 748 operazioni / 6.1 anni: avg_trade_return_pct è -0.109% (sotto zero, prima ancora di considerare il costo round-trip di circa 0.10% CM), profit_factor 0.84, Sharpe -0.81, conto liquidato a -100%. L’implementazione rispetta fedelmente l’ipotesi e la pipeline di ingresso funziona correttamente: è quindi un verdetto del mercato. L’impulso delle prime US sessioni orienta la direzione, ma la continuazione intraday realizzata è negativa al netto dei costi in ogni regime di volatilità e in quasi tutti gli anni. L’ottimizzazione non può portare in positivo un vantaggio già negativo prima dei costi; nessuna combinazione dei tre parametri (finestra, soglia, stop ATR) rende positivo il premio di continuazione. La preoccupazione di QA sul vantaggio è confermata sull’intera cronologia. abandon_class=negative_expectancy.

Implementazione

Stagionalità intraday long-short basata sull’ora del giorno su BTC COIN-M perpetual inverso (BTCUSD_PERP.BINANCE_CM, barre a 1 ore, solo OHLCV). Ogni giorno UTC, la chiusura della barra che termina alle 13:00 UTC viene fissata come riferimento della sessione US; due ore dopo (barra che termina alle 15:00 UTC) si misura l’impulso iniziale della sessione US come chiusura/riferimento - 1. Se il suo valore assoluto supera entry_threshold (0.6% predefinito), la strategia entra nella direzione SAME - long con impulso……Mostra altroMostra meno

Stagionalità intraday long-short basata sull’ora del giorno su BTC COIN-M perpetual inverso (BTCUSD_PERP.BINANCE_CM, barre a 1 ore, solo OHLCV). Ogni giorno UTC, la chiusura della barra che termina alle 13:00 UTC viene fissata come riferimento della sessione US; due ore dopo (barra che termina alle 15:00 UTC) si misura l’impulso iniziale della sessione US come chiusura/riferimento - 1. Se il suo valore assoluto supera entry_threshold (0.6% predefinito), la strategia entra nella direzione SAME - long con impulso al rialzo, short con impulso al ribasso - per seguire la continuazione intraday, con al massimo un ingresso al giorno UTC. L’uscita avviene alla chiusura della sessione US (barra che termina alle 21:00 UTC), al raggiungimento di uno stop fisso di atr_stop_mult x ATR dal prezzo d’ingresso, ora verificato intrabar rispetto al minimo/massimo della barra, oppure al limite di sicurezza max_hold_bars se manca la barra 21:00. Il dimensionamento è corretto per i contratti inversi: risk_pct del capitale diviso per la frazione di stop determina un nozionale USD, limitato a max_gross_frac del capitale, convertito in contratti da WHOLE $100 tramite contracts_for_notional (mai usando la formula lineare capitale/prezzo). Tre parametri regolabili: signal_window_hours, entry_threshold, atr_stop_mult.

Risultati di verifica

CLEAN RESTART 2026-09-04 — lo storico dei verdetti e i registri di apprendimento di questa esecuzione sono stati rimossi; è stata riavviata 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 — 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 decise in seguito dal backtest completo e dall’ottimizzatore.

Non servono modifiche al codice; segnala all’analista l’incoerenza tra i campi delle metriche.

avg_holding_bars è riportato come 0.0, mentre avg_holding_period è '5h 13m': un’anomalia nella rendicontazione delle metriche, non un errore nel codice. La logica di mantenimento della posizione (ingresso alla chiusura della barra 15:00, uscita alla chiusura della barra 21:00 o al raggiungimento intrabar dello stop ATR, orizzonte di circa 6 barre) è corretta e coerente con la media di 5h13m.

Facoltativamente, aggiungi un controllo esplicito che la posizione sia chiusa in should_enter() per maggiore robustezza; il comportamento è già corretto grazie alla soppressione degli ingressi nel template di base.

should_enter() non verifica autonomamente che non ci siano posizioni aperte; si affida al template di base per sopprimere gli ingressi quando una posizione è aperta. Poiché la barra d’ingresso (ora ts 14) si verifica una volta per ogni giorno UTC e la posizione resta aperta fino all’uscita 21:00 dello stesso giorno, in pratica c’è una sola opportunità di ingresso al giorno: il limite previsto di una posizione al giorno è rispettato. La garanzia, però, è implicita nel template di base e non esplicita qui.

Risultato negativo nella sandbox non ottimizzata: total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (sotto zero, non solo sotto il costo minimo), profit_factor 0.79, e commissioni pari a 19.16% del lordo su 296 operazioni intraday. È il classico schema «il vantaggio di continuazione intraday non copre il costo round-trip»: l’impulso del segnale 0.6% filtra gli ingressi ma non dice nulla sul movimento di continuazione effettivamente realizzato, e qui il rendimento di continuazione per operazione è……Mostra altroMostra meno

Risultato negativo nella sandbox non ottimizzata: total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (sotto zero, non solo sotto il costo minimo), profit_factor 0.79, e commissioni pari a 19.16% del lordo su 296 operazioni intraday. È il classico schema «il vantaggio di continuazione intraday non copre il costo round-trip»: l’impulso del segnale 0.6% filtra gli ingressi ma non dice nulla sul movimento di continuazione effettivamente realizzato, e qui il rendimento di continuazione per operazione è negativo al netto del costo di circa 0.06-0.10% CM e dell’elevato turnover. NOT un difetto del codice (win_rate 0.43, PF 0.79 e Sharpe -0.55 sono valori ordinari, non corrispondono allo schema di errore di polarità o dimensionamento inverso). regime_performance mostra che il vantaggio compare solo nel terzile di volatilità «normale» (+7.1%, Sharpe 0.54) ed è nettamente negativo con volatilità calma o sotto stress. L’analista dovrebbe verificare sull’intera cronologia se qualche combinazione di parametri (entry_threshold, signal_window_hours) produce un rendimento di continuazione per operazione che copre nettamente il costo round-trip CM; altrimenti, la premessa della continuazione in base all’ora del giorno non è supportata. È un’indicazione consultiva e non blocca il processo.

Revisione Backtest

Sharpe
-0,81
Rendimento totale
-100,00%
Drawdown massimo
100,00%
Operazioni totali
748
Tasso di successo
42,2%
Profit Factor
0,84

Implementazione fedele: le operazioni corrispondono al meccanismo ipotizzato di continuazione long-short nella sessione US (748 operazioni, circa 373 long / 375 short, un ingresso al giorno, finestra di segnale corretta da 13:00 a 15:00 / uscita 21:00).

Campione affidabile e ampio su 6.1 anni (50,537 barre): il risultato è statisticamente significativo, non rumore.

La pipeline di ingresso funziona correttamente (875 segnalati = 875 inviati, nessuno scarto per dimensione zero, nozionale minimo o liquidità); è quindi un verdetto del mercato, non un difetto del codice.

Valore atteso negativo: avg_trade_return_pct -0.109% è BELOW ZERO, non semplicemente inferiore al costo minimo di circa 0.10% CM: il movimento di continuazione intraday è negativo al netto dei costi, prima ancora che questi entrino in gioco.

profit_factor 0.84 (<1), win_rate 0.42, valore atteso -$42.64/operazione, Sharpe -0.81, Sortino -0.74.

Conto liquidato (total_return -100%, max_drawdown 100%) su 2025-05-18.

Perde in ogni regime di volatilità (calma -53%, normale -100%, sotto stress -16%) e in ogni anno solare tranne 2022: nessuna combinazione di parametri mostra un vantaggio persistente.

La commissione 16.66% del lordo conferma il classico schema «il vantaggio non copre il costo round-trip» segnalato da QA; la soglia dell’impulso filtra gli ingressi, ma non dice nulla sulla continuazione effettiva, che è negativa al netto dei costi.

Analisi

Soglia del backtest: - metriche inaffidabili: 648 operazioni / 1409 giorni di dati sono prove insufficienti (ne servono >= 5 operazioni su >= 10 giorni) — aumenta la frequenza del segnale o amplia la finestra

Cronologia iterazioni

Verifica non superata (Layer 4 — revisione QA) [classe=premise_falsified]: - La premessa di momentum-continuazione nella sessione US è confutata: entrare nella direzione dell’impulso 13:00-15:00 UTC e mantenere la posizione fino alla chiusura 21:00 produce un risultato netto LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (negativo), valore atteso -$105, Sharpe -0.145, alpha -0.107, su 296 operazioni misurate con affidabilità. win_rate 0.432 con payoff simmetrico (avg_win $760……Mostra altroMostra meno

Verifica non superata (Layer 4 — revisione QA) [classe=premise_falsified]: - La premessa di momentum-continuazione nella sessione US è confutata: entrare nella direzione dell’impulso 13:00-15:00 UTC e mantenere la posizione fino alla chiusura 21:00 produce un risultato netto LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (negativo), valore atteso -$105, Sharpe -0.145, alpha -0.107, su 296 operazioni misurate con affidabilità. win_rate 0.432 con payoff simmetrico (avg_win $760 ~= avg_loss $765): l’impulso delle prime US sessioni continua solo circa 43% delle volte, quindi l’effetto che la strategia cerca di sfruttare è assente (lievemente invertito) e, dopo il costo round-trip di circa 0.10% CM su una posizione mantenuta per circa 6h, genera perdite. La leva 2.0 amplifica il risultato fino a un drawdown di 61.7% (da CI a 90%). La direzione è implementata correttamente (continuazione come specificato; nessun errore di polarità o sequenza): l’implementazione è fedele, ma i dati confutano la premessa di stagionalità. - La leva 2.0 con avg_position di circa 87% trasforma la scommessa sulla sessione priva di vantaggio in un drawdown di 61.7% (da CI a 90.2%) e end_unrealized -11.9%: più rischio con valore atteso negativo.

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.