当我最近开始深入测试 CopyTicksRange() 的功能时,我在处理毫秒时间时遇到了一些不利的问题:
- 实际上,我想使用 CDateTime,因为它是从 MqlTimeStruct 派生的,而且使用其中包含的递增和递减方法可以非常方便地编辑不同的时间单位。
- 同时,我需要一种方法来顺利地来回转换毫秒时间(自 1970 年 1 月 1 日以来的秒数乘以 1000,格式为 ulong)。
在这里,我遇到了一个难题:例如,毫秒数是一个非常模糊的数字,并不能说明确切的日期。但是,如果使用 CDateTime 或 TimeStruct,所有的时间单位都很容易改变,但格式会将它们割裂开来,结果也非常不清楚。为了解决这个问题,我们创建了 CDateTimeMsc 类。
#include <Tools\DateTime.mqh> struct CDateTimeMsc: public CDateTime { public: int msc; // additional variable for msc storage datetime check_datetime; // 为了便于观察,需要一点开销。 //--- CDateTimeMsc 方法 ulong MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);} void MscTime(ulong a_msc_time); // 输入(日期时间*1000) void Msc(int value); //bool IsNumInt(const int num); void MscDec(int delta = 1); void MscInc(int delta = 1); void SecTime(int a_int_time); ulong SecTime(void); void UpdateDateTime(); // 更新观测变量 check_datetime void DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();} datetime DateTime(void) {return(CDateTime::DateTime());} };
在旧结构的继承下插入了新方法。
现在,该类实际上是一个结构(请参阅结构/类),只要有精确的时间,它也可以使用毫秒。
此外,增量和减量方法也扩展到了 msc 属性。
现在,人们可能会争论附加变量 "check_datetime "是否真的有必要,因为它会造成一定的开销(对某些人来说,这一点非常重要)。不过,我认为通常使用的 CDateTime 对象并不多,只有在需要更改时间单位(如小时、分钟、秒或天)的重要位置才会使用几个。我对 UpDateTime() 方法也有一些疑虑,因为它在每次增减时都会被不必要地调用。
总之,处理因素是重点。
测试
如果想知道确切日期,就不必再使用额外的 datetime 变量来查询时间,而只需将变量 "check_datetime "置于监督之下即可:(TestEA 见上文)
毫秒时间已自动转换为日期时间格式。
由MetaQuotes Ltd译自德语
原代码: https://www.mql5.com/de/code/48156
Caculater Margin
EA Tools tính toán Margino lotsize, có thể tùy chỉnh đòn bẩy
Open Range BreakOut Indicator for MetaTrader 5
开盘区间突破(ORB)指标是一种强大的技术分析工具,可识别和跟踪交易时段开盘区间的价格突破。该指标基于这样一个概念,即交易时段最初几分钟内确立的最高价和最低价往往是当天剩余时间内的重要支撑位和阻力位。 该指标根据用户定义的时间段自动计算开盘区间,绘制多个价格目标,并为潜在的交易机会提供视觉和听觉警报。它旨在帮助交易者识别高概率的突破交易和回测情景。
