Dopo una decina di giorni di riflessioni sono riuscito a venire a capo di questa problematica, che diventa fondamentale per chi, come me, usa diversi filtri sull'ora e li ottimizza sui dati storici.
Vi condivido tutto il ragionamento ed il codice sorgente di base per gestire i dati storici dei broker che non rettificano l'ora legale.
Nella vita normale, in Europa, il passaggio dall’ora solare all’ora legale avviene l'ultima domenica di marzo: alle ore 02:00 l'orologio viene spostato un'ora in avanti sulle ore 03:00.
Viceversa, il passaggio dall’ora legale all’ora solare avviene l'ultima domenica di ottobre: alle ore 03:00 l'orologio viene spostato un'ora indietro sulle ore 02:00.
I dati in LIVE dei broker hanno orari coerenti con la vita normale.
Prendiamo come esempio il CFD del DAX, che ha una sessione dalle 08 alle 22 ora tedesca, che coincide con il fuso orario italiano:
UTC+1 per i 6 mesi di ora solare, da fine ottobre a fine marzo (orario invernale)
UTC+2 per i 6 mesi di ora legale, da fine marzo a fine ottobre (orario estivo)
Per qualsiasi broker, indipendentemente dal fuso orario del server su cui risiedono, l’orario di sessione del CFD del DAX in LIVE è lo stesso tutto l’anno, sia con l’ora solare che con l’ora legale, cioè i dati LIVE mantengono sempre gli stessi orari di sessione dalle 8 alle 22.
http://www.dossier.net/utilities/calcolo-ora-legale/
Invece, per i DATI STORICI del CFD del DAX la situazione è diversa a seconda del broker.
:090.WAsmile: Alcuni broker, come FXCM e Forex.com hanno differenti orari di sessione tra il periodo di ora solare ed il periodo di ora legale.
Gli orari dei DATI STORICI del CFD del DAX
- in inverno vanno dalle 08 alle 22 : fuso orario UTC+1
- in estate vanno dalle 07 alle 21 : fuso orario UTC+1
Diversamente, in LIVE, l’orario estivo si sposta in avanti di 1 ora (UTC+2) e quindi la sessione del CFD del DAX in LIVE coincide con quella invernale, dalle 08 alle 22.
Con questi broker gli orari storici hanno tutti lo stesso fuso orario, da qui la differenza di 1 ora indietro in estate, perché dovendo aumentare di 1 ora gli orari in LIVE, gli orari di sessione diventano 08-22 anche durante l’ora legale.
Quindi in sintesi, gli orari dei DATI STORICI di FXCM e Forex.com sono diversi da quelli che i due broker fanno vedere in LIVE quando sia in inverno che in estate la sessione di 14 ore è sempre 08 – 22.
Le ore 2 della domenica del cambio all’ora legale dei DATI STORICI NON rettificati, corrispondono alle ore 3 degli stessi dati IN LIVE.
Le ore 2 della domenica del cambio all’ora solare dei DATI STORICI NON rettificati, corrisponde alle ore 2 degli stessi dati IN LIVE.
:090.WAsmile: Altri broker, come AFX Capital o Dukascopy, hanno invece gli orari dei DATI STORICI del CFD del DAX che inglobano già dentro l’ora legale, per cui la sessione di 14 ore giornaliera sia in inverno che in estate va dalle 8 alle 22.
Con questi broker i dati storici vengono “rettificati” per rendere gli orari dei dati storici identici a quelli che si hanno effettivamente durante le negoziazioni LIVE.
Naturalmente l'orario dei DATI STORICI NON rettificati vale anche per le COPPIE DI VALUTE del FOREX
La verifica di questa caratteristica non è però semplice come si può fare con i CFD (per i quali si osserva immediatamente la differenza di 1 ora nell'inizio e fine sessione tra i due periodi con ora solare e ora legale) perché la sessione giornaliera del Forex è di 24 ore.
Nel grafico seguente un confronto tra DATI STORICI delle candele EURUSD H1 di Forex.com (NON rettificati) , con le candele EURUSD H1 di Dukascopy (rettificati).
Si osserva la differenza di 1 ora durante l'ora legale: nella domenica di inizio dell’ora Legale del 2014, il 30 marzo, su Forex.com la candela delle ore 21 corrisponde alla candela delle ore 22 di Dukascopy.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Data questa premessa, di seguito la SOLUZIONE per poter fare backtest con dati storici NON rettificati se si usano variabili legate agli orari di negoziazione, ad esempio Ora_inizio_operativita, Ora_chiusuraTrade_Venerdi, ecc.
Per poter usare i DATI STORICI NON rettificati, su trading system che usano variabili legate agli orari di negoziazione,
bisogna gestire gli orari durante il periodo di ora Solare da quelli con ora Legale.
Basta creare una funzione che ad ogni avvio di barra verifica, nel solo caso di backtest o ottimizzazione
if (IsTesting())
se l’orario corrente è nella finestra semestrale dell’ora solare o dell’ora legale: nel solo caso di ora legale, bisogna spostare di 1 ora indietro tutte le variabili che tengono conto dell'ora.
Ad esempio Ora_inizio_operativita = 9
- in inverno rimane quella settata nei parametri esterni, Ora_inizio_operativita = 9
- in estate invece va spostata indietro di 1 ora, Ora_inizio_operativita = 8
In questo modo tutta l’operatività con i DATI STORICI è coerente con gli orari LIVE, quando le sessioni orarie giornaliere sono sempre identiche sia in estate che in inverno.
In allegato il codice sorgente di un EA (oraLegale.mq4) che contiene la funzione che verifica ad ogni avvio di barra se l'orario corrente è ora Solare o ora Legale e la stampa nella scheda Journal (Diario) del Tester (Collaudatore).
Il codice contiene inglobate le date per gestire l'ora Legale dal 2010 al 2018
Naturalmente il codice è solo di base, cioè va poi modificato per il proprio trading system.
In LIVE non è necessario usare questa funzione, perché ogni broker modifica correttamente l'orario delle sessioni di Forex o CFD all'orario corrente in ora Solare o ora Legale.
Vi condivido tutto il ragionamento ed il codice sorgente di base per gestire i dati storici dei broker che non rettificano l'ora legale.
Nella vita normale, in Europa, il passaggio dall’ora solare all’ora legale avviene l'ultima domenica di marzo: alle ore 02:00 l'orologio viene spostato un'ora in avanti sulle ore 03:00.
Viceversa, il passaggio dall’ora legale all’ora solare avviene l'ultima domenica di ottobre: alle ore 03:00 l'orologio viene spostato un'ora indietro sulle ore 02:00.
I dati in LIVE dei broker hanno orari coerenti con la vita normale.
Prendiamo come esempio il CFD del DAX, che ha una sessione dalle 08 alle 22 ora tedesca, che coincide con il fuso orario italiano:
UTC+1 per i 6 mesi di ora solare, da fine ottobre a fine marzo (orario invernale)
UTC+2 per i 6 mesi di ora legale, da fine marzo a fine ottobre (orario estivo)
Per qualsiasi broker, indipendentemente dal fuso orario del server su cui risiedono, l’orario di sessione del CFD del DAX in LIVE è lo stesso tutto l’anno, sia con l’ora solare che con l’ora legale, cioè i dati LIVE mantengono sempre gli stessi orari di sessione dalle 8 alle 22.
http://www.dossier.net/utilities/calcolo-ora-legale/
Invece, per i DATI STORICI del CFD del DAX la situazione è diversa a seconda del broker.
:090.WAsmile: Alcuni broker, come FXCM e Forex.com hanno differenti orari di sessione tra il periodo di ora solare ed il periodo di ora legale.
Gli orari dei DATI STORICI del CFD del DAX
- in inverno vanno dalle 08 alle 22 : fuso orario UTC+1
- in estate vanno dalle 07 alle 21 : fuso orario UTC+1
Diversamente, in LIVE, l’orario estivo si sposta in avanti di 1 ora (UTC+2) e quindi la sessione del CFD del DAX in LIVE coincide con quella invernale, dalle 08 alle 22.
Con questi broker gli orari storici hanno tutti lo stesso fuso orario, da qui la differenza di 1 ora indietro in estate, perché dovendo aumentare di 1 ora gli orari in LIVE, gli orari di sessione diventano 08-22 anche durante l’ora legale.
Quindi in sintesi, gli orari dei DATI STORICI di FXCM e Forex.com sono diversi da quelli che i due broker fanno vedere in LIVE quando sia in inverno che in estate la sessione di 14 ore è sempre 08 – 22.
Le ore 2 della domenica del cambio all’ora legale dei DATI STORICI NON rettificati, corrispondono alle ore 3 degli stessi dati IN LIVE.
Le ore 2 della domenica del cambio all’ora solare dei DATI STORICI NON rettificati, corrisponde alle ore 2 degli stessi dati IN LIVE.
:090.WAsmile: Altri broker, come AFX Capital o Dukascopy, hanno invece gli orari dei DATI STORICI del CFD del DAX che inglobano già dentro l’ora legale, per cui la sessione di 14 ore giornaliera sia in inverno che in estate va dalle 8 alle 22.
Con questi broker i dati storici vengono “rettificati” per rendere gli orari dei dati storici identici a quelli che si hanno effettivamente durante le negoziazioni LIVE.
Naturalmente l'orario dei DATI STORICI NON rettificati vale anche per le COPPIE DI VALUTE del FOREX
La verifica di questa caratteristica non è però semplice come si può fare con i CFD (per i quali si osserva immediatamente la differenza di 1 ora nell'inizio e fine sessione tra i due periodi con ora solare e ora legale) perché la sessione giornaliera del Forex è di 24 ore.
Nel grafico seguente un confronto tra DATI STORICI delle candele EURUSD H1 di Forex.com (NON rettificati) , con le candele EURUSD H1 di Dukascopy (rettificati).
Si osserva la differenza di 1 ora durante l'ora legale: nella domenica di inizio dell’ora Legale del 2014, il 30 marzo, su Forex.com la candela delle ore 21 corrisponde alla candela delle ore 22 di Dukascopy.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Data questa premessa, di seguito la SOLUZIONE per poter fare backtest con dati storici NON rettificati se si usano variabili legate agli orari di negoziazione, ad esempio Ora_inizio_operativita, Ora_chiusuraTrade_Venerdi, ecc.
Per poter usare i DATI STORICI NON rettificati, su trading system che usano variabili legate agli orari di negoziazione,
bisogna gestire gli orari durante il periodo di ora Solare da quelli con ora Legale.
Basta creare una funzione che ad ogni avvio di barra verifica, nel solo caso di backtest o ottimizzazione
if (IsTesting())
se l’orario corrente è nella finestra semestrale dell’ora solare o dell’ora legale: nel solo caso di ora legale, bisogna spostare di 1 ora indietro tutte le variabili che tengono conto dell'ora.
Ad esempio Ora_inizio_operativita = 9
- in inverno rimane quella settata nei parametri esterni, Ora_inizio_operativita = 9
- in estate invece va spostata indietro di 1 ora, Ora_inizio_operativita = 8
In questo modo tutta l’operatività con i DATI STORICI è coerente con gli orari LIVE, quando le sessioni orarie giornaliere sono sempre identiche sia in estate che in inverno.
In allegato il codice sorgente di un EA (oraLegale.mq4) che contiene la funzione che verifica ad ogni avvio di barra se l'orario corrente è ora Solare o ora Legale e la stampa nella scheda Journal (Diario) del Tester (Collaudatore).
Il codice contiene inglobate le date per gestire l'ora Legale dal 2010 al 2018
Naturalmente il codice è solo di base, cioè va poi modificato per il proprio trading system.
In LIVE non è necessario usare questa funzione, perché ogni broker modifica correttamente l'orario delle sessioni di Forex o CFD all'orario corrente in ora Solare o ora Legale.
Comment