为了账号安全,请及时绑定邮箱和手机立即绑定

一次搞懂:用 Python + WebSocket 订阅美股实时 tick 数据

标签:
API

场景:我想知道自己关注的美股到底在“动”什么

作为一个经常折腾量化策略的金融数据分析师,我手头有好几个美股组合。过去我习惯收盘后用历史数据跑回测,但最近总感觉不踏实——静态的 K 线看不出盘中情绪,我想亲眼看到市场每一笔跳动。于是我决定自己动手搭一套实时 tick 抓取工具,让热门股票的每一笔成交都能推送到我的屏幕上。

原有方案的尴尬

一开始我走的是最“正统”的路子:用 REST API 定期轮询。想法很朴素,每 2 秒拿一次报价,理论上也不错。可一到开盘,流量一大,服务端就开始限频,返回一堆 429 错误。更要命的是,轮询间隔里丢失的成交,很可能是大资金进出的关键时刻。这不,研究方向的瓶颈就卡在数据上。

WebSocket 是什么,为什么适合行情推送

带着这个痛点,我开始了解 WebSocket。它和 HTTP 不同,建立连接后服务端可以主动向客户端推送消息,不需要客户端一遍遍去问“有新数据吗?”这正好满足行情数据的要求:低延迟、实时推送、节省带宽。于是我找到了一个支持 WebSocket 的实时行情 API——ALLTICK API,它的接口设计很直观,订阅、推送、心跳都有清晰的约定,特别适合拿来练手。

动手写一个订阅器

我的目标很简单:同时盯住 AAPL、TSLA、AMZN 三只热门股,打印它们的成交价和成交量。下面是我最初的练习代码:

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    # 打印每笔成交的价格和成交量
    print(f"{data['symbol']} 价格: {data['price']} 成交量: {data['volume']}")

def on_open(ws):
    # 订阅热门股票
    symbols = ["AAPL", "TSLA", "AMZN"]
    for symbol in symbols:
        ws.send(json.dumps({
            "action": "subscribe",
            "symbol": symbol
        }))

ws = websocket.WebSocketApp("wss://apis.alltick.co/ws/stock-tick",
                            on_message=on_message,
                            on_open=on_open)
ws.run_forever()

运行这个脚本,瞬间就看到了三只股票的逐笔成交刷刷地往外冒。那种实时性让我一下子就兴奋起来——市场的呼吸节奏就在这些数字里。

把数据存起来,玩点有意思的

仅仅打印不够,我得把数据留下。我把 tick 记录写进 SQLite,加上时间戳,之后就可以做各种统计:比如开盘半小时哪只股票成交量放大最猛,或者大单出现的频率。相比看日线,这种微观层面的观察更能捕捉到市场的“小动作”。

稳定运行的小贴士

  • 保持心跳:WebSocket 连接会断,写一个 ping/pong 检测,断了就自动重连。
  • 去重处理:有的接口偶尔会推送重复数据,用 trade_id 判断一下就好。
  • 异步改造:用 asyncio 把收数据和存数据分开,效率更高。

我的收获

从对着轮询 API 发愁,到自己轻松接收实时 tick 流,最大的感受是:掌握实时行情数据管道并不神秘。只要有基本的 Python 知识和愿意尝试的心态,你也能搭建属于自己的美股行情观察工具。动手试一试,你会看到市场不一样的一面。
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消