Discusión sobre el artículo "Gestor de evento "Nueva barra"" - página 5

 
tito.vinicius:

Actualmente, mi EA abre varias órdenes en la misma vela. Creo que el material de este artículo me ayudaría.

¿Cómo lo implemento?


Puedes sacar la lógica de entrada de operaciones del evento OnTick() y ponerla dentro de la función OnNewBar(). De esta manera, sólo se ejecutará cuando hay una nueva barra, no más entrar varias veces en la misma vela, porque una vez que se ha ejecutado, sólo se ejecutará de nuevo en la próxima vela.

 
muchas gracias por este papel tan bonito - ¡se agradece mucho su esfuerzo!
 

Buen artículo.

Gracias.

 

Muy muy bien gracias,

Tenía la esperanza de una función de bibliotecas MQL5 pero parece que no hay ninguno? Tengo un comercio modular lib y me encontré con la cuestión de que el módulo de señal establecería su bandera IsNewBar y anula el prevCandleTime y cuando TrailingSL módulo tuvo que evaluar la misma función que devuelve falso porque el prevCandleTime es el mismo que el actual.

Sí puedo almacenar el resultado en una bandera central y utilizarlo para todos los módulos y no me encontraría con esto es SIN EMBARGO los módulos se pueden ejecutar en diferentes marcos de tiempo, por lo tanto, esta solución es taaan perfecto gracias.

 
Artículo muy informativo, muchas gracias
 
Gracias, ¡la mejor manera de detectar un nuevo bar! :)
 
En mi opinión, a veces complicamos las cosas innecesariamente. Por razones prácticas nada, ni siquiera en cuanto a rendimiento, superará al tiempo del sistema (tiempo de windows). Al comienzo del siguiente minuto, o para estar seguros, después de unos segundos, podemos suponer que habrá una nueva barra para cada Símbolo. Digamos minuto.. cinco minutos.. quince minutos, o cualquiera que sea su marco temporal. Para estar seguro, puede comprobar si el tiempo de la barra y el tiempo del sistema son los mismos.

Pero no hay necesidad de crear múltiples instancias de esta clase, sólo para comprobar si hay una nueva barra, cuando todos sabemos realmente cuando se pintará una nueva 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("Hay un nuevo bar en camino.", TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

Hola, estoy asumiendo que tan pronto como la cita Open() ha llegado, significa que una nueva barra ha llegado. IMHO es más fácil o me estoy perdiendo algo?

 
Max Go nueva barra. IMHO es más fácil o me estoy perdiendo algo?

Imagine una situación en la que el precio de apertura de una nueva barra es igual al precio de apertura de la barra anterior.... Hay una alta probabilidad de atrapar tal situación en TFs pequeños.

 

No tengo un método más sencillo que éste.
Rastrea la hora de apertura de la barra actual y las compara en cada tick.

// No tengo un método más sencillo que este.
// Rastrea la hora de apertura de la barra actual y las compara en cada 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