Originally posted by umbertosm
View Post
Announcement
Collapse
No announcement yet.
StrategyQuant e i software di programmazione genetica di trading system
Collapse
X
-
Originally posted by umbertosm View PostSi
per sciogliere ogni dubbio, quando consideri una qualsiasi coppia di valute, basta che apri Metatrader 4, vai nella sezione del Tester, scegli la coppia di valute,
clicchi su Symbol properties e leggi il Contract size = Point Value in $ di SQ
Comment
-
Apriamo ora la scheda Genetic Options, che racchiude in sé il setting del motore della programmazione genetica!
Nella sezione Genetic Options fissiamo il numero di strategie di ciascuna popolazione (Population Size) ed il numero massimo di generazioni oggetto dell'evoluzione genetica (Max # of Generation).Un po' di teoria...Mutation Probability e Crossover Probability
Un insieme di strategie di trading che vengono create in un processo evolutivo che cerca di ottimizzare una funzione di fitness, formano una popolazione di una generazione.
La dimensione della popolazione è il numero di membri di una popolazione.
Le strategie che andranno a far parte della popolazione della generazione successiva, vengono generate con l’evoluzione della popolazione della generazione precedente:
- più larga è la popolazione padre e più lungo è il tempo necessario perché la popolazione figlia si riempia di tutti i suoi membri,
- ma più diversità viene introdotta, ed in genere più diversità aumenta la probabilità di trovare una buona strategia in grado di avere successo sui dati storici.
Le strategie di ogni successiva popolazione che riescono a passare il livello minimo di fitness, vengono man mano conservate in un basket: il DataBank.
La costruzione delle successive generazioni avviene sui membri della popolazione, indipendentemente dal fatto che alcune di queste finiranno del Databank.
Al termine del processo di generazione delle successive popolazioni, saranno disponibili soltanto le strategie salvate nel Databank.
Il numero di generazioni è il numero di passi nell’evoluzione delle strategie di trading.
Durante il processo di ricerca (che avviene con tre modalità: crossover/mutazione/ripescaggio) vengono generati i membri di una nuova generazione, maggiore è il numero di generazioni e migliori sono i risultati delle strategie generate.
Inevitabilmente dopo un numero di generazioni i membri della popolazione delle successive generazioni iniziano a convergere ad un valore di fitness che migliora molto lentamente o si ferma.
Quando ciò accade, si usa far ripartire il processo di generazione delle popolazioni.
indicano la probabilità che nella creazione di un membro della generazione successiva, intervenga il fenomeno della mutazione e del crossover.
Ad esempio, se si sceglie Mutation = 30% e Crossover = 90%,
ad ogni generazione la Mutazione interviene nella generazione di un membro della successiva generazione, in 3 casi su 10, mentre il Crossover, in 9 casi su 10.
------------------
Nella sezione Initial Population Generation si sceglie come deve essere costruita la popolazione di partenza:
- generata randomicamente, Generate random population
- presa da un insieme di strategie preesistenti, Use system from Databank as initial population.Le popolazioni delle successive generazioni evolvono da quella di partenza usando la tecnologia di programmazione genetica.Il Decimation coefficient è un numero da 1 a 10: il sistema genera più strategie di quelle necessarie a formare la popolazione iniziale e poi sceglie le strategie che massimizzano la funzione di fitness.
Imitando l’evoluzione naturale degli organismi viventi per formare una nuova popolazione figlia, l’algoritmo sceglie dalla popolazione padre le migliori strategie che massimizzano la funzione di fitness, e da queste strategie ricava nuove strategie figlie, usando tre modalità: crossover, mutazione e ripescaggio.
Ad esempio, se la Population size è 500, e Decimation coefficient = 3
StrategyQuant trova randomicamente 1500 strategy e sceglie le migliori 500 (=1500/3) che formeranno la popolazione di partenza.
Se invece si sceglie Decimation Coefficient = 1 non ci sarà alcuna decimazione: SQ genera randomicamente 500 strategie e tutte quante vanno a formare la popolazione di partenza
Il Max tree depth, ad esempo = 5 specifica la massima profondità dell'albero delle condizioni che definiscono le regole di ingresso/uscita dei trade nelle strategy della popolazione di partenza.
Force for all generation
- se selezionato: tutte le strategy delle popolazioni successive avranno un albero delle decisioni non superiore al valore indicato, quindi una profondità da 1 a 5,
- se non selezionato, le strategy delle popolazioni successive sono libere di aumentare senza limiti le dimensioni dell'albero delle decisioni, aumentando la complessità ed il rischio di overfitting delle strategie delle popolazioni successive.
Nel manuale di Adaptrade Builder, a pagina 12,
http://www.adaptrade.com/Builder/AdaptradeBuilderUG.pdf
c'è un ottimo esempio di come è fatto un albero delle condizioni di trading, da cui si intuisce immediatamente cosa si intende per profondità dell'albero... la tree depth è il numero di livelli nell'albero.
------------------
Nella sezione Initial population conditions - Dismiss strategie where:
vengono inserite le condizioni che se sono soddisfatte da una strategia, questa NON viene inserita nella popolazione iniziale, ma viene scartata.
Ad esempio come in figura, se inseriamo ed abilitiamo (flaggando Use) le condizioni- Number of trades (sui dati In Sample) < 100
- Profit Factor (sui dati Out Of Sample) < 1.2
questa strategia viene automaticamente scartata, e non viene inserita nella popolazione iniziale.
------------------
Nella sezione Evolution management
i campi fanno riferimento ai concetti di In Sample Training e In Sample Validation: il loro significato è ben dettagliato a questo post
Io consiglio di settare il campo
Divide In Sample period to Training / Validation
e lasciare la percentuale del 50% relativa al rapporto tra In Sample Training e In Sample Validation
Start again when finished (continuous repeating evolution): se si vuole che il software continui a cercare strategie continuamente, riempiendo il Databank delle strategy migliori; la ricerca termina soltanto quando l'utente ferma il processo.
Restart fitness of ... stagnates for ... generation(s): nell'esempio, il motore genetico ricomincia l'evoluzione quando le strategie delle ultime 10 generazioni danno valori di fitness che stagnano nei dati storici IS Validation, cioè le strategy danno gli stessi valori di fitness senza migliorare: è quindi più produttivo fermare il processo di ricerca e ricominciare da capo l'evoluzione genetica.
Con l'ultimo campo, Restart evolution after ... generations if : si possono impostare condizioni più sofisticate, nell'esempio l'evoluzione riparte da capo dalla popolazione di partenza, quando nelle ultime 3 generazioni il valor medio di fitness delle strategy sui dati IS Validation non riesce a superare il 60% del valor medio di fitness delle strategy sui dati IS Training.
- 1 like
Comment
-
Scheda Money Management
Capital size: dimensione del capitale del conto di trading per le simulazioni
Io scelgo sempre
Fixed size
Lots = 0.1
e trascuro le altre due opzioni Fixed amount e Risk fixed % of account: se vengono settate compare una spiegazione dettagliata nella finestra a destra
------------
Scheda Robustness Tests
In genere non si usa il Robustness Test nella fase di ricerca con evoluzione genetica delle strategie, perché rallenterebbe molto il processo, ma viene usato quando si ritestano le strategie per verificare il comportamento della strategy quando vengono fatti dei piccoli cambiamenti sul valore delle variabili della strategia, o delle dimensioni delle candele dei dati storici, e su altri componenti della strategia.
Come usarlo in pratica con una strategy lo vediamo successivamente.
Con il flag su Use Robustness Testing Monte Carlo analysis
Number of simulations : 100
Confidence level for reporting : 95%
SQ realizzera il Robustness Test utilizzando il metodo 'Monte Carlo' dei trade della strategia, eseguendo 100 backtest per ciascuno dei metodi flaggati in elenco.
Maggiore è il numero di simulazioni e più significativo da un punto di vista statistico saranno i risultati.La simulazione Monte Carlo è un metodo statistico usato per trarre stime attraverso simulazioni, basandosi su un algoritmo che genera una serie di numeri tra loro incorrelati, che seguono la distribuzione di probabilità che si suppone abbia il fenomeno da indagare.In statistica, dato un campione di n elementi, da cui si vogliono calcolare le grandezze rappresentative della popolazione, il livello di confidenza, o intervallo di confidenza è l'intervallo di valori entro i quali si stima che cada, con un livello di probabilità scelto a piacere, il valore vero della popolazione.L'idea di fondo è che una strategy robusta deve ben performare anche quando si verificano piccole variazioni casuali dei parametri di input o dei dati storici.
«confidenza 95%» significa che se ripetessimo la stessa indagine per 100 volte con gli stessi metodi (ma su 100 campioni diversi), probabilmente otterremmo ogni volta una stima diversa; tuttavia, il vero valore della popolazione sarebbe all'interno del nostro intervallo di confidenza 95 volte su 100. In altre parole, l'intervallo di confidenza fornisce un risultato aderente alla realtà nel 95% dei casi.
Vediamo quali Robustness Testing Methods si possono usare con StrategyQuant:
Randomize trades order with
- method Exact: è la forma classica con cui è conosciuto il test Monte Carlo: il profit/loss dei trade rimane lo stesso di quello del backtest originale, ma in ogni simulazione i trade vengono ordinati in maniera diversa, determinando quindi drawdown diversi.
- method Resampling: ogni simulazione è formata da un numero di trade pari a quello originale, ma non tutti i trade originari vengono considerati, perché ne viene scelto un sottogruppo e alcuni di questi trade vengono ripetuti più volte, in modo da ottenere lo stesso numero di trade realizzati nel backtest originario. Ogni simulazione avrà sia il Drawdown che il Net Profit diverso dal backtest originale.
Randomly Skip Trades: in ogni simulazione il numero di trade sarà inferiore al numero di trade del backtest originario, perché, con una probabilità fissata (es. 10%) ogni trade può essere casualmente non considerato nel backtest della simulazione.
Randomize Strategy Parameters: ogni strategy utilizza dei parametri, ad esempio il numero di barre di un indicatore o dei valori costanti usati nelle comparazioni; questo test modifica con una certa probabilità tutti i parametri della strategy, variandoli in più o in meno di un Max Change % risptto al valore originario.
For example if you set Max parameter change to 10%, then a parameter with value 60 can be randomly changed to a range 54 - 66 (+- 10% of its original value of 60).
Randomize Starting Bar: ad ogni simulazione, la barra iniziale da cui parte la strategy viene spostata casualmente in avanti di un numero di barre che va da 1 a Max Change.
Randomize history data, with probability 20% and max price change 10% ATR: viene testato il comportamento della strategy, modificando il 20% delle candele aumentando o riducendo la dimensione in pip di una percentuale dell'ATR compresa tra 0 e Max Change.
Questa opzione è molto utile perché permette di testare le strategie su dati storici leggermente diversi da quelli caricati su SQ... così da riprodurre la differenza di dati storici tra i vari broker.
So if for example close price is randomly chosen to be changed, ATR value is 10 pips, and Max price change is 20%, then the price can change by +- 2 pips
Randomize Spread, Slippage, Min distance from price, from Min to Max: flaggando una o più di queste voci, ogni simulazione viene eseguita con un valore casuale di spread, slippage o stop level su un intervallo di variazione da Min a Max pip.
- 1 like
Comment
-
Scheda Ranking Options
In questa scheda si scelgono i criteri di selezione delle strategie, cioè i criteri per conservare una strategia nel DataBank,
o per scartarla, durante il processo evolutivo.
Inoltre la scheda permette di costruire la funzione di fitness.
Sezione Databank Options: settiamo ad esempio Maximum Strategies to Store in Databank : 1000
Il Databank è il contenitore delle strategie che si vogliono conservare per poi filtrarle successivamente.
Durante il processo di generazione delle popolazioni di strategie, SQ salverà nel DataBank le migliori 1000 strategy che NON soddisfano i criteri indicati nella sezione
Custom conditions - Dismiss strategies where
e ordinerà queste strategy secondo quanto selezionato nella
sezione Strategy Selection Criteria
Quando StrategyQuant avrà riempito il DataBank di 1000 strategie, le nuove strategy che soddisferanno le condizioni per essere memorizzate nel Databank vi entreranno scalzando via dal DataBank le strategy con fitness minore, mantenendo quindi a 1000 il numero massimo di strategy conservate.
-------------------
Le regole dentro la sezione
Custom conditions - Dismiss strategies where
sono criteri di scarto delle strategie, quindi nel Databank finiranno tutte le strategie che soddisfano AL CONTRARIO queste condizioni.
Guardando l'esempio in figura, durante il processo di generazione delle popolazioni, se una Strategy corrente ha- valor medio di trade sui dati IS (Expectancy) > 20 $
- valor medio di trade sui dati OOS (Expectancy OOS) > 20 $
- numero di trade > 100
- rapporto Net Profit / Max Drawdown sui dati IS > 5
- percentuale dei trade vincenti sui dati IS (% Wins) > 60 %
- percentuale dei trade vincenti sui dati OOS (% Wins OOS) > 60 %- rapporto numero di trade vincenti / numero di trade perdenti sui dati IS (Win/Loss Ratio) > 1.2
- rapporto numero di trade vincenti / numero di trade perdenti sui dati OOS (Win/Loss Ratio OOS) > 1.2
questa strategy NON soddisfa alcuna delle Custom conditions e quindi entra nel dataBank
e viene ordinata, in relazione alle altre strategy del Databank, in funzione del valore che assume per la funzione di fitness,
la cui formula è stata scelta nella sezione Strategy Selection Criteria.
-------------------
Sezione Strategy Selection Criteria
Compute fitness from : la funzione di fitness viene calcolata facendo riferimento al backtest della strategy
- Main data : sulla sola coppia di valute principale, ad esempio soltanto su EURUSD,
- Portoflio (if exists) : rispetto sia alla coppia di valute principale, ad es. EURUSD, che alle eventuali coppie di valute aggiunte, ad es. GBPUSD (vedi la scheda "Data")
In questa scheda si può scegliere un singolo parametro come funzione di fitness (nell'esempio della prima immagine in alto Return / Drawdown ratio)
oppure,
selezionando l'ultimo radio button Weighted Fitness, si abilita la possibilità di flaggare più parametri che verranno usati insieme (normalizzati ad 1 e sommati) per formare la funzione di fitness.
Ciascun parametro che forma la fitness (Ranking Criterium) è pesato: aumentando il valore si rende più significativo un parametro rispetto agli altri nel calcolo della funzione di fitness.
Da notare che nel processo di evoluzione genetica, ogni parametro è per definizione oggetto di massimizzazione (ad es. il Net profit) oppure di minimizzazione (ad es. il Drawdown).
La fitness è un valore normalizzato ad 1 e lo si può leggere per ogni strategia nel campo Fitness del DataBank.
La vista dei campi che vogliamo leggere nel DataBank può essere personalizzata usando il pulsante Manage
- 1 like
Comment
-
Ora che abbiamo terminato il setting di tutte le schede della voce di menu Build Strategies, possiamo far partire SQ alla ricerca di strategy, con la programmazione genetica.
Supponiamo di avere il setting semplificato come in figura
dimensione della popolazione = 20
numero di generazioni = 10
Decimation coefficient = 2
flag su Start again when finished (continuous repeating evolution)
condizioni di filtro: le strategy NON entrano nella popolazione iniziale se
- fanno meno di 100 trades
- il profit factor sui dati OOS < 1.2
Click sul pulsantone Progress
click su Start
e StrategyQuant parte in modalità Genetic Evolution, generando randomicamente le strategy al fine di inserirle nella popolazione iniziale
Una strategy può far parte della popolazione iniziale soltanto se fa almeno 100 trades ed ha un profit factor OOS >=1.2
Dalla immagine nella figura seguente si vede come moltissime strategy vengono dismissed, scartate, perché non soddisfano questi requisiti, e quindi SQ procede alla ricerca random di nuove strategy.
Quando una strategy soddisfa i criteri minimi, entra a far parte della popolazione iniziale e viene visualizzata nella scheda Last generation, accanto alla scheda Databank:
La scheda Last generation si riempie di strategy, di un numero pari alla dimensione della popolazione iniziale, moltiplicato il Decimation coefficient, nel nostro caso 20 x 2 = 40 strategy.
Quando SQ avrà trovato 40 strategy con i requisiti minimi per far parte della popolazione iniziale, effettua la decimazione, scegliendo le 20 strategy che hanno fitness più alta: è stata creata la popolazione iniziale = Generazione 1
E prosegue creando la popolazione della Generazione 2.
Ora inizia il processo di evoluzione genetica di successive popolazioni di strategie partendo dalla popolazione iniziale,
ricercando l'ottimizzazione della funzione di fitness, usando
- la mutazione
- il crossover
- il ripescaggio di strategy di precedenti popolazioni : nella figura seguente due casi di ripescaggio: Used (previous generation)
Nella scheda Last generation si trovano temporaneamente le strategy della popolazione corrente... quando questa viene riempita, SQ procede con la creazione della successiva popolazione e Last generation si riempie delle strategy della popolazione successiva.
Nel setting abbiamo messo un flag su Start again when finished (continuous repeating evolution)
e quindi, quando SQ ha generato 10 popolazioni ciascuna successiva alla precedente, il processo evolutivo ricomincia da capo, rigenerando la popolazione iniziale randomicamente!
Tutto questo processo ha uno scopo: far evolvere le strategy ottimizzando la funzione di fitness, al fine di ottenere nel Databank tante strategy che soddisfino i criteri della scheda Ranking Options
Ad esempio se scegliamo un setting come quello in figura,Profit factor (OOS) <= 1.2durante l'evoluzione genetica continua delle strategy nelle varie popolazioni, quando SQ incontra una strategy che soddisfa AL CONTRARIO questi criteri, inserisce nella scheda Databank questa strategy.
Net Profit / Drawdown (OOS) <= 2
Numero di trades <= 100
Quindi SQ verifica, per ogni strategy di ogni popolazione, se la strategy haProfit factor (OOS) > 1.2e se le condizioni sono soddisfatte, inserisce questa strategy in una riga del Databank
Net Profit / Drawdown (OOS) > 2
Numero di trades > 100
In figura un esempio: la Strategy 1.275 entra nel Databank perché soddisfa le condizioni, avendo:
Profit factor (OOS) = 1.39 > 1.2
Net Profit / Drawdown (OOS) = 829.1/312.6 > 2
Numero di trades = 128 > 100
- 1 like
Comment
-
Di seguito come ottimizzare la velocità di elaborazione di StrategyQuant.
Con l'introduzione dal 2005 della tecnologia Multi-core delle CPU, i processori si sono dotati di più unità centrali di elaborazione:
- 2 core fisici (Dual-core, es. Intel Core i3 4370),
- 4 core fisici (Quad-core, es. Intel Core i5 4690),
- 6 core fisici (Hexa core es. AMD FX 6100),
- 8 core fisici (Octa-core es. Intel Core i7 5960X)
Questo ha consentito ai computer di diventare più veloci, indipendentemente dalla frequenza di clock, poiché le nuove CPU multi-core sono in grado di accettare più thread alla volta invece di uno solo.Un thread (o processo, o task) è una sequenza di istruzioni di un programma in corso di esecuzione.Inoltre, con l'introduzione dal 2002 della tecnologia Hyper-Threading, le CPU "HT" sono strutturate per condividere la potenza di calcolo con due thread alla volta, invece che uno solo.
fonte: http://www.chimerarevo.com/hardware/...-guida-174734/
Normalmente la CPU accetta un solo thread (0) alla volta: il numero di thread eseguibili in un secondo dipende dalla frequenza di clock.Sfruttando entrambe le tecnologie Multi-core e Hyper-Threading, i processori di oggi hanno un raddoppio virtuale di CPU,
Con la tecnologia HT attiva, la CPU accetta due thread alla volta (thread 0 e thread 1); ogni thread in ingresso viene suddiviso in due “semi-thread”, che si unirà al semi-thread dell’altro processo formando un “thread condiviso” contenente i bit di entrambi i thread in ingresso. Il nuovo thread così formato viene elaborato sul singolo core della CPU. In uscita il thread condiviso si scompone in semi-thread e questi ultimi riformano i thread originari.
- un certo numero X di CPU FISICHE (es. X = 4 con una CPU quad-core)
- e X*2 CPU LOGICE (8 unità logiche con una CPU quad-core)
Ecco perché nel task manager troviamo il doppio delle finestre rispetto al multi-core della propria CPU.
Ad esempio, nel PC dove faccio esperimenti, ho un Intel i3 Dual-core, ma nel task manager visualizzo 4 core: 2 fisici trasformati in 4 CPU logiche.
. cpu0.jpg
---------------------------
Ottimizziamo la potenza di calcolo del proprio computer per sfruttare al massimo StrategyQuant
Dal menu in alto: Tools - Options - aumentiamo il Number of threads al massimo (sarà 4 o 8 o 16, ecc..)
. cpu1.jpg
---------------------------
Aumentiamo la RAM allocata per SQ
Con la "cura" noi abbiamo lo script .bat
java -jar -d64 -server C:\StrategyQuant\StrategyQuant_3_8_1.jar
Se ad esempio abbiamo a disposizione 8 GB di RAM e vogliamo che ne vengano allocati 6GB per SQ, la stringa del file .bat va modificata aggiungendo
-Xmx6g alla stringa di sopra
java -jar -d64 -Xmx6g -server C:\StrategyQuant\StrategyQuant_3_8_1.jarLa sintassi JAVA per allocare Kbyte, Mbyte o Gbyte di RAM è:cpu2.jpg
-Xmx1024k
-Xmx512m
-Xmx8g
Facendo ripartire SQ, nella scheda Build Stategies leggiamo quanta memoria viene allocata per SQ
. cpu3.jpg
- 1 like
Comment
-
Siamo nella scheda Build strategies, le strategy stanno evolvendo in successive generazioni.
La finestra Population fitness visualizza come si comporta la fitness delle strategie che ma mano vengono generate nelle varie popolazioni, per finestra di dati storici: IS Training, IS Validation, IS Training+Validation, OOS.
fitness1.jpg
La linea rossa visualizza l'evoluzione della fitness della strategy che di volta in volta è migliore di tutte le altre
La linea blu visualizza l'andamento del valor medio della fitness delle migliori 5 strategie
La linea verde visualizza l'andamento del valor medio della fitness della popolazione che man mano evolve in successive generazioni
Guardando l'esempio in figura, tratto dal manuale di StrategyQuant,
relativo ad una evoluzione di 100 generazioni senza restarting, si osserva che nonostante ci sia un miglioramento sui dati storici IS Training, le strategy non performano meglio sui dati IS Validation e peggiorano sui dati OOS.
Questa osservazione ci dice che è necessario far fare un restart da capo del processo di generazione delle strategy, dopo 20 o 30 generazioni, perché le popolazioni delle generazioni successive non sono in grado di dare un valore aggiunto al processo di ricerca di strategy profittevoli.
Quindi per il particolare setting che si è scelto, dentro Settings - Genetic Options, conviene mettere
Max # of Generations: 30
e il flag su Start again when finished (continuous repeating evolution)
fitness2.jpg
---------------
Mettiamo un momento in pausa il processo di generazione (scheda Progress - Pause) e scegliamo una qualsiasi strategy del Databank.
Cliccando due volte sulla strategy nel Databank si apre automaticamente la scheda Result
databank1.jpg
e cliccando sulla sezione Equity chart, si visualizza la equity della strategy sui dati IS e OOS.
Max stagnation ... days è il numero massimo di giorni su tutto il backtest IS+OOS in cui la strategy non ha fatto un nuovo massimo nella equity line.
databank2.jpg
Nelle altre sezioni si visualizzano i parametri di sintesi della strategy, dall'Overview, alla lista di trade, all'analisi del Robustness test se è stato effettuato,
databank3.jpg
fino al codice sorgente "Pseudo Source Code", cioè in modalità leggibile per comprendere la logica della strategy.
L'esportazione del codice in Metaquote language si fa da questa scheda con considerazioni che vediamo successivamente.
databank4.jpg
---------------
Quando sono soddisfatto delle strategie nel Databank, fermo il processo di generazione (scheda Progress - Stop),
filtro le strategy che mi soddisfano nel Databank, cancellando quelle che non mi interessano (seleziono le strategy - pulsante Delete)
e posso anche salvare tutte le strategy per averle a disposizione successivamente: seleziono le strategy - Save - Strategy Project (.str)
. databank5.jpg
---------------
Per inciso, tutte queste strategy che ho salvato posso anche usarle come Initial Population Generation di una nuova ricerca di programmazione genetica
come dettagliato nella figura seguente.
. databank6.jpg
e le strategy vanno a finire nella scheda Initial population
. databank7.jpg
Comment
-
Vediamo ora la scheda Retest strategies
Quando sono soddisfatto delle strategie nel Databank fermo il processo di generazione, e sposto tutte le strategy del Databank di Build strategies nella Scheda Retest strategies.
Le seleziono tutte - Retest e le sposto nella scheda Retest.
Una nuova finestra ricorda che il setting usato nella costruzione delle strategie sarà copiato nella scheda Retest: il messaggio ricorda che se in una precedente sessione nella scheda Retest era memorizzato un vecchio setting personalizzato, questo verrà sovrascritto: si clicca su Yes
Automaticamente StrategyQuant sposta tutte le strategies nella scheda Retest strategies, cancellandole dalla scheda Build strategies.
La scheda Retest strategies permette anche di lavorare con strategie già individuate precedentemente, purché siano state salvate in qualche cartella: con il pulsante Load possono essere caricate nella sezione Test strategies
----------------
Vediamo cosa si può fare con una strategy nella scheda Retest strategies
RETESTING
Per prima cosa verifichiamo che il setting della scheda Retest strategies sia lo stesso di quello che ha consentito di individuare la strategia.
Ad esempio,
se nella scheda Build strategies abbiamo una strategy che su EURUSD H1 sui dati IS e OOS ha realizzato un certo Net Profit su IS e su OOS come in figura
dobbiamo ottenere gli stessi valori facendo un backtest di questa strategy nella scheda Retest strategies.
Equity line della strategy selezionata nella scheda Build strategies
.
Setting della strategy selezionata nella scheda Build strategies
.
Setting della strategy selezionata nella scheda Retest strategies, che deve essere identico a quello della sezione Dati della scheda Build strategies
.
Verifica che la strategy nella scheda Retest strategies realizza lo stesso Net Profit su IS e su OOS come nella scheda Build strategies
.
Quando siamo sicuri di avere lo stesso setting, possiamo lavorare con la strategy nella scheda Retest strategies.
-----------------------
RETEST CON AUMENTATA PRECISIONE
Nella sezione Data della scheda Retest strategies, scelgiamo la voce Test precision: 1 Minute data (slow)
Quindi pulsantone Progress - Start e come in figura, l'aumento di precisione del test cambia leggermente il valore del Net profit ottenuto con Test precision : Selected Timeframe only (fastest)
Questo è il valore più vicino al vero, se effettuiamo un backtest con la strategy in modalità Every tick con Metatrader4.
.
----------------------------------
ROBUSTNESS TEST
Realizziamo il test di robustezza mettendo nella sezione Robustness test un flag alla voce Use Robustness Testing Monte Carlo Analysis
e un flag su tutti test che vogliamo fare.
.
Quindi pulsantone Progress - Start e StrategyQuant realizza il test di robustezza
.
Al termine cliccando due volte sulla strategy si apre la sezione Result e andando nella sezione Robustness analysis leggiamo il risultato del test di robustezza:
la voce più importante è la riga dei valori di Net profit, Max DD%, Return/DD, ecc. che si leggono all'intervallo di confidenza del 95%
Il test di robustezza ci dice che se si verificano variazioni sulle dimensioni delle candele dei dati storici, sulla sequenza di trade, sulle variabili della strategy, con la variabilità decisa nei vari test di robustezza,
per il 95% di probabilità ci saremmo potuti aspettare sui dati passati, nella situazione peggiore, un Net Profit > 263.9$, con un DD < del 3.74% !
Da notare come il valore di Net profit e DD siano peggiorativi rispetto ai valori originari (Net profit = 980.0 = Net profit IS + Net profit OOS).
Se i valori riportati alla riga della confidenza al 95% ci soddisfano, possiamo salvare questa strategy, altrimenti la eliminiamo, perché non supera il test di robustezza.
.
--------------------------
RETEST CON ESTENSIONE DEI DATI OOS
Un'altra operazione che possiamo fare nella sezione Retest strategies è verificare come si comporta la strategy sui dati successivi alla data di fine dei dati OOS.
Andando nella sezione Settings - Data aumentiamo la End Date dei dati storici su cui verifichiamo la performance della strategy: prima era 31.10.2015 ora mettiamo 04.03.2016.
Muoviamo il cursore dell'Out of Sample Period per far iniziare i dati OOS alla stessa data di inizio di quando abbiamo costruito la strategia nella scheda Build strategies: era 01.05.2015 ed aumentando la End Date dei dati storici, la data di avvio dei dati OOS va ripristinata al suo valore originario.
.
Quindi pulsantone Progress - Start e ritestiamo la strategy sul'estensione dei dati storici.
In figura nella parte destra viene visualizzato l'andamento della equity line della strategy sui dati futuri.
.
Comment
-
Buonasera,
complimenti per l'ottimo lavoro e per il tempo professionale che Umberto ci sta regalando a tutti noi del forum.
Ho eseguito una prima configurazione di SQ, ma ho riscontrato problemi di incompatibilità del settaggio.
Infatti il programma, dopo l'avvio, mi restituisce population generation error "Please check the settings".
Mi chiedevo se fosse più rapido applicare il settaggio proposto dal creatore per EURUSD e GBPUSD (H1)
al seguente link:
http://www.strategyquant.com/article...ding%20process
Cosi partendo da una base, si potrebbero eseguire delle piccole correzioni in base all'esperienza di ognuno.
Comment
Comment