gpt4 book ai didi

algorithmic-trading - 如何在 MQL4 中计算(添加)日期时间值?

转载 作者:行者123 更新时间:2023-12-05 01:01:51 29 4
gpt4 key购买 nike

使用 MQL4,我在处理 datetime 时遇到了麻烦。

我要做的是按月或按年将 datetime 放入数组中。

目前我是这样做的。

datetime myDate;

myDate[0] = D'2010.01.01 00:00';
myDate[1] = D'2010.02.01 00:00';
myDate[2] = D'2010.03.01 00:00';
myDate[3] = D'2010.04.01 00:00';
.
.

但是我想在下面这样做

myDate[0] = D'2010.01.01 00:00';
for (int i = 1;i < 6 ;i+=){
myDate[i] = myDate[i - 1] + 1year;
}

如果是月份,

myDate[0] = D'2010.01.01 00:00';
for (int i = 1; i < 12 ; i++){
myDate[i] = myDate[i - 1] + 1month
}

问:如何计算添加 1month1year

最佳答案

MQL4 文档声明 datetime 类型在内部表示为自商定时间尺度数据(即 1970-01-01 00:00)。

这就是说(并稍微修饰一下语法合规性)
代码
可以读

oneYear = 60 * 60 * 24 * 365;   // yes, astronomers would kill me
// for not solving those seconds,
// that sum up until a leap year
// consumes 'em on Feb-29th day :o)

另一种选择
从而操纵
datetime 更多
舒适的方式,解决问题
datetime 的自然组件是 hacky,但值得:字符串到时间

string TimeToString( datetime aDatetimeVALUE,
int aModeOfDISPLAY = TIME_DATE|TIME_MINUTES
)

Converting a value containing time in seconds elapsed since 01.01.1970 into a string of "yyyy.mm.dd hh:mi" format.

在这里,可以简单地将 +1 添加到此中间格式的适当位置(无需处理 struct MqlDateTime 中存在的所有派生和影响值,其中 day_of_weekday_of_year 绝对不是我最喜欢在移动 +1 个月等后重新计算的。

aCurrentYEAR  = int(  StringSubstr( aDatetimeSTRING, 0, 4 ) );
aCurrentMONTH = int( StringSubstr( aDatetimeSTRING, 5, 2 ) );
aCurrentDAY = int( StringSubstr( aDatetimeSTRING, 8, 2 ) );

aNextYEAR = aCurrentYEAR + 1;
aNextMONTH = aCurrentMONTH + 1;

终于

StringFormat( "%04d.%02d.%02d 00:00", aYearNUMBER, aMonthNUMBER, aDayNUMBER )

将重新组装以调用另一个 MQL4 标准函数:

datetime StringToTime(string aDatetimeSTRING)

The function converts a string containing time or date in "yyyy.mm.dd [hh:mi]" format into datetime type.

另一种方法可以使用完全分解的 datetime 算法

int aYE  = TimeYear(      aDatetimeVALUE );
int aMO = TimeMonth( aDatetimeVALUE );
int aDA = TimeDay( aDatetimeVALUE );
int aHO = TimeHour( aDatetimeVALUE );
int aMI = TimeMinute( aDatetimeVALUE );
int aDoW = TimeDayOfWeek( aDatetimeVALUE );
int aDoY = TimeDayOfYear( aDatetimeVALUE );

datetime aSameTimeNextYEAR = StructToTime( (MqlDateTime) { aYE + 1,
aMO,
aDA,
aHO,
aMI,
aDoW,
aDoY
}
);

关于algorithmic-trading - 如何在 MQL4 中计算(添加)日期时间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556837/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com