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

求助:如何用Python结合Matplotlib与CCXT实现批量实时绘图

嘿,我来帮你搞定多币种实时图表的批量绘制问题!CCXT确实没有现成的一键批量绘图命令,但咱们完全可以自己封装逻辑实现,其实步骤很清晰,下面给你一步步拆解:

批量实现多币种实时图表(Matplotlib + CCXT)

核心思路

本质上就是通过循环遍历币种列表,结合CCXT的行情数据获取能力,再配合Matplotlib的动画更新机制,实现批量实时绘图。核心步骤是:

  • 初始化CCXT交易所实例(记得开启限速避免API封禁)
  • 定义需要监控的币种对列表
  • 为每个币种创建Matplotlib子图/窗口
  • 编写统一的更新函数,批量拉取数据并刷新图表

完整代码示例

下面是可直接运行的代码(以币安为例,支持批量绘制4个币种的实时收盘价曲线):

import ccxt
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import pandas as pd

# 初始化交易所(开启限速是关键,避免触发API限制)
exchange = ccxt.binance({
    'enableRateLimit': True,
})

# 自定义要监控的币种对列表,可随意增减
target_symbols = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'ADA/USDT']

# 设置Matplotlib画布布局:2列,自动计算行数
col_num = 2
row_num = (len(target_symbols) + col_num - 1) // col_num  # 向上取整适配币种数量
fig, axes = plt.subplots(row_num, col_num, figsize=(14, 10))
axes = axes.flatten()  # 把二维子图数组转成一维,方便循环遍历

# 初始化每个子图的线条对象,用于后续实时更新
line_objects = []
for ax in axes:
    line, = ax.plot([], [], color='#2ecc71', linewidth=1.5, label='Close Price')
    line_objects.append(line)
    ax.legend()
    ax.grid(True, alpha=0.3)

def update_charts(frame):
    # 遍历每个币种,更新对应子图
    for idx, symbol in enumerate(target_symbols):
        # 拉取最近60根1分钟K线(可自行调整时间框架和数据量)
        ohlcv_data = exchange.fetch_ohlcv(symbol, timeframe='1m', limit=60)
        # 转成DataFrame方便数据处理
        df = pd.DataFrame(ohlcv_data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
        
        # 更新当前子图的线条数据
        line_objects[idx].set_data(df['timestamp'], df['close'])
        # 自动适配坐标轴范围,避免图表偏移
        axes[idx].relim()
        axes[idx].autoscale_view()
        # 设置子图标题
        axes[idx].set_title(f'{symbol} Real-Time Price', fontsize=10)
    
    # 隐藏多余的空自图(如果币种数量不是行列数的整数倍)
    for empty_idx in range(len(target_symbols), len(axes)):
        axes[empty_idx].axis('off')
    
    return line_objects

# 启动动画:每5秒更新一次(可根据API限制调整间隔)
ani = FuncAnimation(fig, update_charts, interval=5000, blit=True)

plt.tight_layout()
plt.show()

关键细节注意事项

  • API限速必须开启:一定要设置enableRateLimit: True,CCXT会自动控制请求间隔,防止被交易所封禁IP
  • 自定义调整空间:
    • 可修改timeframe参数切换K线周期(比如'5m'、'1h')
    • 调整limit参数控制拉取的历史数据量
    • 修改interval参数调整图表更新频率
  • 进阶优化:如果想绘制K线图而非收盘价曲线,可以替换plot为Matplotlib的candlestick_ohlc工具(需要额外导入mplfinance或matplotlib.finance模块)
  • 多窗口模式:如果不想用子图,也可以循环创建独立的plt.figure()窗口,每个窗口对应一个币种,但窗口过多会影响操作体验,子图模式更推荐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:34