用Tick数据回测MT5,为什么真实点差和滑点总对不上?

较热54.3
登录发帖
Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
打不过就跑
打不过就跑 楼主 2026-9-13 19:44:13 浏览 503 回复 2 阅读 1 分钟
Lv.4 实盘汇友 等级 Lv.4 主题 3 帖数 10 积分 1790 汇币 1463
1楼
上个月跑镑美的一个 scalp 策略,回测报告漂亮得不行,夏普 2.1,最大回撤才 6%。结果一上模拟盘跑了两周,同样的参数,盈利直接腰斩。我一开始以为是行情变了,后来把模拟盘的成交明细导出来跟回测逐笔对比,才发现问题出在点差和滑点上——回测里用的是固定 1.2 点差,实际跑的时候伦敦开盘那会儿镑美点差直接跳到 2.8,非农前后更是夸张到 5 个点这个坑我觉得值得聊聊,因为论坛里问这个的人真不少。
先说结论:MT5 自带的 Every tick 模式听起来很美好,但它默认用的是你导入的那份历史数据里的点差,而大多数经纪商导出的 tick 数据本身点差就是“事后加工”过的。我试过三种方案,各有各的问题。
第一种,直接用经纪商提供的 MT5 历史数据跑 Every tick based on real ticks。优点是省事,一键下载。缺点是很多经纪商的 tick 数据只保留最近几个月,再往前就是拿 M1 数据插值生成的,点差基本是恒定值。我拿 IC Markets 的 demo 账户试过,2023 年 3 月之前的镑美 tick 数据,点差清一色 1.4,这明显是假的——那段时间瑞信暴雷,镑美点差怎么可能稳如老狗。
第二种,从第三方买 tick 数据,比如 Tickstory 或者 Dukascopy 的免费数据,然后自己导入 MT5。这个方案精度高很多,Dukascopy 的 tick 数据是带真实买卖报价的。但坑在于:你得用脚本把 bid/ask 拆成 MT5 能识别的格式,而且导入之后还要在 MT5 里手动设置 symbols.sel 文件里的点差乘数。我一开始没改这个,回测出来的点差还是默认值,白折腾了两天。另外 Dukascopy 的数据时间戳是 GMT,你的经纪商可能是 GMT+2 或 GMT+3,时区不对齐的话,非农这种数据行情的点差峰值会对不上,回测结果自然失真。
第三种,最笨但最准的办法:用 真实账户的 tick 数据 自己录。MT5 有个 CopyTicks 函数,可以写个 EA 在实盘挂机,把每个 tick 的 bid/ask 存到 CSV 里。优点是 100% 真实,连你经纪商那边的滑点都能抓到。缺点是慢,你得等行情走完才能回测,而且数据量巨大,镑美一天大概 200 万条 tick,一个月下来 CSV 能到几个 G。我现在的做法是只录伦敦和纽约重叠的那四个小时,够用了。
滑点这块更麻烦。MT5 回测里有一个 Deviation 参数,单位是 point,默认是 0,意思是“不允许滑点”。但真实世界里,你市价单进场,经纪商给你成交的价格跟请求价差个 0.5 到 2 个点是家常便饭。我的经验是:回测时把 Deviation 设成 10 到 20,也就是 1 到 2 个点,这样出来的结果更接近实盘。但注意,这个参数只影响市价单,限价单和止损单的滑点 MT5 回测引擎是模拟不出来的——比如你挂了个 buy limit 在 1.2650,实际行情快速穿过的时候,你可能在 1.2648 才成交,甚至直接跳过不成交,这些回测里都体现不了。
还有个细节:点差在回测里是 动态变化 的,但 MT5 默认只读 tick 数据里的 ask,bid 是用 ask 减去你设置的固定点差算出来的。所以如果你导入的 tick 数据只有 bid 没有 ask,那回测里的点差就是假的。我现在的流程是:

  • 从 Dukascopy 下载带 bid/ask 的 tick 数据,用 Python 脚本转成 MT5 的 .tick 格式
  • 导入前先改 symbols.sel 里的点差设置,把 Spread 字段清零,让 MT5 强制用 tick 里的真实点差
  • 回测时 Deviation 设 15,Every tick 模式,禁用“使用固定点差”选项
  • 跑完之后把回测的成交明细导出来,跟模拟盘对比,看滑点分布是否合理

说实话,折腾完这一套,回测报告就没那么好看了。镑美那个策略的夏普从 2.1 掉到 1.3,但模拟盘跑出来的结果跟回测基本能对上。我觉得这才是回测的意义——不是为了找一条漂亮的资金曲线,而是为了提前知道策略在最坏情况下会亏多少。
你们平时回测是直接用经纪商的数据还是自己导入?有没有人试过用 Python 对接 MT5 的 CopyTicks 做实时数据录制?评论区聊聊。

补充一个小细节:不同经纪商的tick数据点差加工方式也不一样,有的直接抹平了浮动点差只留均值,所以就算都用真实tick模式,跨平台对比结果还是会有出入。
0 回复 众裁0 复制
#1
MistyMeadow
MistyMeadow #2· 2026-9-14 15:18:11
2楼
你说的symbols.sel点差乘数,具体改哪个字段啊?我导入Dukascopy数据后也发现点差没变,卡在这了😅
赞 回复 众裁0 复制
2026-9-14 15:18:11 #2
王小二
王小二 #3· 2026-9-17 10:02:25
3楼
symbols.sel里改的是spread字段,不是乘数,我当初也卡在这。我自己的Tickstory导入后得手动填每品种数值,IC的镑美才准。
赞 回复 众裁0 复制
2026-9-17 10:02:25 #3
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 挂单被扫后行情立刻反向,这个老毛病我找到了三种解法 下一帖 → 用三款主流EA跑了同一段行情,结果最稳的不是回测最漂亮的那个