很多同学在做金融数据分析的项目时,都会问我一个问题:“怎么才能像大公司的交易员那样,看到股票价格实时在跳动?”今天我们就来聊聊这个话题,带大家用Python实现一个美股Tick数据的抓取小工具。
什么是Tick数据?简单来说,就是交易所里发生的每一笔买卖。它比我们平时看的K线图要精细得多。对于想要开发即时行情软件或者交易机器人的同学来说,这是最基础的“原材料”。
为什么不推荐用普通的爬虫?如果你用 requests.get 去循环请求网页,效率太低了。这就像你每隔一秒钟就给朋友打个电话问“现在几点了”,朋友不烦你,服务器也会烦你。
正确的方法是用 WebSocket。这就好比你和服务器之间通着电话不挂断,一旦有新价格,服务器立马告诉你。
动手实操:连接数据源为了演示方便,我们这里使用 AllTick API 作为数据源,它的接口文档比较清晰,连接也比较稳定,适合练手和开发中小型项目。
首先,我们需要引入 websocket 库。来看看具体的代码怎么写:
import websocket
import json
# AllTick 实时美股 tick WebSocket 地址
WS_URL = "wss://api.alltick.co/market/ws"
def on_message(ws, message):
data = json.loads(message)
# 打印每条 tick 数据
print(f"{data['symbol']} 价格: {data['price']} 时间: {data['timestamp']}")
def on_open(ws):
# 订阅苹果股票 AAPL 的 tick 数据
subscribe_msg = {
"type": "subscribe",
"symbol": "AAPL"
}
ws.send(json.dumps(subscribe_msg))
ws = websocket.WebSocketApp(
WS_URL,
on_message=on_message,
on_open=on_open
)
ws.run_forever()运行这段代码,你就会发现控制台开始疯狂输出数据了,这就是实时的力量!
进阶:让数据“画”出来光看数字可能没感觉。我们可以结合 matplotlib 这个库,把抓取到的价格实时画成折线图。这就需要用到一个小技巧:用 deque(双向队列)来只保存最新的100条数据,旧的数据自动丢弃,这样电脑就不会卡。
from collections import deque import matplotlib.pyplot as plt tick_cache = deque(maxlen=100) # 缓存最近 100 条 tick # 假设 on_message 回调中加入 tick_cache.append(data['price']) plt.plot(list(tick_cache)) plt.pause(0.01) plt.clf()
写在最后的小建议
模块化:写代码的时候,把“连网络”和“处理数据”的代码分开写,这样条理更清楚。
别贪多:刚开始练习时,先订阅一个股票(比如 AAPL),等程序跑通了再尝试订阅多个。
学会了这一招,你的量化交易入门之路就算迈出了坚实的一步!
共同学习,写下你的评论
评论加载中...
作者其他优质文章
