Hay que mencionar que StructToTime, TimeToStruct y especialmente TimeToString y StringToTime son operaciones bastante "caras" y en situaciones de tiempo crítico a veces se pueden sustituir por otras más sencillas.
En particular, es muy poco recomendable obtener el comienzo del día de forma directiva:
StringToTime(TimeToString(TimeCurrent(),TIME_DATE))
mejor hacer:
TimeCurrent() / 86400 * 86400
Debido a la aritmética de enteros, se descartará el resto de la división.
O, a veces es suficiente saber el tiempo transcurrido desde el comienzo del día, y el año, mes, número, día de la semana no son importantes (o se pueden obtener una vez al comienzo de un nuevo día).
En segundos: tiempo % 86400
Horas: tiempo % 86400 / 3600
Minutos: tiempo % 3600 / 60
Segundos: tiempo % 60
Al resolver el problema de asignar nombres únicos a los objetos (de tipo FLECHA) utilizamos el tiempo en segundos:
//+------------------------------------------------------------------+
int TimeInSec(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}
//+------------------------------------------------------------------+
int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}
//+------------------------------------------------------------------+
int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}
todo es mucho más simple - datetime son segundos. No necesita ser analizado a través de TimeToStruct para multiplicar y añadir los campos después
long timeIsSeconds = (long)TimeCurrent();
si su algoritmo garantiza la ausencia de dos flechas en un segundo, funcionará.
Aparentemente, para que el número sea más corto se necesitan segundos desde el principio del mes.
Aunque con casi (si no necesitas recalcular el nombre del objeto al día del mes) el mismo resultado puedes tomar el resto de dividir TimeCurrent() por un número cercano a la media de segundos del mes.
Está tomando segundos del principio del mes para hacer el número más corto.
Aunque con casi (si no necesitas recalcular el nombre del objeto al día del mes) el mismo resultado puedes tomar el resto de dividir TimeCurrent() por un número cercano a la media de segundos del mes.
y restar de una fecha otra fecha (el principio del mes) no permite alguna astuta religión ? :-)
En la práctica - si en algún lugar dentro de lo que necesita saber el comienzo exacto del mes, día, semana, se cuentan y se memorizan una vez. Para no tener que recalcularlos en cada estornudo.
datetime thisDayTime, nextDayTime;
datetime thisYearTime,thisMonTime;
int thisYear, thisMon;
// вызывать внутри всех обработчиков OnXXX терминала- это прототип службы времени
void TimeService() {
datetime now=TimeCurrent();
if (now>=nextDayTime) {
MqlDateTime dt; TimeToStruct(dt,now);
dt.hour=dt.min=dt.sec=0;
thisDayTime=StructToTime(dt);
nextDayTime=thisDayTime+24*60*60;
OnDay(); /// обработчик "начало дня"
if (dt.month!=thisMon|| dt.year!=thisYear) {
thisMon=dt.month;
dt.day=0; thisMon=StructToTime(dt);
OnMon(); /// обработчик "начало месяца"
}
if ( dt.year!=thisYear ) {
thisYear=dt.year;
dt.month=0; thisYearTime=StructToTime(dt);
OnYear(); /// обработчик "начало года"
}
}
}
Lo siento, se me acaba de ocurrir algo sobre el tema:
Фредерик Браун Конец начал Профессор Джонс долгое время работал над теорией времени. - И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром. - Время это поле. Я создал машину, которая способна управлять этим полем. Он протянул руку и, нажимая кнопку, сказал: - Это заставит время идти назад идти время заставит это - :сказал, кнопку нажимая, и руку протянул он. - Полем этим управлять способна которая, машину создал я. Поле это время, - утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и. Времени теорией над работал время долгое Джонс профессор. Начал конец Браун Фредерик
Recordé una historia de ciencia ficción soviética en la que la hija no paraba de decirle "ukponk imzhan" ante el experimento de su padre en el instituto de la época, y él no entendía sus mimos infantiles.
Y ella le salvó con eso.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Trabajamos con fechas y horas en MQL5:
Resulta esencial que los tráders y desarrolladores de herramientas comerciales comprendan cómo manejar las fechas y horas de manera adecuada y eficaz. En este artículo, veremos cómo podemos manejar fechas y horas al crear herramientas comerciales efectivas.
Nadie en el mercado financiero oculta la importancia del tiempo y cómo este puede influir en las decisiones y los resultados comerciales. MQL5 (MetaQuotes Language 5) ofrece una solución para trabajar eficazmente con la fecha y la hora. Podemos abordar este importante tema con una amplia variedad de aplicaciones que se pueden programar como parte de nuestro sistema comercial, pero primero veremos los aspectos más importantes de este tema en el lenguaje de programación MQL5.
Autor: Mohamed Abdelmaaboud