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绘制实时市场数据的问题的主要内容,如果未能解决你的问题,请参考以下文章