量化策略必备:港股WebSocket成交流中自动对盘与碎股的

用户头像sh_****559rtx
2026-06-18 发布

做港股量化,信噪比是决定策略成败的关键之一。我在构建实盘信号系统时,发现直接从WebSocket接入的原始成交数据里,混入了大量的非主动交易,如果不加甄别,因子计算和回测结果都会严重偏离。这里我就结合自己的实战经验,聊聊如何利用成交元数据,把自动对盘和碎股从真实成交中剥离出来。

量化场景下的痛点 量化模型对数据的纯净度要求很高。比如计算主动买入量、资金流向指标时,如果掺入了系统撮合产生的自动对盘,就会虚增交易活跃度,导致假信号。而碎股因为是零散交易,不反映主流资金意图,同样属于噪声。最直接的问题是:数据源通常不会直接给这些成交打上醒目的“噪声”标签,需要我们构建一套自动标记逻辑。手动处理不仅慢,而且无法应用于实盘级别的毫秒级决策。

关键判别字段 从WebSocket推送看,一笔成交记录核心字段如下:

字段 含义
time 成交时间
price 成交价格
volume 成交量
trade_type 类型标识(常不可靠)
match_id 撮合编号(若有)

实践中我提炼了三条量化规则:

  • 成交量规则:港股整手多为100股,volume模100非零或小于整手的,判定为碎股。
  • 时间密集规则:对同一标的,如果在极短的时间窗口内出现多笔整手成交,且买卖方向高度对称,那大概率是系统自动对盘。
  • 对手方规则:部分API会暴露买卖经纪商或账号信息。如果买方和卖方同时指向系统专用代码(例如“SYS”),直接归类为自动对盘。

实盘处理逻辑 我使用AllTick等提供的港股WebSocket数据,通过在线方式实现实时打标签。每笔成交推送到达时,立即按上述规则分类,并写入带有标签的时序队列,供下游因子计算和信号生成模块使用。代码示例如下:

from websocket import create_connection
import json

# 这里填你的 AllTick API Token
API_TOKEN = '你的API_TOKEN'
ws_url = f"wss://ws.alltick.co/stock?token={API_TOKEN}"

ws = create_connection(ws_url)

# 订阅港股 00700.HK 的成交数据
subscribe_msg = {
    "action": "subscribe",
    "symbol": "00700.HK",
    "type": "transaction"
}
ws.send(json.dumps(subscribe_msg))

def check_auto_match(tick):
    # 假设系统自动对盘的成交方为 "SYS"
    return tick.get('buyer') == 'SYS' and tick.get('seller') == 'SYS'

while True:
    data = ws.recv()
    tick = json.loads(data)
  
    volume = tick.get('volume', 0)
  
    if volume < 100:
        tick['tag'] = '碎股'
    elif check_auto_match(tick):
        tick['tag'] = '自动对盘'
    else:
        tick['tag'] = '普通成交'
  
    print(tick['time'], tick['price'], tick['volume'], tick['tag'])

这个简单的处理逻辑,能让我在实盘中持续输出带标签的成交流,为后续策略提供高质量输入。

对分析工作的提升 有了清晰标签后,我的量化框架只用“普通成交”计算资金流向、量比和主动买卖差等指标,回测的夏普比率明显更稳健。同时,我能监测到自动对盘发生的频率,一旦系统对盘异常增多,可能预示市场深度不足,可作为风控因子之一。碎股的独立统计则帮助我评估零散投资者的行为,进一步丰富多因子体系。总之,从源头把数据洗干净,量化之路会顺畅很多。

b3ff239c2c771016f9ef7af6bea96e2f.jpg

评论