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.
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.
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;
intOnInit()
{
//----------
Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
//---------- return(INIT_SUCCEEDED);
}
voidOnTick()
{
//---
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;
voidOnTick() {
if(isNewBar()){
Print("New Bar");
}
}
bool isNewBar() {
double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);
if(lastTime != thisTime) {
lastTime = thisTime;
returntrue;
}
returnfalse;
}
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.
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.
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?
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.