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

 
Karputov Vladimir:

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.

¿Por qué no es basura en MT4 sino que simplemente no muestra el indicador bajo esta barra?
 
Aleksey Lebedev:

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().

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));

Todo ha funcionado - ¡gracias!
 

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.

datetime today=D'2016.03.09 00:00:00';
datetime yesterday=D'2016.03.08 23:59:59';
Print("today=",86400*(today/86400)," value=",int(today));
Print("yesterday=",86400*(yesterday/86400)," value=",int(yesterday));
Print("разница в днях = ",int(today/86400-yesterday/86400));

Utilice la conversión a través de la estructura, si es más fácil de entender.

 
Aleksey Lebedev:

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.

 
-Aleks-:

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

 
Aleksey Lebedev:

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

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.
 
¡Chicos! ¿Es posible mostrar el indicador en el gráfico de forma programada? ¿O sólo a mano?
 
Vladimir Tkach:
¡Chicos! ¿Es posible mostrar el indicador en el gráfico de forma programada? ¿O sólo a mano?
Puede hacerlohttps://www.mql5.com/ru/docs/chart_operations/chartindicatoradd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
¿está en mql5 y en mql4?