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

如何将MtApi.MqlRates类型OHLCV列表转为Pandas DataFrame并绘图?

解决MtApi.MqlRates列表转Pandas DataFrame并绘制走势的问题

我之前也踩过这个坑,MtApi的MqlRates对象确实没法直接丢给pd.DataFrame——因为它不是Pandas能直接解析的序列类型。别慌,咱们分两步轻松搞定:

第一步:把MqlRates列表转换成DataFrame

核心思路是手动提取每个对象的属性值,转成字典列表再喂给Pandas,完美避开迭代非序列的错误:

import pandas as pd

# 遍历rA,把每个MqlRates对象的属性提取成字典
rates_data = [
    {
        'MtTime': item.MtTime,
        'Open': item.Open,
        'High': item.High,
        'Low': item.Low,
        'Close': item.Close,
        'TickVolume': item.TickVolume
    }
    for item in rA
]

# 生成DataFrame
df = pd.DataFrame(rates_data)

# (可选但推荐)把MtTime转成可读的时间格式,默认是Unix时间戳,单位一般是秒
df['MtTime'] = pd.to_datetime(df['MtTime'], unit='s')

处理完可以用df.head()检查一下,确保所有OHLCV字段都正常加载了。

第二步:用Matplotlib绘制EURAUD开盘/收盘价走势

有了DataFrame之后绘图就简单了,直接用matplotlib的plot方法,顺便把时间轴调整得美观一点:

import matplotlib.pyplot as plt

# 设置清爽的绘图风格
plt.style.use('ggplot')

# 创建画布并调整尺寸
fig, ax = plt.subplots(figsize=(12, 6))

# 绘制开盘价和收盘价曲线
ax.plot(df['MtTime'], df['Open'], label='开盘价', color='steelblue', linewidth=2)
ax.plot(df['MtTime'], df['Close'], label='收盘价', color='coral', linewidth=2, linestyle='--')

# 添加图表标题和轴标签
ax.set_title('EURAUD 开盘价与收盘价走势', fontsize=16, pad=20)
ax.set_xlabel('时间', fontsize=12)
ax.set_ylabel('价格', fontsize=12)

# 添加图例,自动旋转x轴标签避免重叠
ax.legend(fontsize=12)
plt.xticks(rotation=45)

# 自动调整布局,防止标签被截断
plt.tight_layout()

# 显示图形
plt.show()

额外注意点

  • 如果你的MtTime是毫秒级时间戳,记得把pd.to_datetime的unit参数改成'ms',不然时间会显示错误。
  • 务必检查MqlRates对象的属性名拼写(比如大小写),这是最容易踩的小坑。
  • 如果需要加入成交量,只需要多添加一行ax.bar(df['MtTime'], df['TickVolume'], alpha=0.3)的代码就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:49:19