bqb18wzv的知识库

特征工程的基础:如何获取高质量的港股 Tick 流数据?

由bqb18wzv创建,最终由bqb18wzv 被浏览 3 用户

在量化策略的研发链条中,大家往往过分关注模型(Model),而忽视了数据(Data)。但在实战中,Garbage In, Garbage Out 是铁律。对于港股这种机构主导的市场,K线图已经丢失了太多的博弈细节,只有 Tick 级数据才能还原市场的微观结构。

今天分享一下,如何在本地构建一个高可用的 Tick 数据流管道。

技术架构的思考 在高频因子的计算中,延迟是不可容忍的。因此,轮询架构直接 Pass。我们需要基于 Event-Driven(事件驱动)的 WebSocket 架构。

代码落地:极简主义 我不喜欢为了炫技而引入复杂的框架。在数据接入层,越简单越稳定。Python 原生支持配合 websocket-client 足以应对绝大多数场景。

在演示代码中,我使用了一个标准的 JSON 格式接口(以 AllTick 的 schema 为例),这种结构化的数据对于后续的清洗和特征提取非常友好。

import websocket
import json

url = "wss://api.alltick.co/realtime/hk"

def on_message(ws, message):
    data = json.loads(message)
    # 打印最新成交价和涨跌情况
    print(f"{data['symbol']} 最新价格: {data['last_price']} 涨跌: {data['change']}")

def on_open(ws):
    # 订阅恒生指数及指定股票行情
    ws.send(json.dumps({
        "action": "subscribe",
        "symbols": ["HSI", "00700.HK"]
    }))

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

从 Tick 到 Factor 获取数据只是第一步。作为宽客(Quant),你需要思考的是如何从这些流式数据中提取 Alpha。 比如,通过分析每一笔 Trade 的方向和 Volume,你可以计算实时的 VWAP(成交量加权平均价)或者资金流向。

下面是一个简单的 ETL 过程示例:

import pandas as pd

# 假设我们有一个行情列表
ticks = [
    {"time": "09:30:01", "price": 500, "volume": 100},
    {"time": "09:30:02", "price": 502, "volume": 50},
    {"time": "09:30:03", "price": 501, "volume": 80},
]

df = pd.DataFrame(ticks)
df['time'] = pd.to_datetime(df['time'])
print(df)

深度思考 当你习惯了处理 Tick 数据流,你会发现市场不再是静态的图表,而是一条奔涌的河流。每一个波动的细节,都可能蕴藏着超额收益的机会。

\

标签

特征工程
{link}