You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

补充说明

  1. 时区适配: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}*")
    
  2. 合并订单数据:如果需要同时展示未平仓和历史平仓订单,可以分别调用两个接口后合并DataFrame:
    # 合并未平仓与历史订单
    combined_df = pd.concat([df, history_df], ignore_index=True)
    

内容的提问来源于stack exchange,提问作者Emanuele Ricco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:49:57