很多想学量化交易的同学,一上来就被复杂的数学模型和枯燥的 API 文档劝退了。其实,量化最有趣的地方在于——你可以用代码重新定义你观察世界的方式。
今天我们不讲枯燥的理论,来做一个好玩且实用的小项目:用 Python 给以太坊(ETH)画一张实时的“心电图”。看着价格在屏幕上实时跳动,那种掌控感是非常棒的。
我们需要准备什么?
Python 环境(Anaconda 或原生都可以)。
绘图库:
matplotlib,Python 数据可视化的神器。数据源:我们需要一个能实时“说话”的接口,而不是需要我们不停去问(轮询)的接口。这里我们用 WebSocket 协议,配合 AllTick 的数据服务,它的格式非常适合新手练手,没有复杂的鉴权坑。
步骤解析
第一步:建立连接我们像打电话一样,拨通交易所的数据线路。
第二步:收集数据电话接通后,对方会不断报价格。我们需要拿个小本子(List)把这些数字记下来,太旧的数字就扔掉。
第三步:画出来指挥电脑每秒钟根据本子上的数字重新画一次线。
完整代码实现复制下面的代码,直接运行,你就能拥有一个属于自己的行情终端:
import websocket
import json
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from datetime import datetime
# 用于存储时间和价格
times, prices = [], []
# WebSocket 消息回调
def on_message(ws, message):
data = json.loads(message)
price = float(data['price'])
timestamp = datetime.fromtimestamp(data['timestamp'])
times.append(timestamp)
prices.append(price)
# 保留最近 50 条数据
if len(times) > 50:
times.pop(0)
prices.pop(0)
def on_open(ws):
subscribe_msg = {
"type": "subscribe",
"symbol": "ETHUSD"
}
ws.send(json.dumps(subscribe_msg))
# 动态绘图函数
def animate(i):
plt.cla()
plt.plot(times, prices, color='orange', marker='o')
plt.title("ETH 实时走势图")
plt.xlabel("时间")
plt.ylabel("价格(USD)")
plt.xticks(rotation=45)
plt.tight_layout()
# WebSocket 地址示例(AllTick API)
ws_url = "wss://ws.alltick.co/realtime"
ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_open=on_open)
# 用线程运行 WebSocket
from threading import Thread
Thread(target=ws.run_forever, daemon=True).start()
# 实时刷新可视化
plt.show()学习要点
注意
times.pop(0)这一行,这就是“滑动窗口”的概念,保证我们的内存不会爆掉。尝试修改
ws_url中的代码,你也可以获取 BTC 或者其他资产的行情。
编程是为了解决问题,也是为了发现乐趣。希望这个小 demo 能打开你量化之路的大门。

随时随地看视频