Summary: 通过一次真实的策略回测需求,详细记录MT5自定义品种的创建、数据导入和策略测试器使用方法,包含官方文档引用和实战经验。




我认识的绝大部分交易者用MT5就是打开软件,从经纪商给的品种列表里选一个,然后开始跑回测。根本没人去看市场报价里那个"自定义"的标签页。大错特错。

我自己也是吃了亏才学会这招的。几个月前有个客户发来一个策略让我帮忙优化,结果那个策略是基于一个中国股指的——他的经纪商压根不提供这个品种。没数据,没图表,测都没法测。卡住了。

后来我隐约记得在MT5帮助文件里见过"自定义金融品种"这个东西,翻出来一看,发现这玩意儿简直就是救命稻草。

自定义品种到底是什么玩意儿?



大白话讲,自定义品种就是你自己在MT5里面创建的一个金融工具。经纪商没有这个品种,是你自己定义的。你可以从外部文件导入自己的价格历史,设置交易时段,然后用它来做技术分析和策略回测。

官方MetaTrader 5帮助文档的原话是:"您可以查看这些交易品种的图表并执行技术分析,以及在策略测试中使用这些交易品种测试EA交易和指标"。这就是我当时需要的功能。

这玩意儿真正有用的地方在哪?



大部分人以为回测只能跑经纪商给的品种。但如果你的策略是基于下面这些情况呢:

  • 一个经纪商不提供的股票

  • 一个自己合成的指数数据

  • 从别的数据源拿到的更高质量的历史数据


  • 自定义品种就是为这些场景准备的。官方文档里也说了:"如果您的交易商不提供您想进行策略测试的交易品种,或者提供的历史深度和价格历史质量不足,您可以创建一个自定义交易品种并为其上传所需的数据"。说得很明白了。

    第一步:创建自定义品种



    在MT5里创建自定义品种,先打开市场报价窗口,右键随便点一下,选"交易品种"。然后在交易品种窗口里,往下翻到最下面的"自定义"标签页,点"创建自定义交易品种"。

    配置窗口里一堆选项,真正要关心的其实没几个:

  • 交易品种名称 – 必须唯一,只能用拉丁字母、点号、下划线、&符号和#号。不能有空格,不能有标点符号。我习惯加个后缀比如.cust或者.my,免得跟经纪商的品种重名。

  • 描述 – 随便写,自己认得出来就行。

  • 路径 – 在文件夹结构里的位置。我一般都放Custom\Forex\或者Custom\Indices\下面。


  • 有个小技巧——"复制自"这个字段可以直接从已有的品种复制所有设置,省的自己一个个填交易时间和保证金参数。

    第二步:导入价格数据



    这才是关键步骤。品种创建好之后,切到"柱形图"标签页(导入OHLC数据)或者"报价"标签页(导入分时数据),点"导入"。

    数据格式一定要对:

    1分钟柱形图(最常用):
    ``
    `

    分时报价
    `
    `

    官方文档里提醒了几个关键点:
  • 平台内部所有数据都以1分钟柱的形式存储——其他时间周期都是从这些柱里生成的

  • 如果导入的数据和已有历史有重叠,新数据会完全替换那个时间段的老数据

  • 同一分钟只能有一个柱,不能有重复时间戳

  • 小于等于0的值会被忽略

  • 数据必须从旧到新排序


  • 第三步:一个没人告诉你的事



    这是我差点把头发薅光才悟出来的经验。如果你要手动编辑价格历史,永远、永远先请求M1时间周期的数据。因为平台内部存的就是1分钟柱,你要是编辑了一个M5的柱,系统会在背后改掉5个1分钟柱的数据。

    编辑的时候平台会给改动加上颜色标记:
  • 绿色背景 = 修改正确的条目

  • 红色背景 = 有错误(比如最高价比最低价还低)

  • 灰色背景 = 已删除的条目

  • 黄色背景 = 新增的条目


  • 我自己经常用这个手动编辑功能来修复外部数据源里的坏数据。花几分钟修一下,回测结果能准一大截。

    第四步:在策略测试器里用自定义品种



    数据导好之后,在策略测试器里用自定义品种就跟用普通经纪商品种一样,下拉框里直接选就行。

    一开始我没想到的是——测试器会自动处理货币换算。如果你的品种利润货币是欧元,账户货币是美元,测试器会自动用EURUSD这种交叉汇率来做换算。

    但是有个坑。测试器搜索换算品种是有顺序的:
  • 先找自定义品种(比如AUDUSD.custom

  • 找不到的话,再找普通品种(比如AUDUSD


  • 这个机制其实挺好用的。比如你的经纪商报价EURUSD带了个奇怪的后缀
    EURUSD.f,测试器不认识,那你自己创建一个EURUSD自定义品种把它映射过去就解决了。

    真实案例



    上个月我接了个活,要回测一个均值回归策略,标的物是某中国股指——大部分经纪商都没有。我从一个金融数据服务商那边导出了指数历史数据,按照MT5的CSV模板格式整理了一下,以
    CN_INDEX.cust`的名字导入,然后直接跑回测。前后花了大概20分钟。

    结果出来之后发现策略表现跟预想的不太一样——如果我没做这个测试,直接推荐给客户,那就麻烦了。

    没有自定义品种这个功能的话,我要么用别的品种做代理(结果会有偏差),要么跟客户说"测不了"。两条路都走不通。

    参考来源:MetaTrader 5帮助 – 高级用户选项:自定义金融品种(metatrader5.com),MQL5.com – MQL5指南:自定义交易品种(mql5.com)。

    本文首发于FXEAR.com,原创内容,未经授权禁止转载。