把 MT5 历史记录整理成报表。
读取真实成交,分离入金,导出结果。
分步文字说明
- 0:00
把 MT5 历史记录整理成报表。
本教程介绍如何读取 MT5 交易历史,计算已入账的交易结果,并用 Python 导出清晰的报表。
- 0:12
以只读方式连接。
打开 mt5.mrpc.pro,选择 ConnectEx。输入模拟账户的登录号、密码和经纪商服务器。使用 TRIAL 或您的 API 密钥,可选的 id 留空。本例使用投资者密码进行只读访问。控制台会保存返回的终端 id。
- 0:37
确认账户币种。
运行 AccountSummary。这是一个美元模拟账户,余额为九万九千九百九十九美元九十六美分。展示利润和费用时,应使用账户币种。
- 0:56
选择一个已结束的时间段。
选择 DealsHistory。填写 inputFromUtc 和 inputToUtc,时间戳以 Z 结尾。对应的经纪商时间字段留空。本例从十月一日开始,到十月二十八日零时结束。读取后续页面时,保持这个时间范围不变。
- 1:22
读取所有页面。
收到 HTTP Status Code 200 后,先检查 error。本次响应没有 API 错误。pageSize 为二时,第一页只包含十三笔记录中的两笔。将 nextPageToken 复制到 pageToken,保持筛选条件不变,继续请求,直到 nextPageToken 为空。
- 1:49
订单、成交与持仓。
订单是交易指令,成交记录实际执行。AllHistoryOrders 显示订单记录。DealsHistory 中的 order 对应订单编号,positionId 则把同一持仓的成交关联起来。本例的一个持仓包含一笔零点零二手的入场,以及两笔各零点零一手的出场。
- 2:17
按返回的正负号计算。
对每笔成交,将返回的 profit、commission、swap 和 fee 直接相加,保留正负号。负数佣金不要再次扣减。这笔平仓成交盈利两美分,费用为零。开仓成交也要计入,因为经纪商可能在开仓时收取佣金。
- 2:42
将资金变动单独列出。
第一笔记录是十万美元的模拟入金,类型为 BALANCE,没有订单或持仓。它不是交易利润。本报表把 Buy 和 Sell 成交与其他类型分开。单独收取的费用、信用额和调整项,请在 other-deals 文件中查看。
- 3:06
明确报表的范围。
十三笔记录已全部取得。十二笔交易成交合计亏损四美分。本例的佣金、隔夜利息和手续费均为零,入金单独列出。这些是所选日期内已入账的金额,不是浮动盈亏。如果持仓在时间范围之前建立,较早发生的费用可能不在本报表内。
- 3:35
用 Python 导出相同数据。
配套脚本调用同一个 DealsHistory 接口,逐页读取并核对最终数量。它使用十进制运算,并按 positionId 汇总金额。请通过环境变量私下设置 API 密钥和终端 id。这个脚本不会开仓或平仓。
- 4:00
打开三个报表文件。
使用固定的 UTC 日期运行脚本。它会生成 trade-deals.csv、other-deals.csv 和 summary.json。示例导出已与本次读取的历史记录核对。如果发生 API 错误或页面不完整,脚本会停止,不会输出不完整的合计。
- 4:26
完成后断开连接。
最后,在控制台调用 Disconnect,释放终端。本次会话已经断开。现在您已读取历史,分离资金变动和交易结果,并导出了可查看和复用的报表。