Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 570

 

¿Cómo puedo comprobar la condición en un momento determinado? Por ejemplo, en el gráfico M5, a las 22:59, es decir, un minuto antes del cierre de la barra.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

¿Cómo comprobar la condición en un momento determinado? Por ejemplo, en el gráfico M5, a las 22:59, es decir, un minuto antes del cierre de la barra.

En el indicador de la historia - sólo mediante la lectura de los datos de la TF más joven (en este caso M1), vamos a tener que alboroto. Pero para la barra de cero:

  1. Calcula el tiempo que queda para cerrar la barra.
  2. Si hay 1 minuto o menos, hacemos lo necesario.

 
Ihor Herasko:

...Bueno para la barra de cero:

  1. Calcule el tiempo hasta el cierre de la barra.
  2. Si queda 1 minuto o menos, haz lo que sea necesario.

Es decir, a la hora actual se le resta la hora de apertura del bar?

Tal vez deberíamos omitir la iteración si la hora no está en el rango de 22:59, 23:00

¿cómo escribir correctamente esta condición?

 
PolarSeaman:

¿Es la hora actual restada de la hora de apertura del bar? ¿Cuenta menos de un minuto?

Tal vez se salte la iteración si la hora no está en el rango 22:59, 23:00

¿Cómo puedo escribir correctamente esta condición?

Si la hora se establece explícitamente, entonces es lo mismo que en el esquema anterior:

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

No he comprobado el código. Puede haber erratas y algunos errores. Lo principal aquí son las direcciones del pensamiento.

También debe comprobar que los valores de las horas y los minutos son correctos. Después de todo, el usuario puede introducir valores como 38 horas y 112 minutos.

 
Ihor Herasko:

Si la hora se establece explícitamente, entonces es lo mismo que lo anterior:

No he comprobado el código. Puede haber erratas y algunos errores. Lo principal aquí es la dirección del pensamiento.

También debe comprobar que los valores de las horas y los minutos son correctos. Después de todo, un usuario puede introducir valores como 38 horas y 112 minutos.

En el ojo, usuario, durante 112 minutos)

¿por qué no puede ser así?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

no aparece a la hora especificada

Habrá varias gamas cada una de las cuales se desconectará

 

las comillas pueden "dormirse" durante un minuto y se perderá la hora)

Lo correcto es hacer un temporizador, sincronizar la hora local y la actual, y en el temporizador "coger" la hora correcta

 
PolarSeaman:

En el ojo, al usuario, en 112 minutos)

¿Por qué no puedes hacerlo así?

Esta es exactamente la solución equivocada, porque estás comparando cadenas, no números. Aunque también se puede hacer algo con TimeToStr. Pero este enfoque está condenado a ser más lento que operar con números. Al fin y al cabo, las operaciones con cadenas de caracteres requieren mucho más tiempo que las operaciones aritméticas más sencillas (+, -, /, *).

Habrá varios rangos, cada uno debe ser desactivado.

Esto se hace almacenando los valores de los rangos deseados en matrices. Hay que admitir que no está claro cómo se vería esto en los parámetros de configuración: habría que hacer demasiados. Sin embargo, las soluciones existen. No es sencillo, pero están disponibles.

 
Taras Slobodyanik:

las comillas pueden "dormirse" durante un minuto y se perderá la hora)

La forma correcta es hacer un temporizador, sincronizar la hora local y la actual, y "coger" la hora correcta en el temporizador

No tienes que hacer nada a una hora determinada. Así que está bien))

 
Taras Slobodyanik:

las comillas pueden "dormirse" un minuto y perder la hora)

hacer correctamente un temporizador, sincronizar la hora local y la actual, y en el temporizador "coger" la hora correcta

¿puede insertar OnCalculate() en OnTimer()?

No sé cómo sincronizar lahora local y laactual, no lo encuentro en la ayuda.

 
Ihor Herasko:

Bueno, eso es lo que se necesita para no hacer nada en un momento dado. Así que está bien ))

¿cómo, no hacer nada? sólo este minuto tienes que comprobar y dormir durante 24 horas)