企业微信

实时行情数据源

股票实时数据主要通过行情供应商或交易所接口获取。主流方案包括:

  • 证券交易所官方行情接口(如上海/深圳证券交易所的Level-1/Level-2行情)

  • 第三方数据服务商(如Wind、聚宽、Tushare、AkShare)

  • 券商或期货公司提供的柜台接口(常带实时行情)

不同来源的数据延迟、字段完整度及费用差异显著。高频交易者倾向使用Level-2快照或逐笔成交,日线级策略则可用免费源。

WebSocket订阅实时数据

实时推送多采用WebSocket协议,可低延迟接收行情变化。以Python为例,连接行情服务后,订阅股票代码,回调处理接收到的JSON数据。

如何获取股票实时数据?


import websocket

import json

def on_message(ws, message):

    data = json.loads(message)

    # 处理字段如:code, last, bid, ask, volume, timestamp

    print(data)

def on_error(ws, error):

    print(error)

def on_close(ws):

    print("closed")

def on_open(ws):

    # 订阅多支股票

    sub = {"action": "subscribe", "symbols": "600519,000001"}

    ws.send(json.dumps(sub))

ws = websocket.WebSocketApp("wss://example.com/realquote",

                            on_open=on_open,

                            on_message=on_message,

                            on_error=on_error,

                            on_close=on_close)

ws.run_forever()

注意处理心跳包,需定期发送心跳或重连。若数据源不支持WebSocket,可轮询REST API,但延迟高,不适合盘中高频交易。

处理tick数据

tick数据是最细粒度的行情,包含每笔成交的价量及时间。获取后需清洗与聚合。关键步骤:

  • 过滤无效记录(如成交量为0)

  • 校正时间戳到统一时区

  • 按分钟或小时聚合为K线

股票期货中,tick数据常用于计算买卖压力、波动率等指标。处理时注意数据量巨大,需用高效存储如Parquet列式文件。

复权因子的实时更新

实时数据中价格常为不复权价,需结合复权因子计算前复权或后复权价格,尤其对历史回测或实际交易至关重要。复权因子基于分红、送股等事件,在除权日变化。

从数据供应商获取当日复权因子,对实时价乘以因子即可得到复权价。需在盘中定时更新因子,因为上市公司可能临时调整事件。


# 伪代码

factor_table = get_dividend_factor() # 每日更新

def adj_price(price, symbol):

    factor = factor_table.loc[symbol, "adj_factor"]

    return price * factor

数据存储与延迟控制

实时数据需快速存储以便复用。内存数据库如Redis可存储最近数据,历史数据落盘到数据库。延迟控制包括:

  • 心跳检测,断线自动重连

  • 使用异步IO处理高吞吐

  • 多路数据源冗余切换

对期货,还需结合合约到期日、换月规则等,保证数据连续性。

实时数据在策略中的应用

获取实时行情后,需与交易接口对接执行策略。常见流程:行情驱动信号生成,下单指令发送至柜台。注意交易回执处理,避免重复下单。


# 简单策略示例:价格突破N周期高点多头开仓

context.holding = None

def handle_tick(quote):

    if quote is None: return

    # 维护bar更新

    bar = update_bar(quote)

    if bar and context.holding is None and bar.close > max(bar['high'].rolling(20).max()):

        send_order(quote.code, 1, "buy")

实时数据测试与容错

测试环境使用模拟数据或回放。容错机制包括检查数据源是否正常、价格跳动是否极端、时间戳是否滞后。对异常数据需过滤或重连。

股票期货交易中,实时数据的毫秒级差异可能影响滑点,故系统需优化至低延迟,但更应确保数据连续正确。

合规性与成本考量

获取实时行情需遵守交易所数据发播协议。不经授权抓取数据可能违法。免费源通常有延迟,高频策略需付费购买机构级行情。根据自身策略需求,合理选择数据级别(快照、逐笔、订单簿)。

结合上述方法与实现,构建可靠实时数据基础,支撑量化交易决策。