Skip to content

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'。