Un thread riassuntivo sul funzionamento di Metatrader4 e sulla procedura per scaricare i dati storici e importarli dentro Metatrader4
Fractal Interpolation
In Metatrader4 il volume delle candele M1 non è il volume dei lotti scambiati dai trader all’interno della candela M1, ma soltanto il numero di tick reali forniti dal broker nel minuto della singola candela.
Quando viene effettuato un backtest con Metatrader4 in modalità Ogni Tick, il motore di Metatrader4 (=chiamato Tester o Collaudatore) non usa i dati a tick reali del broker, perché non è previsto che la piattaforma li memorizzi.
Metatrader4 memorizza ed usa soltanto i 4 valori OHLC della candela M1 (=Open, High, Close e Low) e
quando viene realizzato un backtest/ottimizzazione in modalità Ogni Tick , la piattaforma crea un file temporaneo di dati storici (con estensione .FXT) contenente un numero di tick all’interno di ciascuna candela M1, pari al valore del volume di questa candela.
Questi tick sono generati algoritmicamente (= inventati secondo una logica) e Metatrader4 utilizzerà questo file .FXT per effettuare una verifica di come si sarebbe comportato l’EA lavorando sui dati storici in modalità Ogni Tick.
YX4hXl.png
La fractal interpolation è il nome del metodo utilizzato dal Tester di Metatrader4 per generare algoritmicamente i tick all’interno delle barre ad 1 minuto, conoscendo soltanto i 4 valori OHLC.
Guardando la figura seguente, Metatrader4 "si inventa" i tick che possono essersi verificati dentro ogni barra ad 1 minuto. Nel backtest possono quindi verificarsi situazioni ben diverse da quelle realmente accadute: ad esempio con i tick reali il massimo viene raggiunto prima del minimo, mentre nei tick generati da Metatrader viene colpito prima il minimo.
21827723502_ca5c9162e9_b.jpg
Quindi, il tester di Metatrader4 utilizzerà il volume delle barre M1 per elaborare i tick generati algoritmicamente all’interno di quella barra:
- se le barre M1 hanno tutte volume = 1, ogni barra avrà soltanto 1 tick e il backtest passerà dalla Close di quella barra alla Close della barra successiva senza passare per il minimo ed il massimo di barra, che non verranno quindi mai elaborati nel backtest
- se ogni barra M1 contiene volume = 2, la barra avrà soltanto 2 tick e passerà dalla Open di quella barra alla Close della stessa barra, senza passare per il minimo ed il massimo di barra;
- affinché il Tester di Metatrader4 tocchi con la successione di tick almeno una volta i livelli di Open, Close, High e Low della barra è necessario che abbia un volume minimo di 4 tick.
Osservazione: anche se le barre M1 vengono sempre disegnate correttamente sul grafico, con l’informazione dei valori Open High Low Close, il Tester di Metatrader4 in modalità Ogni Tick, utilizza il volume delle candele M1 per elaborare una nuova versione di dati storici su cui effettuare il test e se si usa un volume M1 = 1 o 2, l’informazione dell’High e del Low della candela M1 non verrà mai presa in considerazione dal Tester.
La sequenza dei tick della candela M1, con i tick generati algoritmicamente da Metatrader4, dipende dalla tipologia della candela, rialzista o ribassista, seguendo il suo movimento “ideale”.
Il Tester di Metatrader nei 4 tick,
per una barra rialzista segue sempre questa sequenza: Open à Low à High à Close
per una barra ribassista segue sempre questa sequenza : Open à High à Low à Close
Ecco due esempi di evoluzione nella formazione della stessa barra M1 quando ha volume = 4 e quando ha volume = 20 (ottenuto con il Visual Tester cliccando in modalità Every Tick ripetutamente con il tasto F12)
YX4hXl.png
Poiché ogni timeframe successivo ad M1 utilizza le candele M1 per generare questi timeframe superiori,
il volume delle candele degli altri timeframe è la somma del volume delle candele M1 che la formano.
Se ad esempio abbiamo 5 candele M1 con volume rispettivamente di 15, 12, 20, 18, 11
la candela M5 che le comprende avrà un volume pari alla somma: 15 + 12 + 20 + 18 + 11 = 76
Per ogni barra di un timeframe superiore ad M1, l'evoluzione dei tick generati algoritmicamente, segue la sequenza dell'evoluzione dei tick nelle singole barre M1.
Ad esempio una barra M15 ha una evoluzione in tick nella sua formazione che segue la sequenza di formazione delle 15 barre M1 che la formano.
Quando viene eseguito un backtest/ottimizzazione, il Tester di Metatrader4
- prima genera un file .FXT contenente i dati storici su cui lavorare
- e poi su questo file realizza il backtest/ottimizzazione.
I file .FXT vengono creati al momento dell'avvio del backtest/ottimizzazione dentro la cartella
C:\Program Files\Metatrader4\tester\history\
e contiene i dati storici su cui effettuare il backtest, per la coppia di valute e timeframe considerati, per il modello di esecuzione desiderato (=Every tick, Control points o Open price only) e per l'intervallo di tempo scelto.
Ad esempio, per un backtest su EURUSD al timeframe H1
EURUSD60_0.fxt contiene i dati storici formattati per la modalità "Every Tick" (= Ogni tick)
EURUSD60_1.fxt contiene i dati storici formattati per la modalità "Control Points" (= Punti di controllo)
EURUSD60_2.fxt contiene i dati storici formattati per la modalità "Open Prices Only" (= Solo prezzi di apertura)
IMPORTANTE: quando il Tester di Metatrader4 deve realizzare un backtest/ottimizzazione, in modalità EveryTick, effettua i calcoli relativi al trading system, su ciascun tick generato algoritmicamente, perciò all’aumentare del numero di candele, aumenta esponenzialmente il numero di tick su cui il Tester deve andare a lavorare, con un aumento
- delle dimensioni del file .FXT
- del tempo tecnico di elaborazione del singolo backtest.
Inoltre, Metatrader è in grado di leggere un file .FXT fino a 4 GB, dopodiché simula di continuare a fare il backtest, ma non effettua nessuna elaborazione.
Ecco il perché se il Tester genera un file .FXT di dati storici di 6 GB ad esempio,
il backtest dell’EA farà trade soltanto fino ad una certa data e poi non più: il Tester smette di elaborare i dati storici sui cui dovrebbe andare a lavorare il trading system, quando raggiunge la data corrispondente a 4 GB di dati storici dentro il file .FXT
A parità di intervallo di tempo di un backtest, le dimensioni del file .FXT per un backtest EveryTick dipende dal valore del VOLUME che hanno le candele M1, perciò può accadere che
- con soli 2 anni di dati storici si ottiene un file .FXT di 4 GB, quando il volume delle candele M1 è mediamente di 20;
- se invece il volume delle candele M1 è basso, il minor numero di tick dentro le candele M1 permette di poter fare un backtest anche di 4 o più anni, perché il file .FXT si manterrà al di sotto dei 4 GB.
Fractal Interpolation
In Metatrader4 il volume delle candele M1 non è il volume dei lotti scambiati dai trader all’interno della candela M1, ma soltanto il numero di tick reali forniti dal broker nel minuto della singola candela.
Quando viene effettuato un backtest con Metatrader4 in modalità Ogni Tick, il motore di Metatrader4 (=chiamato Tester o Collaudatore) non usa i dati a tick reali del broker, perché non è previsto che la piattaforma li memorizzi.
Metatrader4 memorizza ed usa soltanto i 4 valori OHLC della candela M1 (=Open, High, Close e Low) e
quando viene realizzato un backtest/ottimizzazione in modalità Ogni Tick , la piattaforma crea un file temporaneo di dati storici (con estensione .FXT) contenente un numero di tick all’interno di ciascuna candela M1, pari al valore del volume di questa candela.
Questi tick sono generati algoritmicamente (= inventati secondo una logica) e Metatrader4 utilizzerà questo file .FXT per effettuare una verifica di come si sarebbe comportato l’EA lavorando sui dati storici in modalità Ogni Tick.
YX4hXl.png
La fractal interpolation è il nome del metodo utilizzato dal Tester di Metatrader4 per generare algoritmicamente i tick all’interno delle barre ad 1 minuto, conoscendo soltanto i 4 valori OHLC.
Guardando la figura seguente, Metatrader4 "si inventa" i tick che possono essersi verificati dentro ogni barra ad 1 minuto. Nel backtest possono quindi verificarsi situazioni ben diverse da quelle realmente accadute: ad esempio con i tick reali il massimo viene raggiunto prima del minimo, mentre nei tick generati da Metatrader viene colpito prima il minimo.
21827723502_ca5c9162e9_b.jpg
Quindi, il tester di Metatrader4 utilizzerà il volume delle barre M1 per elaborare i tick generati algoritmicamente all’interno di quella barra:
- se le barre M1 hanno tutte volume = 1, ogni barra avrà soltanto 1 tick e il backtest passerà dalla Close di quella barra alla Close della barra successiva senza passare per il minimo ed il massimo di barra, che non verranno quindi mai elaborati nel backtest
- se ogni barra M1 contiene volume = 2, la barra avrà soltanto 2 tick e passerà dalla Open di quella barra alla Close della stessa barra, senza passare per il minimo ed il massimo di barra;
- affinché il Tester di Metatrader4 tocchi con la successione di tick almeno una volta i livelli di Open, Close, High e Low della barra è necessario che abbia un volume minimo di 4 tick.
Osservazione: anche se le barre M1 vengono sempre disegnate correttamente sul grafico, con l’informazione dei valori Open High Low Close, il Tester di Metatrader4 in modalità Ogni Tick, utilizza il volume delle candele M1 per elaborare una nuova versione di dati storici su cui effettuare il test e se si usa un volume M1 = 1 o 2, l’informazione dell’High e del Low della candela M1 non verrà mai presa in considerazione dal Tester.
La sequenza dei tick della candela M1, con i tick generati algoritmicamente da Metatrader4, dipende dalla tipologia della candela, rialzista o ribassista, seguendo il suo movimento “ideale”.
Il Tester di Metatrader nei 4 tick,
per una barra rialzista segue sempre questa sequenza: Open à Low à High à Close
per una barra ribassista segue sempre questa sequenza : Open à High à Low à Close
Ecco due esempi di evoluzione nella formazione della stessa barra M1 quando ha volume = 4 e quando ha volume = 20 (ottenuto con il Visual Tester cliccando in modalità Every Tick ripetutamente con il tasto F12)
YX4hXl.png
Poiché ogni timeframe successivo ad M1 utilizza le candele M1 per generare questi timeframe superiori,
il volume delle candele degli altri timeframe è la somma del volume delle candele M1 che la formano.
Se ad esempio abbiamo 5 candele M1 con volume rispettivamente di 15, 12, 20, 18, 11
la candela M5 che le comprende avrà un volume pari alla somma: 15 + 12 + 20 + 18 + 11 = 76
Per ogni barra di un timeframe superiore ad M1, l'evoluzione dei tick generati algoritmicamente, segue la sequenza dell'evoluzione dei tick nelle singole barre M1.
Ad esempio una barra M15 ha una evoluzione in tick nella sua formazione che segue la sequenza di formazione delle 15 barre M1 che la formano.
Quando viene eseguito un backtest/ottimizzazione, il Tester di Metatrader4
- prima genera un file .FXT contenente i dati storici su cui lavorare
- e poi su questo file realizza il backtest/ottimizzazione.
I file .FXT vengono creati al momento dell'avvio del backtest/ottimizzazione dentro la cartella
C:\Program Files\Metatrader4\tester\history\
e contiene i dati storici su cui effettuare il backtest, per la coppia di valute e timeframe considerati, per il modello di esecuzione desiderato (=Every tick, Control points o Open price only) e per l'intervallo di tempo scelto.
Ad esempio, per un backtest su EURUSD al timeframe H1
EURUSD60_0.fxt contiene i dati storici formattati per la modalità "Every Tick" (= Ogni tick)
EURUSD60_1.fxt contiene i dati storici formattati per la modalità "Control Points" (= Punti di controllo)
EURUSD60_2.fxt contiene i dati storici formattati per la modalità "Open Prices Only" (= Solo prezzi di apertura)
IMPORTANTE: quando il Tester di Metatrader4 deve realizzare un backtest/ottimizzazione, in modalità EveryTick, effettua i calcoli relativi al trading system, su ciascun tick generato algoritmicamente, perciò all’aumentare del numero di candele, aumenta esponenzialmente il numero di tick su cui il Tester deve andare a lavorare, con un aumento
- delle dimensioni del file .FXT
- del tempo tecnico di elaborazione del singolo backtest.
Inoltre, Metatrader è in grado di leggere un file .FXT fino a 4 GB, dopodiché simula di continuare a fare il backtest, ma non effettua nessuna elaborazione.
Ecco il perché se il Tester genera un file .FXT di dati storici di 6 GB ad esempio,
il backtest dell’EA farà trade soltanto fino ad una certa data e poi non più: il Tester smette di elaborare i dati storici sui cui dovrebbe andare a lavorare il trading system, quando raggiunge la data corrispondente a 4 GB di dati storici dentro il file .FXT
A parità di intervallo di tempo di un backtest, le dimensioni del file .FXT per un backtest EveryTick dipende dal valore del VOLUME che hanno le candele M1, perciò può accadere che
- con soli 2 anni di dati storici si ottiene un file .FXT di 4 GB, quando il volume delle candele M1 è mediamente di 20;
- se invece il volume delle candele M1 è basso, il minor numero di tick dentro le candele M1 permette di poter fare un backtest anche di 4 o più anni, perché il file .FXT si manterrà al di sotto dei 4 GB.
Comment