Discussione sull’articolo "L'Handler dell'Evento "Nuova Barra"" - pagina 5

 
tito.vinicius:

Attualmente il mio EA apre diversi ordini sulla stessa candela. Penso che il materiale contenuto in questo articolo possa aiutarmi.

Come posso implementarlo?


È possibile togliere la logica di entrata nell'operazione dall'evento OnTick() e inserirla nella funzione OnNewBar(). In questo modo, verrà eseguita solo quando c'è una nuova barra, senza più entrare più volte nella stessa candela, perché una volta eseguita, verrà eseguita di nuovo solo nella candela successiva.

 
grazie mille per questo bel pezzo di carta - i vostri sforzi sono molto apprezzati!
 

Ottimo articolo.

Grazie!

 

Molto molto bello grazie,

Speravo in una funzione delle librerie MQL5 ma sembra che non ci sia? Ho una libreria di trading modulare e mi sono imbattuto in un problema in cui il modulo del segnale impostava il suo flag IsNewBar e sovrascriveva il prevCandleTime e quando il modulo TrailingSL doveva valutare la stessa funzione restituiva false perché il prevCandleTime era uguale all'attuale.

Sì, posso memorizzare il risultato in un flag centrale e usarlo per tutti i moduli e non mi imbatterei in questo problema, ma i moduli possono essere eseguiti su timeframe diversi, quindi questa soluzione è perfetta, grazie.

 
Articolo molto informativo, grazie mille
 
Grazie, il modo migliore per individuare un nuovo bar! :)
 
A mio parere, a volte complichiamo inutilmente le cose. Per motivi pratici nulla, anche in termini di prestazioni, potrà battere il tempo del sistema (tempo di windows). All'inizio del prossimo minuto, o per essere sicuri, dopo qualche secondo, possiamo assumere che ci sarà una nuova barra per ogni Simbolo. Diciamo minuto... cinque minuti... quindici minuti, o qualunque sia il vostro intervallo di tempo. Per essere sicuri, è possibile verificare se l'ora della barra e l'ora del sistema sono uguali.

Ma non c'è bisogno di creare istanze multiple di questa classe, solo per verificare se c'è una nuova barra, quando in realtà sappiamo tutti quando verrà dipinta una nuova barra.


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("Sta arrivando un nuovo bar"., TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

Salve, presumo che non appena la quotazione Open() è arrivata, significa che è arrivata una nuova barra. IMHO è più semplice o mi sfugge qualcosa?

 
Max Go nuova barra. IMHO è più semplice o mi sfugge qualcosa?

Immaginate una situazione in cui il prezzo di apertura di una nuova barra è uguale al prezzo di apertura della barra precedente.... C'è un'alta probabilità di cogliere una situazione del genere su TF piccoli.

 

Non ho un metodo più semplice di questo.
Rileva l'ora di apertura della barra corrente e li confronta a ogni tick.

// Non ho un metodo più semplice di questo.
// Rileva l'orario di apertura della barra corrente e li confronta a ogni tick.

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5