Appearance
MT5信息及交易指令类
前面章节介绍的函数和类方法,都是基于生产环境驱动CTP柜台做业务处理,在历史数据回测中不能使用。历史数据回测是策略研发过程中,很重要的一个环节,如果不能很好的支持,就限制了MT5CTP的使用场景。MT5CTP使用条件预编译技术,开发了MT5信息及交易指令类,解决这个问题。基于MT5CTP类库开发的EA可很好的衔接历史数据回测、仿真测试和生产部署。
MT5CTP交易指令类基于MT5CTP基础函数库开发,工作在全局命名空间,文件路径:\MQL5\Include\mt5ctp\mt5toctp.mqh。
__MT5CTP__
__MT5CTP__(前后都是双下划线)是库文件中定义的条件预编译标识,库文件结构:
MQL5
// 条件预编译,程序文件在编译前完成解析
#ifdef __MT5CTP__
// define的作用:宏定义,将代码源文件中的 'AccountInfoDouble'
// 定义为(源码替换): 'MT5::AccountInfoDouble',实现函数名的自动适配
#define AccountInfoDouble MT5::AccountInfoDouble
#define AccountInfoInteger MT5::AccountInfoInteger
#define AccountInfoString MT5::AccountInfoString
// ...
#else
// 取消宏定义
#undef AccountInfoDouble
#undef AccountInfoInteger
#undef AccountInfoString
// ...
#endif关于 | __MT5CTP__
如果程序源码文件中定义了条件预编译的标识'__MT5CTP__',源代码编译前,将文件中的'AccountInfoDouble'函数替换为'MT5::AccountInfoDouble',即将MQL函数替换为MT5CTP的基础库中MT5命名空间的同名函数,实际驱动CTP柜台来处理业务。
如果程序源码文件中未定义条件预编译的标识'__MT5CTP__',源代码编译前,取消可能存在的宏定义,使用MQL函数处理业务,可用于历史数据回测。
条件预编译的标识'__MT5CTP__'被定义为一个开关,可指示程序工作在CTP环境或者MT5环境。
关于 | #include
'#include'也是MQL的预编译指令,指示编译前将外部文件导入到源文件。
MT5CTP定义的条件预编译的标识'__MT5CTP__',可能与其他的外部文件产生冲突,导致函数替换范围的扩大,要求在导入文件的最后导入库文件'mt5toctp.mqh'。