继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

还在手动刷网页看盘?带你用Python搭建实时美股数据流

慕盖茨9520025
关注TA
已关注
手记 57
粉丝 0
获赞 3

不知道大家平时在复盘或者盯盘时有没有过这样的疑惑:为什么K线上的跳空缺口,我们在实盘时却根本反应不过来?昨天夜盘,我们团队在监控美股异动时,AAPL 的价格在极短时间内拉升了数个百分点。

数据痛点:刷新率带来的滑点
我们很快发现,传统的网页端行情往往带有“视觉欺骗性”。前端页面的渲染和 HTTP 请求的开销,导致我们看到的永远是“过去式”。为了消除这种信息差,我们决定动手写一个脚本,把华尔街的数据流直接拉到本地。这不仅是为了看得更清楚,更是为了后续能自己动手做量价分析。

产品功能:通过WebSocket拥抱数据洪流
应对这种高频刷新的场景,WebSocket 协议是我们的不二之选。这次我们借用了 AllTick API 来做底层的数据源支持,它的优势在于可以维持一个长连接,只要行情有变化,服务器就会主动把价格和量能推过来。我们来看看核心的接入代码:

import websocket
import json

url = "wss://ws.alltick.co/stock"

# 定义数据接收的回调函数
def on_message(ws, message):
    data = json.loads(message)
    print(f"{data['symbol']} 最新价: {data['price']} 成交量: {data['volume']}")

# 初始化连接并完成订阅登记
def on_open(ws):
    subscribe_msg = {
        "action": "subscribe",
        "symbols": ["AAPL", "MSFT"]
    }
    ws.send(json.dumps(subscribe_msg))

ws = websocket.WebSocketApp(url, on_message=on_message, on_open=on_open)
ws.run_forever()

运行起来后,屏幕上疯狂滚动的 JSON 字符串,就是最纯粹的市场情绪。

数据整理:从无序到有序
获取到原始帧后,下一步是清洗。我们习惯把这种流式数据先缓存成表格格式,这样无论是做均线系统还是做动量指标,都非常方便。

证券代码 实时盘口 交易量 纪元时间
AAPL 174.25 1200 1678901234
MSFT 305.80 500 1678901235

在 Python 的生态中,Pandas 是处理这类结构化数据的绝对主力。我们将字典列表转化为 DataFrame:

import pandas as pd

# 构建清洗后的交易记录列表
data_list = [
    {"symbol": "AAPL", "price": 174.25, "volume": 1200, "timestamp": 1678901234},
    {"symbol": "MSFT", "price": 305.80, "volume": 500, "timestamp": 1678901235}
]

df = pd.DataFrame(data_list)
print(df)

接着,利用 Matplotlib,我们可以把干瘪的数字变成直观的曲线:

import matplotlib.pyplot as plt

# 绘制带有时间维度的价格曲线
plt.plot(df['timestamp'], df['price'], label='价格')
plt.xlabel('时间')
plt.ylabel('价格')
plt.title('股票实时价格走势')
plt.legend()
plt.show()

行业应用:建立自己的投研工作站
随着策略的深入,我们通常会把订阅列表扩展到几十只自选股。在本地构建出这样一个轻量级的实时数据库后,我们得出了一个非常实用的经验法则:在成交量密集放大的区间,价格的微观结构往往蕴含着极大的确定性。通过多标的的横向比对,我们终于告别了盲目的手动刷新,建立起了一套高效的数据观察体系。
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP