值得一提的是,StructToTime、TimeToStruct,尤其是 TimeToString 和 StringToTime 是相当 "昂贵 "的操作,在时间紧迫的情况下,有时可以用更简单的操作来代替。
尤其不建议用指令方式获取一天的开始时间:
StringToTime(TimeToString(TimeCurrent(),TIME_DATE))
更好:
TimeCurrent() / 86400 * 86400
因为在整数运算中,除法的余数 会被丢弃。
或者,有时只需知道从一天开始的时间,而年、月、数字、星期并不重要(或者可以在新的一天开始时获得)。
秒:时间 % 86400
小时:时间 % 86400 / 3600
分钟:时间 % 3600 / 60
秒:时间 % 60
在解决为对象(箭头类型)分配唯一名称的问题时,我们使用以秒为单位的时间:
//+------------------------------------------------------------------+
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);
}
一切都简单多了--datetime 就是秒。它不需要通过 TimeToStruct 进行解析,也不需要在之后对字段进行乘法和加法运算
long timeIsSeconds = (long)TimeCurrent();
如果你的算法能保证在一秒内没有两个箭头,那么它就能工作。
从一个日期中减去另一个日期(月初)不允许某些狡猾的宗教吗?:-)
在实践中,如果您需要知道某月、某日、某周的确切开始时间,您可以计算并记忆一次。这样就不用每次打喷嚏都要重新计算了。
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(); /// обработчик "начало года"
}
}
}
对不起,我只是想到了这个问题:
Фредерик Браун Конец начал Профессор Джонс долгое время работал над теорией времени. - И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром. - Время это поле. Я создал машину, которая способна управлять этим полем. Он протянул руку и, нажимая кнопку, сказал: - Это заставит время идти назад идти время заставит это - :сказал, кнопку нажимая, и руку протянул он. - Полем этим управлять способна которая, машину создал я. Поле это время, - утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и. Времени теорией над работал время долгое Джонс профессор. Начал конец Браун Фредерик
新文章 了解如何在MQL5中处理日期和时间已发布:
这是一篇关于一个新的重要话题的新文章,这个话题是关于日期和时间的。作为交易工具的交易员或程序员,了解如何很好、有效地处理日期和时间这两个方面至关重要。因此,我将分享一些重要信息,关于我们如何处理日期和时间,以便顺利、简单地创建有效的交易工具。
金融市场领域的任何人都不会隐瞒时间的重要性,以及它如何影响交易决策和结果。MQL5(MetaQuotes Language 5)提供了一个有效处理日期和时间的惊人解决方案,这是我们将在本文中学习的内容,因为在理解了MQL5编程语言中该主题的最重要方面后,我们将看到如何通过许多可作为交易系统一部分进行编码的应用程序来处理这一重要主题。
作者:Mohamed Abdelmaaboud