期货量化软件:赫兹量化中的处理时间---基础
宏替代
所有一切都在(附件)包含文件 里。 在这个文件的开头有各种宏替换。 首先,不同地区有一些时间偏移,如此您就不必一次再一次地推导或搜索它们: //--- defines #define TokyoShift -32400 // always 9h #define NYShift 18000 // winter 17h=22h GMT: NYTime + NYshift = GMT #define LondonShift 0 // winter London offset #define SidneyShift -39600 // winter Sidney offset #define FfmShift -3600 // winter Frankfurt offset #define MoskwaShift -10800 // winter Moscow offset #define FxOPEN 61200 // = NY 17:00 = 17*3600 #define FxCLOSE 61200 // = NY 17:00 = 17*3600 #define WeekInSec 604800 // 60sec*60min*24h*7d = 604800 => 1 Week 为了更好地理解,我们同意 GMT 是一个不可变的时间锚点,而不同的本地时间,如纽约、伦敦或莫斯科,每一个都有不同的(可变)时移。 同样,我们也将夏季或冬季时间的变更作为变量。 原因很简单。 可变时移的符号定义如下: 可变时间 + 可变时移 = GMT 一些例子: 莫斯科 (16h) + 莫斯科时移 (-3h) = GMT (13h) 纽约时间 (16h) + 纽约时移 (+5h) = GMT (21h) 纽约时间 (16h) + (纽约时移 (+5h) + DST_US(-1h)) = GMT (20h) 法兰克福时间 (16h) + (法兰克福时移 (-1h) + DST_US(-1h)) = GMT (14h) 留心括号! 当根据 GMT 计算可变时间时,它们变得非常重要: 纽约时间 (16h) = GMT (20h) - (纽约时移 (+5h) + DST_US(-1h)) => 20 -(+5 + -1) = 20 - 5 +1 = 16h 法兰克福时间 (16h) = GMT (14h) - (法兰克福时移 (-1h) + DST_US(-1h)) => 14 -( -1 + -1) = 14 +1 +1 = 16h 相信我,这是标记错误和误解的永恒来源。 以这种形式中,MQL5 和 PC 也会处理时差,如 TimeGMTOffset(): TimeLocal() + TimeGMTOffset() = TimeGMT()) 或 TimeDaylightSavings(): TimeLocal() + TimeDaylightSavings() = 冬季或 PC 的标准本地时间。 作为本部分的最后一部分,诸如 FxOpen 和 FxClose 提供以秒为单位的整个星期的持续时间 WeekInSec,因为在为变量赋值时,这种设计比在代码中突兀加入数字(例如 604800)更容易理解。