La situación es la siguiente: si hay una barra en el gráfico, corresponde a una celda en el buffer del indicador. Mientras no escribas algo en esta celda, almacenará basura.
¿Por qué no es basura en MT4 sino que simplemente no muestra el indicador bajo esta barra?
Cuando se dividen enteros (int, long, datetime, etc.) el resultado es un entero, es decir, se descarta el resto. 00:00 de hoy y 23:59:59 de ayer, la diferencia será de 1 día.
En primer lugar, no lo es: se ha demostrado experimentalmente en el indicador.
En segundo lugar, cómo se obtiene un 1 - demuéstramelo matemáticamente, dado que originalmente estamos calculando en segundos.
Alexey Kozitsyn: Exactamente igual que la puesta a cero de los tipos simples. Asignándoles un valor de 0. Una vez que se ha asignado a los campos requeridos un valor de 0 - utilice la operación inversa StructToTime().
Aleksey Lebedev: При делении целых чисел(int,long,datetime и т.п.) результат целое число, т.е. остаток отбрасывается. 00:00 сегодня и 23:59:59 вчера, разность будет равна 1дню.
-Aleks-:
En primer lugar no está - demostrado experimentalmente en el indicador.
No discutas lo básico).
-Aleks-:
En segundo lugar cómo se obtiene el 1 - muéstrame matemáticamente, dado que inicialmente tenemos el cálculo en segundos.
Utilice la conversión de estructuras si es más fácil de entender.
Lo que se entiende es lo que se ha tratado. No he probado tu código para ejecutarlo, pero creo que lo has hecho tú mismo, así que explícame sin ser inteligente cómo funciona:
86401/86400-86400/86400 es igual a 1, si por las reglas de las matemáticas 1,000012-1=0,000012 , mientras que int debería redondear a un número entero, es decir, 0.
Lo que se entiende es lo que se ha tratado. No he probado a ejecutar tu código, pero creo que lo has hecho tú mismo, así que explícame sin complejos cómo funciona:
86401/86400/86400 es igual a 1, si según las reglas de las matemáticas 1,000012-1=0,000012 , e int debe redondear a entero, es decir, 0.
pero hazlo)
El inicio del día 00:00:00 se divide entre 86400 sin resto, el anterior es al menos 1 segundo menos. Redondeo: se descarta el resto de la división, no la expresión completa.
El inicio del día 00:00:00 se divide por 86400 sin un resto, siendo el anterior al menos 1 segundo menos. Redondeo: se descarta el resto de la división, no la expresión completa.
86400/86400=1
86399/86400=0
por lo que me sorprende que el peculiar redondeo se produzca dentro de una expresión - pensé que era cuando se asignaba un valor a una variable que se descartaba el valor después del punto decimal.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hay que especificar eso de inmediato :) .
La situación es la siguiente: si hay una barra en el gráfico, corresponde a una celda en el buffer del indicador. Mientras no escribas algo en esta celda, almacenará basura.
Cuando se dividen enteros (int, long, datetime, etc.) el resultado es un entero, es decir, se descarta el resto. 00:00 de hoy y 23:59:59 de ayer, la diferencia será de 1 día.
En primer lugar, no lo es: se ha demostrado experimentalmente en el indicador.
En segundo lugar, cómo se obtiene un 1 - demuéstramelo matemáticamente, dado que originalmente estamos calculando en segundos.
Exactamente igual que la puesta a cero de los tipos simples. Asignándoles un valor de 0. Una vez que se ha asignado a los campos requeridos un valor de 0 - utilice la operación inversa StructToTime().
En cero:
MqlDateTime str1;
datetime Open_timePos=iTime(_Symbol,0,pos);
TimeToStruct(Open_timePos,str1);
str1.hour=0;
str1.min=0;
str1.sec=0;
datetime start_time=StructToTime(str1);
Print("день=",TimeToStr(start_time));
Aleksey Lebedev:
При делении целых чисел(int,long,datetime и т.п.) результат целое число, т.е. остаток отбрасывается. 00:00 сегодня и 23:59:59 вчера, разность будет равна 1дню.
-Aleks-:
En primer lugar no está - demostrado experimentalmente en el indicador.
No discutas lo básico).
-Aleks-:
En segundo lugar cómo se obtiene el 1 - muéstrame matemáticamente, dado que inicialmente tenemos el cálculo en segundos.
Utilice la conversión a través de la estructura, si es más fácil de entender.
No desafíes lo básico)
Utilice la conversión de estructuras si es más fácil de entender.
Lo que se entiende es lo que se ha tratado. No he probado tu código para ejecutarlo, pero creo que lo has hecho tú mismo, así que explícame sin ser inteligente cómo funciona:
86401/86400-86400/86400 es igual a 1, si por las reglas de las matemáticas 1,000012-1=0,000012 , mientras que int debería redondear a un número entero, es decir, 0.
Lo que se entiende es lo que se ha tratado. No he probado a ejecutar tu código, pero creo que lo has hecho tú mismo, así que explícame sin complejos cómo funciona:
86401/86400/86400 es igual a 1, si según las reglas de las matemáticas 1,000012-1=0,000012 , e int debe redondear a entero, es decir, 0.
pero hazlo)
El inicio del día 00:00:00 se divide entre 86400 sin resto, el anterior es al menos 1 segundo menos. Redondeo: se descarta el resto de la división, no la expresión completa.
86400/86400=1
86399/86400=0
y luego ejecutarlo)
El inicio del día 00:00:00 se divide por 86400 sin un resto, siendo el anterior al menos 1 segundo menos. Redondeo: se descarta el resto de la división, no la expresión completa.
86400/86400=1
86399/86400=0
¡Chicos! ¿Es posible mostrar el indicador en el gráfico de forma programada? ¿O sólo a mano?