MT5 Python API未平仓订单列表无法更新问题求助
问题解决方案
核心问题定位
你用错了MT5的API接口:mt5.history_orders_get() 仅返回已完成/已平仓的历史订单,而你要获取的未平仓订单需要调用 mt5.orders_get() 接口。
修正后的完整代码
import pandas as pd import MetaTrader5 as mt5 from datetime import datetime, timedelta import pytz # 初始化MT5连接 if not mt5.initialize(): print(f"MT5初始化失败,错误码: {mt5.last_error()}") mt5.shutdown() exit() ticker = "EURUSD" # 替换为你的目标交易品种 # 获取当前未平仓订单 unfilled_orders = mt5.orders_get(group=f"*{ticker}*") if unfilled_orders is None: print(f"未查询到未平仓订单,错误码: {mt5.last_error()}") else: # 转换为DataFrame格式 df = pd.DataFrame([order._asdict() for order in unfilled_orders]) # 格式化时间字段 df['time_setup'] = pd.to_datetime(df['time_setup'], unit='s') df['time_done'] = pd.to_datetime(df['time_done'], unit='s') print(df) # 关闭MT5连接 mt5.shutdown()
补充说明
- 时区适配:MT5内部时间以UTC为准,如果你需要筛选历史订单的时间范围,必须把本地时间转换为UTC后再传入
history_orders_get,示例代码:rome_tz = pytz.timezone('Europe/Rome') local_to_date = rome_tz.localize(datetime.now()) utc_to_date = local_to_date.astimezone(pytz.utc) utc_from_date = utc_to_date - timedelta(days=1) # 获取指定时间范围的历史平仓订单 history_deals = mt5.history_orders_get(utc_from_date, utc_to_date, group=f"*{ticker}*") - 合并订单数据:如果需要同时展示未平仓和历史平仓订单,可以分别调用两个接口后合并DataFrame:
# 合并未平仓与历史订单 combined_df = pd.concat([df, history_df], ignore_index=True)
内容的提问来源于stack exchange,提问作者Emanuele Ricco
相关产品推荐
相关产品推荐

