Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 532

 
-Aleks-:
Obtendremos los segundos que necesitamos para redondear - el redondeo es el problema.

duh

datetime Day00=86400*(time[n]/86400);//начало дня
y hay un redondeo al principio del día. 86400=24*60*60
 
-Aleks-:

No sé cómo utilizarlo.

El segundo valor requiere"MqlDateTime&dt_struct// estructura para tomar valores" y no entiendo cómo usar este MqlDateTime.

Hay un tiempo. La hora tiene parámetros como: año, mes, día, horas, minutos, segundos, etc. Llamando a la función TimeToStruct(), se descompone el tiempo en estos componentes. Entonces, por ejemplo, puedes poner a cero las horas, los minutos y los segundos: obtienes el comienzo del día.

MqlDateTime es un tipo de datos, al igual que int, bool, etc. Es sólo un tipo compuesto, es decir, para acceder a sus campos (horas, minutos, segundos...) hay que utilizar un punto. Por ejemplo: dt_struct.hour - valor de la hora. Más información sobre las estructuras en https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
¿Qué significa este comentario sobre el orden en el cuaderno de bitácora ya que no cambia nada

 
Aleksey Lebedev:

así

y hay un redondeo al principio del día. 86400=24*60*60
De acuerdo con su fórmula obtenemos el número de días entre la barra actual y la remota, pero estos días son condicionales, podría ser las 9 de este día y 1 hora el día anterior, entonces la diferencia en segundos es 122400 , que es 1,42 días - cuando se redondea a 1 día, y la necesidad de ser 2.
 
Alexey Kozitsyn:

Hay tiempo. La hora tiene parámetros como: año, mes, día, horas, minutos, segundos, etc. Llamando a la función TimeToStruct(), se descompone el tiempo en estos componentes. Entonces, por ejemplo, puedes poner a cero las horas, los minutos y los segundos: obtienes el comienzo del día.

MqlDateTime es un tipo de datos, al igual que int, bool, etc. Es sólo un tipo compuesto, es decir, para acceder a sus campos (horas, minutos, segundos...) es necesario utilizar un punto. Por ejemplo: dt_struct.hour - valor de la hora. Más información sobre las estructuras en https://www.mql5.com/ru/docs/basis/types/classes.

¿Y cómo, lo siento, realizar esta puesta a cero?
 
-Aleks-:
Según tu fórmula obtenemos el número de días que hay entre la barra actual y la remota, pero estos días son condicionales, es decir, pueden ser las 9 horas del día actual y 1 hora del día anterior. Entonces la diferencia en segundos será de 122400, lo que equivale a 1,42 días - al redondear a 1 día, y la necesidad de tener 2.

un día perdido, 23h+24h+9h=2 días 8h... No necesito esta fórmula si la necesito:

Necesito calcular en cada gráfico del marco temporal actual. Para el cálculo necesito saber la fecha del plazo superior (días). Arriba he adjuntado el código - el punto es saber en cada barra el precio máximo del TF superior en el momento de la apertura de la barra en el marco de tiempo actual.

Otra vez:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



Y tú dices estructura... :)

 
Aleksey Lebedev:

un día perdido, 23h+24h+9h=2 días 8h... No necesitas esta fórmula si la necesitas:

Otra vez:



Y tú dices estructura... :)

Por qué tienes 23 horas - escribí 1 hora, pero el punto no cambia.

24 (el día anterior - una hora de ayer)+24 (ayer - una hora de hoy)+8 (después de una hora de hoy - menos una hora)=56/24=2,33, así que hizo dos días, ¿no te parece?

 
-Aleks-:

Por qué tienes 23 horas - escribí 1 hora, pero la esencia no cambia

24 (anteayer - a la hora de ayer)+24 (ayer - a la hora de hoy)+8 (después de una hora de hoy - menos una hora) =56/24 = 2,33 es decir, son dos días, ¿no te parece?

23h antes de ayer +

24h ayer +

9h hoy=

2 días 8h=2,(33)días

Esa es la forma correcta de hacerlo:

int DayN=time[0]/86400-time[163]/86400;

No importa, no es necesario)
 
Aleksey Lebedev:

23h antes de ayer+

24h ayer+

9h hoy=

2 días 8h=2,(33)días

La forma correcta es algo así:

No importa, no es necesario)

Ahora imaginemos que no son las 9h de este día sino las 19

24(antes de ayer +24(ayer - 1h hoy)+18(después de 1h hoy - menos 1h)=66/24=2,75 es decir, hace tres días, ¿estás de acuerdo?

Como si el rango no ha cambiado diariamente, y el cálculo durante el día da entonces 2, luego 3 días - en este el problema.

La variante

 int DayN=time[0]/86400-time[163]/86400;

Tampoco es bueno, si suponemos que la barra actual es de 1 hora y la calculada es de 23 horas, en este caso el resultado del cálculo será cero, mientras que debería ser 1.
 
-Aleks-:
Esto tampoco funciona si suponemos que la barra actual es de 1 hora y la barra estimada es de 23 horas, en cuyo caso el resultado del cálculo es cero, mientras que debería ser 1.

Será 1, ambos tiempos se redondean primero a un día entero y luego se restan.

Razón de la queja: