Python下单脚本连上MT5后,为什么历史K线取不到最后三根?

较热50.6
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
培训老法师
培训老法师 楼主 5 天前 浏览 386 回复 6 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 3 帖数 12 积分 2404 汇币 2076
1楼
有个事想请教一下,我这两天在写一个Python下单脚本,通过MetaTrader5这个库连MT5,前面都挺顺的,就是历史K线这里卡住了。
情况是这样的:我用 copy_rates_from_pos 去取欧美M15最近的数据,比如想拿最后100根,结果返回的数组里最后三根总是缺的,或者干脆是空的。一开始我以为是品种名称写错了,试了“EURUSD”“EURUSD.a”还有带后缀的,能连上但结果一样。后来我又换成 copy_rates_range,指定了起止时间,还是拿不到最新的三根。终端里MT5图表本身是正常刷新的,K线也在走,就是Python这边取不到末尾。
我查过一些资料,有人说要等新K线收盘,有人说要开 symbol_select 把品种加到市场报价,这两个我都试了,还是不行。也怀疑过是不是VPS时间和经纪商服务器时间差了几秒,但看日志好像没报时间错。偶尔会弹一句 “Invalid params” 或者返回 None,但大部分时候是静默少几根。
我现在有点懵,不知道是MT5那边数据还没落盘,还是我取数据的姿势不对。有没有汇友遇到过类似情况,最后三根到底该怎么稳定拿到?

更新一下:后来发现是MT5终端里欧元那个图表根本没打开,我手动点开后脚本立马就取到完整数据了,大家引以为戒。
0 回复 众裁0 复制
#1
王小二
王小二 #6· 3 天前
6楼
其实楼主更新里说的那个点很关键——MT5图表没打开就取不到数据,本质是终端还没把该品种的tick和bar推到Python端。除了开图,我更建议脚本启动时先跑一遍symbol_select加copy_rates_from_pos探测,拿不到就循环重试几次,别一次就下结论。另外那个Invalid params多半是count或时间戳越界了,可以试试用copy_rates_from_pos先取5根验证连接,再放大到103这种冗余值切前100,末尾虚位直接丢掉。VPS时钟用w32tm同步下,差个几秒也可能让range取不到最新bar。
赞 回复 众裁0 复制
3 天前 #6
小陈爱吃瓜
小陈爱吃瓜 #4· 4 天前
4楼
先检查下是不是没开新K线就取,我一般用copy_rates_from_pos多取几根再切,像取103根拿前100根,避免末尾没落盘。另外symbol_select要提前调用,VPS时钟也同步下。你返回None时日志里有没有具体错误码?
赞 回复 众裁0 复制
4 天前 #4
linlin9605
linlin9605 #3· 4 天前
3楼
MistyMeadow 说的 count 我也想问下,我设100也是少最后几根,改成103会多返回垃圾数据吗?你那边最后拿到没
赞 回复 众裁0 复制
4 天前 #3
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 推荐一个MT5回测报告里99%历史数据质量到底怎么验证的替代方案 下一帖 → 交易台上比的不是谁聪明,是谁犯错代价更小