量化交易软件:交易员生存诀窍若干测试的比较报告

1. 输入参数。选则一款智能交易系统进行测试
由于我的计算机有四个内核, 我只能运行四个测试代理。因此, 并发 (或有几秒钟的小延迟), 我只能运行四个终端, 即每个代理占用一个终端。这就是为什么在输入参数中有四组可用设置的原因:

编辑切换为居中
参数:
赫兹量化r#ххх 的安装文件夹
终端 #xxx 的测试品种
终端 #xxx 的测试周期
正确的终端文件名
暂歇的毫秒数 — 从属终端之间的启动暂停
开始测试日期 (仅年, 月和日)
结束测试日期 (仅年, 月和日)
初始本金
杠杆

编辑切换为居中
在基本算法开始之前, 赫兹量化需要链接从属终端的安装文件夹和 AppData 文件夹中的数据目录。此处是一个简单的脚本 Check_TerminalPaths.mq5:
//+------------------------------------------------------------------+ //| Check_TerminalPaths.mq5 | //| 版权所有 2009, MetaQuotes 软件公司| //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes 软件公司" #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| 脚本程序开始函数 | //+------------------------------------------------------------------+ void OnStart() { //--- Print("TERMINAL_PATH = ",TerminalInfoString(TERMINAL_PATH)); Print("TERMINAL_DATA_PATH = ",TerminalInfoString(TERMINAL_DATA_PATH)); Print("TERMINAL_COMMONDATA_PATH = ",TerminalInfoString(TERMINAL_COMMONDATA_PATH)); } //+------------------------------------------------------------------+
脚本打印三个参数:
TERMINAL_PATH — 终端运行所在的文件夹
TERMINAL_DATA_PATH — 终端数据存储的文件夹
TERMINAL_COMMONDATA_PATH — 计算机上所有安装终端的公共文件夹
三个终端的示例 (它们当中之一使用 /Portable 键运行):
// 终端启动为主要模式 TERMINAL_PATH = C:\Program Files\MetaTrader 5 TERMINAL_DATA_PATH = C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075 TERMINAL_COMMONDATA_PATH = C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\Common // 终端启动为主要模式 TERMINAL_PATH = D:\MetaTrader 5 3 TERMINAL_DATA_PATH = C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\0C46DDCEB43080B0EC647E0C66170465 TERMINAL_COMMONDATA_PATH = C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\Common // 终端启动为可移动模式 TERMINAL_PATH = D:\MetaTrader 5 5 TERMINAL_DATA_PATH = D:\MetaTrader 5 5 TERMINAL_COMMONDATA_PATH = C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\Common
您可阅读我以前的一篇文章的以下段落, 了解有关终端文件夹和 AppData 中文件夹的对应关系的更多信息:
在 AppData 文件夹中绑定安装文件夹和数据目录
匹配从属终端的安装文件夹和 AppData 文件夹
秘密 #1
FindFirstFileW, FindNextFileW
使用 FindFirstFileW, FindNextFileW 的示例
终端目录内部
CopyFileW
操纵 "origin.txt" 文件
最后一程
使用系统的 "打开文件" 对话框 (GetOpenFileNameW 函数) 选择一款智能交易系统:

编辑切换为居中
有关调用打开文件对话框的细节已在我之前的文章 "交易员生存诀窍: 四遍回测优于一遍: 4.2. 利用系统 "打开文件" 对话框选择一款 EA" 中讨论。
当前版本 (文件 GetOpenFileNameW.mqh, 版本 1.003) 改变的功能在 OpenFileName 函数:
//+------------------------------------------------------------------+ //| 创建打开文件对话框 | //+------------------------------------------------------------------+ string OpenFileName(const string filter_description="可编辑代码", const string filter="\0*.mq5\0", const string title="选择源文件") { string path=NULL; if(GetOpenFileName(path,filter_description+filter,TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Experts\\",title)) return(path); else { PrintFormat("引发失败的错误: %x",kernel32::GetLastError()); return(NULL); } }
现在它设置文件搜索过滤器已变得更方便。还请注意, 现在过滤器搜索推荐 *.mq5 格式的文件 (在上一篇文章中是搜索编译的 *.ex5 文件)。
2. 再次关注 common.ini
现在是时候来描述在 'Compare multiple tests.mq5' 中的 CopyCommonIni() 函数。
从属终端通过 指定的配置文件 来启动。赫兹量化有四个从属终端, 所以我们需要创建四个 *.ini 文件: myconfiguration1.ini, myconfiguration2.ini, myconfiguration3.ini, myconfiguration4.ini。文件 myconfigurationХ.ini 是基于终端的 common.ini 文件创建, 来自我们已启动的智能交易系统。文件 common.ini 的路径:
TERMINAL_DATA_PATH\config\common.ini
创建和编辑 myconfiguration.ini 文件的算法如下所示:
拷贝 common.ini 至文件夹 TERMINAL_COMMONDATA_PATH\Files\original.ini (WinAPI CopyFileW)
在原始 original.ini 文件里, 查找段落 [Common] (MQL5 + 正则表达式)。 对于我的主终端此段落看起来像这样 (终端尚未登录 mql5 社区): [Common] Login=5116256 ProxyEnable=0 ProxyType=0 ProxyAddress= ProxyAuth= CertInstall=0 NewsEnable=0 NewsLanguages=
创建四个文件: myconfiguration1.ini, myconfiguration2.ini, myconfiguration3.ini 和 myconfiguration4.ini (MQL5)
编辑这四个文件 (拷贝 [Common] 和独立的 [Tester] 段落) (MQL5)
2.1. common.ini -> original.ini这可能是最简单的代码: 保存路径 "数据文件夹" 和 "公共数据文件夹" 至变量, 并使用 "original.ini" 的值初始化一个变量 string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH); // 数据文件夹的路径 string common_data_path=TerminalInfoString(TERMINAL_COMMONDATA_PATH);// 公共数据文件夹的路径 string original_ini="original.ini"; string arr_common[]; //--- string full_name_common_ini=terminal_data_path+"\\config\\common.ini"; // 文件 common.ini 的完整路径 string full_name_original_ini=common_data_path+"\\Files\\"+original_ini; // 文件 original.ini 的完整路径 //--- common.ini -> original.ini if(!CopyFileW(full_name_common_ini,full_name_original_ini,false)) { PrintFormat("引发失败的错误: %x",kernel32::GetLastError()); return(false); } 使用 Win API 的 CopyFileW 函数拷贝 "common.ini" 配置文件至 "original.ini"。