Python读取MT5实时行情的实现方法

新帖
登录发帖
Exness 推荐平台

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

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
mashuang8754
mashuang8754 楼主 1 小时前 浏览 3 回复 0 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 6 帖数 20 积分 1564 汇币 1085
1楼
昨晚调一个黄金的实时报价脚本,MT5那边日志显示连接正常,Python这边就是拿不到XAUUSD的tick,折腾到快一点才发现是品种名称后缀的问题,今天把这个过程捋一捋,给刚接触这块的朋友避避坑 😅
先说环境,我是在Windows上跑的,MT5客户端必须保持登录状态,Python装的是MetaTrader5这个官方包,直接pip install MetaTrader5就行,注意它只支持Windows,别在Mac上白费劲。装完之后第一件事是initialize(),我一开始没写这句,直接调symbol_info_tick,返回全是None,还以为包坏了。
具体流程大概是这样:

  • 先mt5.initialize(),建议把MT5安装路径传进去,多终端的时候不加路径容易连错
  • 用mt5.symbol_info("XAUUSD")确认品种存在,返回None就是名字不对
  • 调mt5.symbol_select("XAUUSD", True)把品种加到市场报价窗口,这步很多人漏掉,不加的话tick一直拿不到
  • 再mt5.symbol_info_tick("XAUUSD")取实时报价,bid和ask都在里面

踩坑最多的就是品种名。我这边经纪商的黄金是XAUUSD+带后缀的,直接写XAUUSD返回空,后来用mt5.symbols_get()把全部品种拉出来,过滤含XAU的才找到真名。另外做白银的朋友注意,有的平台是XAGUSD,有的是SILVER,一样要先查。还有个小细节,tick的time字段是服务器时间,跟本地时间差几个小时很正常,别拿它直接做时间戳对齐。
实时刷新我一开始用while循环死磕,CPU直接拉满,后来改成time.sleep(0.5)控制频率,黄金波动快的时候0.2秒也够用了。如果要做多品种监控,建议每个品种单独取tick,别一次性symbols_get全量刷,那个返回结构很大,跑久了内存涨得厉害。最后记得mt5.shutdown(),不然下次initialize可能报连接占用。
现在这套脚本我挂着跑欧美和黄金的报价推送,稳定多了。你们那边MT5的品种后缀都是什么格式的,有没有遇到tick延迟特别大的情况?
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 关于跑EA和手动交易哪个更适合我,分享一个反常识的发现