【点差对账单 SpreadLedger】点差到底吃掉你多少钱?事后核算、逐笔可查(MT5源码免费)

| 发表于 2 小时前 | 显示全部楼层 |复制链接
最后由 pw4654918 于 2026-9-30 21:26 编辑

前几天我发帖问过 MT5 回测里点差该怎么设。研究的时候发现一个麻烦事:CopyTicks 在策略测试器里直接失败(返回 -1,错误码 4004/4014),也就是说任何依赖 tick 级点差的工具都没法在回测里自证。于是换了个思路,用 MqlRates.spread(经纪商自己存在终端里的逐分钟点差记录)做了这个工具,免费开源,分享给大家。

社区里的点差工具几乎全是实时显示器:你看的时候它在跳,关掉窗口什么都不剩,回答的是「现在点差多少」。这个工具回答另外两个问题,而且是事后回答:
1. 我这一段时间,点差一共花掉了我多少钱?(账户货币,逐笔可查)
2. 这些成本集中在哪几个小时、星期几、哪个品种?
它不做仪表盘,它做对账单。

【功能一:点差时钟】
按服务器小时 × 星期统计历史真实点差的 最小/中位/均值/p90/p99/最大,直方图直接打在专家日志里,同时输出 CSV。数据来源只有一个:经纪商服务器发来的原始记录,不是估算、不是拟合。

实测样例(VantageMarkets-Demo,EURUSD,最近60天,60351 个样本):
点差(点):最小13  中位13.0  均值14.72  p90 13.0  p99 65.0  最大122
00:00 时段均值 52.7(4 倍于基线);取值分布显示 94.14% 的时间点差就是 13 点,但剩下那 5.86% 把均值拉高了 13%。
这正是「回测好看实盘不行」的常见来源之一:策略如果习惯在 00:00 前后开仓,付的点差是白天的 4 倍。

log_screenshot.png
(专家日志实拍:EURUSD 点差时钟,00:00 的尖峰清晰可见)

【功能二:成本对账】
从账户历史逐笔读取已平仓交易,用开仓/平仓时刻的真实 M1 点差折算成账户货币:
单笔双边点差成本 = 开仓成本 + 平仓成本(点差(点) × 每点价值 × 手数)
输出:逐笔明细 CSV + 按品种汇总 + 按开仓小时汇总。

真实验证输出(测试器内 3 笔往返交易,可用来自证工具确实在算):
已平仓交易 3 笔,其中匹配到点差 3 笔 (100.0%)
交易净利 -38.30 USD | 点差成本 1.44 USD | 佣金 -0.18 USD | 点差/净利 3.8%
(点差成本小是因为测试品种点差只有 12 点、手数 0.01–0.03;真实账户的绝对金额取决于你的品种和手数。)

csv_screenshot.png
(生成的逐笔对账 CSV,Excel 直接打开、中文不乱码)

【使用方法】
1. 把 SpreadLedger.mq5 放到 MQL5\Experts\,MetaEditor 按 F7 编译(应显示 0 errors, 0 warnings)
2. 挂到任意图表上;分析哪个品种由参数 InpSymbols 决定,留空 = 当前图表品种
3. 不需要打开「允许算法交易」——本工具不下任何单
4. 结果在两个地方:专家日志(完整报告)+ 终端菜单 文件→打开数据文件夹→MQL5\Files\ 下的 CSV
5. CSV 是 UTF-8 带 BOM,Excel/WPS 双击直接打开,中文不乱码

【已知限制】(这一节写全是攒信誉的地方,不是免责声明)
1. 点差用的是 M1 K线开盘时刻的记录值,不是成交那一微秒的值;真实成交瞬间点差可能更宽(尤其数据发布时),所以结果应理解为下界估计。
2. 不做滑点归因。点差是买卖价之差,滑点是成交价与请求价之差,两回事,本工具只算点差。
3. 佣金、隔夜利息不计入点差成本,程序会把它们单独列出来,方便你自己加总。
4. 如果经纪商不往历史里写点差(部分白标会全填 0),点差时钟会显示 0,此时结果无意义——程序会明确警告。
5. 成本折算用的是当前汇率,历史交易发生时的汇率可能不同,对非美元账户会带来几个百分点的误差。
6. 只统计已平仓的交易,持仓中的单子不计入。
7. 测试器里没有真实账户历史,所以对账区在回测中会是空的——这是正常的;点差时钟在测试器里工作正常。
8. M1 回溯上限约 347 天(样本上限 50 万),设超过会自动收敛并明确提示;要覆盖更长区间请把 InpClockTF 调大(5/15 分钟)。

【技术说明】
- 只用一个数据源 MqlRates.spread,不联网、不读 tick、不引用外部文件。
- 点差单位:点差 = 价格差 / SYMBOL_TRADE_TICK_SIZE;SYMBOL_POINT / TICK_SIZE / TICK_VALUE / CONTRACT_SIZE 和推导出的「每手每点价值」都会写进 CSV,任何人可以复核。
- 每点价值 = TICK_VALUE / TICK_SIZE × POINT,逐品种实时读取,不写死。
- 成本算术已用独立实现(Python 从测试器订单日志重新推导)交叉验证,逐笔与合计误差 < 1e-12。

免费、开源、无 DLL、不下单、单文件。它给的是下界,真实成本只会更高。欢迎试用,有问题在楼下留言,我会回复。

filetype SpreadLedger.mq5 (47.83 KB, 下载次数: 0)
最近访问 头像模式
举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册