Processo di costruzione della strategia (Futures E-mini S&P 500)

Costruire una strategia emini redditizia per ES / TF / EMD

di Mark Fric
In questo articolo spiegherò il processo completo, passo dopo passo, per costruire una strategia robusta e redditizia per i futures ES (E-mini S&P 500 Futures), tra cui più fasi di diversi test di robustezza.
Questa è una variante del mio vecchio articolo su Processo di costruzione della strategia per il forex.

Quando si utilizzano tecniche di apprendimento automatico, come la programmazione genetica, è davvero facile ottenere strategie con curve azionarie dall'aspetto gradevole. Il pericolo risiede nell'adattamento della curva, quindi La parte più importante del processo di costruzione di una strategia è la verifica della sua solidità. per garantire che non sia adattato ai dati storici.
In questo articolo spiegherò come utilizzare il doppio filtro OOS, i test di robustezza e il test della matrice Walk-Forward.

Questo è il risultato

A titolo di motivazione, pubblico i risultati di una serie di strategie con buone performance per ES / TF / EMD che ho trovato utilizzando il processo descritto di seguito.

Strategia 238433 per ES/TF/EMD

La strategia di cui sopra è pubblicata sul nostro forum (solo per gli utenti autorizzati di StrategyQuant) qui:
https://strategyquant.com/forum/topic/1688-emini-strategy-for-es-tf-emd/
disponibile per il download.


Ingressi

Gli unici input che utilizzo sono le mie aspettative sulla strategia: voglio costruire una strategia per ES (E-mini S&P 500) su un timeframe di 15 minuti che sia redditizia e abbia il minor drawdown possibile. Voglio che la strategia sia abbastanza robusta da funzionare anche su altri futures (TF, EMD) e che superi il test Walk-Forward Matrix per assicurarmi che la riottimizzazione funzioni su questa strategia.


Processo di costruzione della strategia

  1. Ottenere i dati
  2. Generare un grande bacino di potenziali candidati
  3. Primo filtro - Controllo del campione esaurito (OOS)
  4. Secondo filtro - nuovo test e secondo controllo OOS
  5. Terzo filtro - Controllo GBPUSD
  6. Quarto filtro - Test di robustezza
  7. Quinto filtro - Test della matrice Walk-Forward

1. Ottenere i dati

Esistono alcune differenze tra i futures e il forex. Innanzitutto, ottenere i dati per i futures è un po' più difficile e costoso. Non esistono fonti di dati gratuite e la maggior parte dei broker non fornisce uno storico superiore a qualche mese.
Potete ottenere i dati dal broker che li offre (Tradestation, se siete loro clienti) o dovete iscrivervi a un servizio di dati live, come ad esempio Kinetick o iqFeed.
Esistono anche alcuni servizi speciali che non offrono dati in diretta, ma che vendono dati storici sui futures. Per trovarli basta cercare "historical intraday furtures data" su Google.

La seconda differenza è che i contratti future hanno una data di scadenza; di solito i contratti vengono negoziati solo per 3-4 mesi e poi vengono sostituiti da una versione più recente dello stesso contratto future.
Per poter utilizzare i dati sui futures per lo sviluppo di una strategia è necessario disporre di almeno qualche anno di dati sotto forma di contratti continuativi. La maggior parte dei servizi di dati offre questa opzione, per cui è sufficiente abbonarsi al servizio dati e scaricare i dati sulla propria piattaforma di trading.

Esportazione dei dati da NinjaTrader
Quando i dati sono già presenti in NinjaTrader, è necessario copiarli anche in StrategyQuant, in modo che possa inviare un testo alle strategie generate. Per farlo, dobbiamo esportare i dati da NinjaTrader e importarli in StrategyQuant. Per esportare i dati dobbiamo aprire il grafico di ES 15 Min. Assicuratevi di aver impostato la sessione di trading corretta. Io uso i futures sugli indici CME US RTH in questo esempio.
Quando si apre il grafico, è sufficiente trovare SQDataExport e posizionarlo sul grafico. Esporta i dati del grafico attualmente aperto in un file di testo.

Ripetete lo stesso processo anche per TF (Mini Russel 2000 Futures) e EMD (E-mini S & P Midcap 400) sempre su un timeframe di 15 minuti con una sessione di trading corretta.
Utilizzeremo questi dati in seguito per testare le nostre strategie su altri simboli come forma di test di robustezza.

Aprite quindi StrategyQuant e create nuovi simboli per ES, TF e EMD e importate i rispettivi file di dati. L'importazione dei dati da NinjaTrader è descritta in modo più dettagliato anche nella sezione Guida per gli utenti.


2. Generare un grande bacino di potenziali candidati

Nella prima fase di generazione devo semplicemente generare un ampio pool di strategie potenzialmente "buone" che verificherò in seguito per verificarne la robustezza. Voglio che tutte le mie strategie iniziali siano redditizie e robuste (in una certa misura), quindi utilizzo diversi filtri anche in questa prima fase.

Le mie impostazioni per questo passaggio
È possibile scaricare le impostazioni utilizzate in questo passaggio utilizzando il link sottostante. Fare clic sul link con il tasto destro del mouse e scegliere Salva link con nome...
Quindi in StrategyQuant utilizzare Load settings per caricare questo file di impostazioni nel programma.

build_emini_strategy.xml

Se i simboli di StrategyQuant sono stati denominati in modo diverso, è necessario impostare i dati manualmente.

Spiegazione delle impostazioni
Prima di tutto, io genero tutte le mie strategie su più simboli. Il mio obiettivo è trovare una buona strategia per l'ES, ma voglio che la mia strategia sia robusta, quindi voglio che sia redditizia anche sull'EMD. Aggiungo EMD ai dati aggiuntivi, in modo che ora la strategia venga testata su entrambi i simboli.

Immagine 1: Impostazione dei dati

Utilizzerò i dati dal 2.1.2003 al 31.12.2012, ovvero 10 anni. Il resto dei dati sarà lasciato per ulteriori test OOS in seguito.

Utilizzerò la modalità Evoluzione genetica. L'idea è di creare una popolazione di 200 strategie, farle evolvere per 30 generazioni e poi ripartire da zero. In questo modo eviterò di imbattermi in un vicolo cieco durante l'evoluzione e le strategie migliori verranno continuamente memorizzate nella banca dati.
Si può anche notare che l'unica condizione per la popolazione iniziale è che deve effettuare almeno 100 operazioni. Non è necessario che sia redditizia: l'evoluzione genetica dovrebbe essere in grado di migliorarla.

Immagine 2: Opzioni genetiche

Potremmo usare anche la generazione casuale senza evoluzione, ma l'evoluzione dovrebbe trovare più velocemente le strategie redditizie.

L'ultima importante impostazione riguarda le opzioni di classificazione. Ho impostato la banca dati per memorizzare le 2000 strategie migliori, perché voglio avere una buona base per un ulteriore processo di selezione. Ho anche impostato il criterio di selezione sul rapporto rendimento/disavanzo: è il mio preferito. Potete utilizzare altri criteri di selezione, forse otterrete risultati migliori.


Immagine 3: Opzioni di classificazione

Una delle cose più importanti è impostare i criteri di filtro iniziali per le strategie in Databank. Voglio considerare solo le strategie che hanno almeno $2000 di profitto, hanno un rapporto rendimento/DD > 3, almeno 300 operazioni e un rapporto rendimento/DD di un portafoglio di almeno 2,5.

Poiché sto testando le strategie su due simboli, ES e EMD, verranno calcolati anche i risultati del portafoglio per le strategie. Utilizzando questa condizione, è sufficiente specificare che la performance del portafoglio non deve essere molto peggiore di quella ottenuta solo su ES e il programma eliminerà tutte le strategie con una cattiva performance del portafoglio.

Ora dobbiamo solo premere il tasto Inizio e lasciare che il programma faccia il suo lavoro.
Ricordate che vogliamo generare almeno 2000 strategie "buone" prima di continuare il processo di filtraggio.

A seconda delle impostazioni e della velocità del computer, potrebbero essere necessarie diverse ore o addirittura giorni, quindi siate pazienti. Se il programma non produce alcuna strategia per un periodo di tempo molto lungo, forse è il caso di passare a un timeframe più elevato - 30 minuti, 1 ora - o di rendere i vincoli meno restrittivi.


3. Primo filtro - Controllo del campione esaurito (OOS)

Quando avrò 2000 strategie potenzialmente valide nella banca dati, interromperò la generazione e inizierò il processo di filtraggio.
Applicherò il primo filtro, eliminando tutti i sistemi che hanno una cattiva performance fuori dal campione. Posso farlo rapidamente, semplicemente ordinando le strategie nella banca dati ed eliminando quelle che hanno un profitto OOS inferiore a $3000.


Immagine 4 Banca dati con pool di strategie ordinate in base al profitto netto OOS

Questa prima fase di solito rimuove una gran parte delle strategie, quindi dai 2000 candidati iniziali siamo scesi a circa 1700.


2. Secondo filtro - nuovo test e secondo controllo OOS

In questa fase, testerò nuovamente tutte le strategie sul periodo fuori campione sconosciuto Inoltre aggiungerò un test sui dati TF.

Il test delle strategie è semplice: basta selezionare tutte le strategie nella banca dati e cliccare sul pulsante Retest. In questo modo, tutte le strategie verranno spostate in una scheda di verifica. Confermerò anche la finestra di dialogo che chiede di utilizzare le impostazioni di creazione per il test.

Estenderò quindi il periodo dei dati fino alla fine dei dati disponibili. Le strategie sono state generate sui dati dal 2.1.2003 al 31.12.2012, ora le testerò nuovamente sui dati fino al 31.12.2013 (un altro anno non utilizzato durante la generazione) e imposterò il periodo fuori campione dal 31.12.2012 al 31.12.2012.
Si noti che in questo modo le strategie verranno testate nuovamente sui dati completi e la parte OOS mostrerà la performance della strategia durante l'ultimo anno dei dati precedentemente inutilizzati.


Immagine 5: Impostazioni per il retest

Dato che ho anche i dati storici di TF, li aggiungerò ai dati aggiuntivi per confrontare le performance di tutti e tre gli eminis.

Il test potrebbe richiedere un po' di tempo e al termine rimuoverò ancora una volta tutti i sistemi che hanno una cattiva performance fuori dal campione. Ancora una volta posso ordinare le strategie nella banca dati in base al profitto netto (OOS) ed eliminare quelle che hanno un profitto OOS inferiore a $1500.


3. Terzo filtro - EMD, controllo TF

Il terzo filtro è visivo: verificherò la performance delle strategie sui simboli EMD e TF. Andrò su Risultati -> Grafico azionario, cambierò il grafico in Portafoglio e passerò in rassegna le strategie una per una osservando le curve azionarie per EMD e TF.


Immagine 6: Esempio di buone e cattive prestazioni EMD / TF

Cosa stiamo cercando? Poiché questi eminis sono altamente correlati, voglio che la strategia sia redditizia su tutti e tre i simboli, proprio come nel primo esempio. Nel secondo esempio possiamo notare che la performance su TF è molto scarsa rispetto a ES e EMD, la sua curva azionaria non è grodwing, quindi scartiamo questa strategia.

Ci può essere anche un altro estremo: la performance su TF e/o EMD è molto migliore di quella su ES. Questo va bene, spesso accade che le strategie abbiano un rendimento migliore su TF che su ES.

Non dobbiamo guardare solo alla performance finale, ma anche alle curve azionarie. Dovremmo scartare tutte le curve azionarie che presentano lunghi periodi di stagnazione o grandi drawdown.

In questo modo possiamo rendere il filtro molto semplice, in modo da avere non più di 10-20 strategie top rimanenti per la fase successiva.


4. Quarto filtro - Test di robustezza

Dopo aver eliminato tutte le strategie con una cattiva performance EMD / TF, sono rimaste meno di 20 strategie che hanno una buona performance IS e OOS, oltre a una performance soddisfacente su EMD / TF. Ora sottoporrò nuovamente le strategie a test di robustezza e di Money Management per vedere come ognuna di esse gestisce le piccole variazioni degli input e per poterle confrontare tra loro.

Cambierò la gestione del denaro da dimensione fissa a importo fisso, lasciando che ogni strategia rischi $500 per operazione. Questo permette di confrontare meglio le strategie, perché rischiano lo stesso importo per operazione.


Immagine 7: Impostazione della gestione del denaro su un importo fisso

Nei test di robustezza utilizzo almeno 20 simulazioni e verifico la strategia per tutti i tipi di situazioni di stress. Dopo aver configurato il test di robustezza, eseguo nuovamente il test delle strategie.
Questa volta sarà veloce perché sono rimaste solo poche strategie nella banca dati.


Immagine 8: Test di robustezza

Come valutare i test di robustezza
I test di robustezza ci mostrano come la strategia può comportarsi nella realtà, quando ci sono operazioni mancate, dati storici diversi, ecc. Sto cercando strategie che abbiano valori accettabili per il Profitto netto e il Drawdown nel livello di confidenza 95%.


Immagine 9: Risultati dei test di robustezza

Nell'esempio sopra riportato possiamo vedere i risultati di robustezza di due strategie. La strategia di sinistra ha un profitto accettabile, ma il drawdown è più che raddoppiato rispetto al risultato originale.
Anche la strategia di destra ha registrato un profitto di livello accettabile e il drawdown è rimasto pressoché invariato.

In questa fase sceglierò solo 1-3 strategie finali che saranno sottoposte al successivo test di robustezza.
Le strategie finali sono state selezionate in base ai migliori risultati nei test di robustezza, alla redditività complessiva e anche alla semplicità: voglio che le regole della strategia siano il più semplici possibile e che le regole di trading abbiano un senso.


5. Quinto filtro - test della matrice Walk-Forward

Rimangono poche strategie e possiamo eseguire il test definitivo per la robustezza: il test della matrice Walk-Forward. La matrice WF è semplicemente una matrice di ottimizzazioni walk-forward con un numero diverso di esecuzioni e periodi di esecuzione.

Se la strategia supera il test della matrice Walk-Forward, significa che con l'aiuto della riottimizzazione dei parametri la strategia è adattabile a una vasta gamma di condizioni di mercato E anche che la strategia non è adattata a dati particolari, poiché con la riottimizzazione funziona su molti periodi di tempo diversi.

Oltre a questo, il test WF Matrix ci dice anche se la strategia deve essere riottimizzata in modo permanente e qual è il periodo di riottimizzazione ottimale.

Il test Walk-Forward Matrix deve essere eseguito separatamente per ogni strategia. Carico la mia strategia in Optimizer e seleziono l'opzione Walk-Forward Matrix. Selezionerò anche le fasi di esecuzione e le percentuali di OOS. StrategyQuant esaminerà tutte queste combinazioni, eseguendo l'ottimizzazione Walk-Forward della strategia.


Immagine 10: Impostazione della matrice Walk-Forward

Impostazione dei parametri per l'ottimizzazione
Affinché l'ottimizzazione abbia senso, è necessario impostare i parametri della strategia da ottimizzare. Ogni strategia utilizza una logica diversa e ha parametri diversi, quindi è necessario configurare l'ottimizzazione in modo diverso.


Immagine 11: Ottimizzazione dei parametri

Questa strategia è relativamente semplice, quindi ottimizzerò solo il valore di stop loss e il coefficiente di stop trailing.
Non è necessario ottimizzare tutti i parametri, ma solo quelli che hanno il maggiore impatto sulle prestazioni della strategia.

Valutazione della matrice Walk-Forward
Al termine dell'ottimizzazione, faccio clic sul risultato della matrice Walk-Forward in Databank per vedere i dettagli.

Voglio che l'ottimizzatore mi dia una risposta chiara se la strategia ha superato il test di ottimizzazione Walk-Forward, quindi devo impostare dei criteri di punteggio.
Si tratta di semplici criteri che devono essere veri perché la strategia superi il test.


Immagine 13: Risultati della matrice Walk-Forward

Il risultato finale è che la strategia ha superato il test di robustezza della matrice Walk Forward. Il grafico del punteggio 3D mostra che 19 combinazioni su 24 hanno superato i nostri criteri (utilizzando le impostazioni predefinite).
Non è necessario che la strategia passi per ogni combinazione, sto cercando un'area 2×2 o 3×3 che abbia la maggior parte delle combinazioni passate: questo sarà il gruppo delle migliori combinazioni di riottimizzazione. In questo caso, posso vedere che 10 corse con 30% Out of Sample è una delle migliori combinazioni, perché è circondata da altre combinazioni che sono passate.

Quando controllo il grafico dell'ottimizzazione Walk-Forward, vedo che la strategia rimane redditizia anche durante la riottimizzazione. La diminuzione della redditività è in linea con i test ottenuti dall'analisi di robustezza Monte Carlo, ma la strategia è ancora redditizia.


Immagine 14: Grafico di ottimizzazione Walk-Forward


Sintesi

Ho descritto il mio processo completo di lavoro con StrategyQuant, che ha portato ad alcune nuove interessanti strategie.

Queste strategie sono solo esempi e mi ci sono voluti meno di 2 giorni di SQ e circa 1-2 ore del mio tempo per trovarle con l'uso di StrategyQuant.
Potete provare voi stessi, trarre ispirazione ed eventualmente migliorare il processo con le vostre idee, che potrete condividere sul nostro sito web forum.

Possibili miglioramenti del processo - si può provare a cercare strategie separatamente per la direzione long e short. Ogni direzione ha le proprie dinamiche e strategie diverse per le direzioni lunghe e corte potrebbero dare risultati migliori.
Non ho menzionato Miglioratore - è uno strumento potente che consente di cercare una variante migliore della strategia esistente, se non si è ancora soddisfatti delle prestazioni.

Tenete presente che il punto non è trovare una strategia perfetta sui dati storici. Questa è una ricetta per il disastro, perché una strategia eccessivamente ottimizzata è destinata a fallire nel trading reale.
Il nostro obiettivo dovrebbe essere quello di trovare una strategia che sia robusta su diversi dati e/o simboli, perché questo significa che ha un reale vantaggio sul mercato.

Abbonarsi
Notificami
0 Commenti
Feedback in linea
Visualizza tutti i commenti

Continua a leggere