Break-out di Londra

 

Cari membri del forum,

Da qualche settimana sto cercando di andare avanti con MQL4, ma che sfida! Speravo di essere già un esperto, ma non lo sono e spero di ricevere un piccolo aiuto.

Sto cercando di costruire un consulente esperto di breakout per la sessione di apertura di Londra. Voglio che il mio expert advisor calcoli il massimo e il minimo delle 5 barre prima dell'apertura di Londra e poi calcoli il massimo e il minimo.

Per questa funzione presumo di dover utilizzare l'alto della funzione iHigh e il basso della funzione iLow per calcolare il range. Ma questo intervallo poi cambierà durante il giorno. Voglio che l'alto e il basso di questo intervallo siano statici e non variabili.

Qualcuno ha qualche idea?

Grazie in anticipo!

 
Nour:

Cari membri del forum,

Da qualche settimana sto cercando di andare avanti con MQL4, ma che sfida! Speravo di essere già un esperto, ma non lo sono e spero di ricevere un piccolo aiuto.

Sto cercando di costruire un consulente esperto di breakout per la sessione di apertura di Londra. Voglio che il mio expert advisor calcoli il massimo e il minimo delle 5 barre prima dell'apertura di Londra e poi calcoli il massimo e il minimo.

Per questa funzione presumo di dover utilizzare l'alto della funzione iHigh e il basso della funzione iLow per calcolare il range. Ma questo intervallo poi cambierà durante il giorno. Voglio che l'alto e il basso di questo intervallo siano statici e non variabili.

Qualcuno ha qualche idea?

Grazie in anticipo!


come si fa a trovare il bar dove inizia l'open di Londra...

mostra come lo fai

 

Questo è un altro problema deVries, non so come trovare la barra dove si apre Londra...

Sono ancora piuttosto nuovo a MQL4

 

... mi manca qualcosa, o le funzioni data/ora integrate in MQL4 sono ancora inadeguate per questo tipo di cose?

Due problemi:

* Non è possibile ottenere in modo affidabile l'offset tra il server del broker e il GMT perché (a) può cambiare con l'ora legale, e (b) qualsiasi confronto tra TimeCurrent() e TimeGMT() per calcolare un offset fallisce nei fine settimana.

* Anche se è possibile ottenere l'offset corrente mentre il mercato è aperto, non c'è un modo integrato per tradurre l'ora GMT in un altro fuso orario come quello di Londra.

In altre parole: nessun modo integrato per determinare (a) il server del broker funziona a CET, e quindi (b) i tempi di Londra per ogni barra sono 1 ora indietro rispetto al tempo riportato da MT4.

 

Nour:

Questo è un altro problema deVries, non so come trovare la barra dove si apre Londra...

Sono ancora piuttosto nuovo a MQL4

https://docs.mql4.com/series/ibarshift
 
gchrmt4:

... mi manca qualcosa, o le funzioni data/ora integrate in MQL4 sono ancora inadeguate per questo tipo di cose?

Due problemi:

* Non è possibile ottenere in modo affidabile l'offset tra il server del broker e il GMT perché (a) può cambiare con l'ora legale, e (b) qualsiasi confronto tra TimeCurrent() e TimeGMT() per calcolare un offset fallisce nei fine settimana.

* Anche se è possibile ottenere l'offset corrente mentre il mercato è aperto, non c'è un modo integrato per tradurre l'ora GMT in un altro fuso orario come quello di Londra.

In altre parole: nessun modo integrato per determinare (a) il server del broker funziona a CET, e quindi (b) i tempi di Londra per ogni barra sono 1 ora indietro rispetto al tempo riportato da MT4.


Sembra che TimeGMT() non cambi con l'ora legale. Per esempio, io vivo negli Stati Uniti, quindi attualmente il mio fuso orario locale è EDT. Il server MT4 del mio broker è attualmente EEST. Ora, considerate il seguente codice e il suo output:

   Print ("1. GMT = ", TimeToString(TimeGMT()));
   Print ("2. Local Time (EDT) = ", TimeToString(TimeLocal()));
   Print ("3. Daylight Saving Adjustment: ", TimeDaylightSavings()/3600);
   Print ("4. GMTOffset for TimeLocal = ", TimeGMTOffset()/3600);
   Print ("5. Server Time (EEST) = ", TimeToString(TimeCurrent()));
   
   int local = (TimeLocal() - TimeGMT()) / 3600;
   int server = MathRound((TimeCurrent() - TimeGMT()) / 3600.0);
   string prt = "TimeLocal is ";
   if (local > 0)
      prt = StringConcatenate(prt, "GMT+", MathAbs(local));
   else if (local < 0)
      prt = StringConcatenate(prt, "GMT-", MathAbs(local));
   else
      prt = StringConcatenate(prt, "GMT");
      
   prt = StringConcatenate(prt, " and TimeCurrent is ");
   if (server > 0)
      prt = StringConcatenate(prt, "GMT+", MathAbs(server));
   else if (local < 0)
      prt = StringConcatenate(prt, "GMT-", MathAbs(server));
   else
      prt = StringConcatenate(prt, "GMT");
    
   Print (prt);

17:52:28 Esperto TestEA-1 EURUSD,H1: caricato con successo

17:52:28 TestEA-1 EURUSD,H1: 1. GMT = 2014.03.11 21:52

17:52:28 TestEA-1 EURUSD,H1: 2. Ora locale (EDT) = 2014.03.11 17:52

17:52:28 TestEA-1 EURUSD,H1: 3. Regolazione ora legale: -1

17:52:28 TestEA-1 EURUSD,H1: 4. GMTOffset per TimeLocal = 4

17:52:28 TestEA-1 EURUSD,H1: 5. Ora server (EEST) = 2014.03.12 00:52

17:52:28 TestEA-1 EURUSD,H1: TimeLocal è GMT-4 e TimeCurrent è GMT+3

Ho controllato il tempo GMT di cui sopra con quello di Londra, ed erano gli stessi (Londra non passa a BST fino alla fine di marzo). Quindi credo che TimeGMT() restituisca GMT senza aggiungere la regolazione locale dell'ora legale. EDT è definito come UTC-4 e EEST è definito come UTC+3.

Inoltre, se hai bisogno di determinare quando inizia e finisce l'ora legale per gli Stati Uniti o per l'UE, vedi queste funzioni.

 
Thirteen:

Ho controllato l'ora GMT di cui sopra con quella di Londra [...]

Come quasi certamente saprai... uno dei problemi è che l'offset tra l'ora del broker e GMT (a) può essere variabile o meno in base all'ora legale e (b) se è variabile o meno non può essere determinato in base alle informazioni fornite da MT4. Non ho esaminato queste funzioni in dettaglio, ma penso che siamo d'accordo sul fatto che non è possibile fare un tale calcolo basandosi solo sulle informazioni fornite da MT4.

Per quanto posso vedere, all'inizio di aprile il codice di cui sopra inizierà a dire che il broker è a GMT+4. Il mio punto è che non c'è modo di sapere da quello che MT4 ti dice che, nella settimana precedente, il broker era a GMT+3 e che l'uso di iBarShift(), per esempio, potrebbe dover essere regolato di conseguenza se vuoi lavorare sull'attività dei prezzi a orari GMT specifici, o su offset degli orari GMT.

BTW, se hai eseguito il codice di cui sopra oggi, allora il tuo broker quasi certamente non può essere su EEST. Dovrebbero essere su EET fino al 30 marzo. Se sono attualmente su GMT+3 allora stanno usando qualcosa di diverso da EEST. (La pagina che hai linkato dice "In questo periodo dell'anno, le località su EEST sono ora su EET").

 

gchrmt4:

. . .

BTW, se hai eseguito il codice di cui sopra oggi, allora il tuo broker quasi certamente non può essere su EEST. Dovrebbero essere su EET fino al 30 marzo. Se sono attualmente su GMT+3 allora stanno usando qualcosa di diverso da EEST. (La pagina che hai linkato dice "In questo periodo dell'anno, le località su EEST sono ora su EET").

Il mio broker cambia il fuso orario sul suo server MT4 da GMT+2 a GMT+3 per corrispondere alle 17:00 della chiusura di New York, e lo fa nello stesso momento in cui gli Stati Uniti passano all'ora legale, cosa che è avvenuta il 09 marzo 2014. In Europa, GMT+2 corrisponde approssimativamente a EET per l'ora standard, quindi GMT+3 corrisponde a EEST per l'ora legale. Vedi, per esempio, European Time Zones. Quindi, come potete vedere, non c'è dubbio che ho eseguito il codice oggi quando il mio fuso orario locale è EDT e il fuso orario del mio broker corrisponde a EEST.

[1] Per quanto posso vedere, all'inizio di aprile il codice di cui sopra inizierà a dire che il broker è a GMT+4.

[2] Il mio punto è che non c'è modo di sapere da quello che MT4 ti dice che, nella settimana precedente, il broker era a GMT+3 e che gli usi di iBarShift(), per esempio, potrebbero dover essere regolati di conseguenza se vuoi lavorare sull'attività dei prezzi a orari GMT specifici, o su sfasamenti degli orari GMT.

1. Perché dovrebbe restituire GMT+4 in aprile? Il tempo del mio computer locale è già regolato per l'ora legale, e il mio broker ha già regolato il suo server per riflettere l'ora legale, quindi cosa cambierà in aprile?

2. Un broker può cambiare il suo orario per riflettere l'ora legale, il che cambierebbe il suo offset in GMT. Ma è possibile prevedere questo cambiamento. Per esempio, mentre le date/ora in cui inizia e finisce l'ora legale cambiano di anno in anno, questo cambiamento è prevedibile - e quindi programmabile. Basta codificare la regola. Ma TimeGMT() dovrebbe restituire GMT indipendentemente dal fuso orario locale, dal fuso orario dell'intermediario o dall'offset dell'ora legale.

Come quasi certamente saprai... uno dei problemi è che l'offset tra l'ora del broker e GMT (a) può essere variabile o meno in base all'ora legale e (b) se è variabile o meno non può essere determinato in base alle informazioni che MT4 fornisce. Non ho esaminato queste funzioni in dettaglio, ma penso che siamo d'accordo sul fatto che non è possibile fare un tale calcolo basandosi esclusivamente sulle informazioni fornite da MT4.

Se un broker si regola per l'ora legale, allora questa regolazione cambierebbe il suo offset rispetto al GMT, ma come ho detto sopra, è possibile prevedere questi cambiamenti e regolarli. Oppure se un luogo (per esempio, Londra) si regola per l'ora legale, è possibile codificare la regola locale e quindi prevedere quel cambiamento e regolarlo.

 
Thirteen:

Se un broker si regola per l'ora legale, allora questa regolazione cambierebbe il suo offset rispetto al GMT, ma come ho detto sopra, potete prevedere questi cambiamenti e regolarvi per essi. O se un luogo (per esempio, Londra) si regola per l'ora legale, si può codificare la regola locale e quindi prevedere quel cambiamento e regolarsi per esso.

Sono ancora fondamentalmente d'accordo con te che i cambiamenti sono prevedibili e codificabili... ma non solo usando le informazioni che MT4 stesso fornisce. Devi "codificare la regola locale" per il GMT di Londra, piuttosto che dire a MT4 "dammi il tempo equivalente per x a Londra".

Il tempo del tuo server di GMT+3 può corrispondere a EEST nel senso che EEST è GMT+3 ma, secondo sia Wikipedia che worldclock.com, da nessuna parte dovrebbe essere ancora su EEST. Questo cambiamento non dovrebbe avvenire prima del 30 marzo. L'ora attuale a Cipro, Grecia, Israele ecc. è GMT+2.

Quindi, quello che hai probabilmente è un broker che fa funzionare i suoi server a GMT+2, ma che passa all'ora legale nelle date statunitensi piuttosto che in quelle europee. Non è la stessa cosa di EET/EEST. (Ed è ancora meno prevedibile in termini di essere in grado di scrivere codice che regola automaticamente orari e date senza dover chiedere all'utente qualche tipo di input su quali impostazioni di orario il broker utilizza).

Se, quindi, il broker è recentemente passato da GMT+2 a GMT+3, piuttosto che essere in procinto di passare da GMT+3 a GMT+4, ciò che significa è che l'attuale offset tra l'ora del broker e GMT sarebbe sbagliato se si cercasse di applicarlo alle barre della settimana scorsa, prima del cambiamento dell'orologio americano. Questa settimana, le barre del broker sono 3 ore avanti rispetto a Londra. La settimana scorsa erano 2 ore avanti. (E, dal 30 marzo, saranno di nuovo 2 ore avanti.) Se prendete questo offset attuale di 3 ore e lo usate per cercare di ottenere il prezzo alle 8 di mattina ora di Londra in un giorno della settimana scorsa, otterrete la risposta sbagliata.

Tutto quello che sto dicendo è che l'informazione che è possibile ottenere solo da MT4 stesso - l'offset corrente tra l'ora del broker e il GMT - è inadeguata in pratica per fare cose come dire "calcola il prezzo di apertura a Londra mercoledì scorso".

 

Come si potrebbe rendere MT4 più adeguato per fare questo? Non so voi, ma di sicuro non mi piacerebbe il compito di creare un calcolatore di offset GMT storico regionale. Ve lo immaginate? omg. Se mai lo farò, lo metterò sul mercato, è meglio che abbiate un grosso libretto di assegni ;)

Sto solo scherzando, non c'è modo che io cerchi di codificarlo. WHR potrebbe farlo però, scommetto che l'ha già fatto.