python绘制实时市场数据的问题

Posted

技术标签:

【中文标题】python绘制实时市场数据的问题【英文标题】:Problem with python plotting live market data 【发布时间】:2021-06-24 06:46:36 【问题描述】:

我尝试以一种非常简单的方式绘制 binance marktet 实时数据。代码检索数据,但取决于我使用ws 变量声明放置代码行的位置 - 代码要么打印市场数据,但没有显示图表 - 或者 - 图表窗口显示但保持空白且没有市场打印数据。如果我关闭绘图窗口,将检索并打印市场数据 我做错了什么?

import websocket, json, pprint
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

SOCKET = "wss://stream.binance.com:9443/ws/ethusdt@kline_1m"

plt.style.use('fivethirtyeight')

x_vals = []
y_vals = []

time = 0
close = 0


def on_open(ws):
    print('opened connection')

def on_close(ws):
    print('closed connection')

def on_message(ws, message):

    json_message = json.loads(message)
    
    global time
    global close
    
    time = json_message['k']['T']
    
    pprint.pprint(json_message)

    close = json_message['k']['c']
    
  
    is_bar_closed = json_message['k']['x']
    
    if is_bar_closed:
        print("bar closed at ".format(close))


def animate(i):
    
    x_vals.append(time)
    y_vals.append(close)

    plt.cla()
    plt.plot(x_vals, y_vals)


ani = FuncAnimation(plt.gcf(), animate, interval = 200)

plt.tight_layout()
plt.show()

ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever()

【问题讨论】:

【参考方案1】:

plt.show()ws.run_forever() 都阻止程序的执行。根据之前执行的这些指令中的哪一个,代码要么绘制一个空图像(并且在您关闭绘图窗口之前停止执行),或者它开始从套接字获取数据但从未到达绘图指令。

在此示例中,为避免程序在 plt.show() 处停止,您可以按照推荐的 here 使用 plt.show(block=False)

【讨论】:

它不起作用。剧情不显示

以上是关于python绘制实时市场数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQtGraph 的一个图中绘制两个实时数据?

Matplotlib“实时”在python中绘图

使用 Python 最大化来自 Teensy 3.2 的实时绘图数据的串行通信速度

Python GUI 中的实时绘图

绘制实时传感器数据时,PyQtGraph 停止更新并冻结

Pentaho BI Server - 绘制实时数据图表