A股Level1与Level2行情数据深度解析:从十档行情到逐笔成交的实战指南

1次阅读
没有评论

共计 1798 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

基础概念对比

先看两种行情的主要区别(以 2023 年沪深交易所协议为基准):

A 股 Level1 与 Level2 行情数据深度解析:从十档行情到逐笔成交的实战指南

特性 Level1(五档行情) Level2(十档行情 + 逐笔)
更新频率 3 秒 / 次快照 实时逐笔更新
买卖档位 前 5 档买卖报价 前 10 档买卖报价 +50 档委托队列
关键字段 LastPrice/Volume/Turnover BizIndex/OrderKind/OrderVolume
数据完整性 仅含快照数据 包含委托明细 + 成交明细
典型应用 行情展示 高频策略 / 订单簿分析

特别提醒:L2 的 OrderKind 字段(0- 买撤 1- 买增 2- 卖撤 3- 卖增)是分析资金流向的关键。

数据合成实战

逐笔数据转 1 分钟 K 线

核心步骤是通过 pandas 的 resample 方法聚合数据,但需特别注意:

  1. 处理乱序数据:先用 sort_values('BizIndex') 按交易所时序编号排序
  2. 过滤异常值:交易所可能推送测试数据(如 Price=0)
import pandas as pd
import numpy as np

def ticks_to_1min(ticks_df):
    # 基础清洗
    valid_ticks = ticks_df[(ticks_df['Price'] > 0) & 
        (ticks_df['Volume'] > 0)
    ].copy()

    # 按交易所时序编号排序(防乱序)valid_ticks.sort_values('BizIndex', inplace=True)

    # 聚合逻辑
    klines = valid_ticks.resample('1T', on='TradeTime').agg({'Price': ['first', 'max', 'min', 'last'],
        'Volume': 'sum',
        'Turnover': 'sum'
    })

    # 处理可能的空时间段(填充前值)return klines.ffill()

处理丢包问题

建议在合成前先检查连续性(特别是 09:25 集合竞价后的首分钟):

def check_missing(ticks_df):
    time_gaps = ticks_df['TradeTime'].diff() > pd.Timedelta('2s')
    if time_gaps.any():
        print(f'警告:发现 {time_gaps.sum()} 处数据间隔 >2 秒')
        # 可在此添加数据源切换或报警逻辑

性能优化技巧

内存管理

当处理全市场 L2 数据(约 20GB/ 日)时:

  1. 使用 dtype 优化:
  2. Price 字段设为float32(足够表示股票价格精度)
  3. Volume字段用uint32(最大可表示 42 亿股)

  4. 分块处理方案(Dask 示例):

import dask.dataframe as dd

def process_large_file(path):
    ddf = dd.read_parquet(
        path,
        columns=['Symbol', 'TradeTime', 'Price', 'Volume'],
        dtype={'Price': 'float32', 'Volume': 'uint32'}
    )

    # 按股票代码分组处理
    return ddf.groupby('Symbol').apply(
        ticks_to_1min, 
        meta={'Open': 'f8', 'High': 'f8', 'Low': 'f8', 'Close': 'f8'}
    ).compute()

常见陷阱与应对

错误场景 1:用 L1 数据回测高频策略

  • 现象:策略在 3 秒间隔内重复交易
  • 解决 :必须使用 L2 的逐笔成交数据(TradeType=0 普通成交)

错误场景 2:忽略协议版本

  • 案例 :2025 年上交所将调整OrderKind 的枚举值定义
  • 应对:动态加载交易所协议文档(每年 6 月更新)

错误场景 3:错误合成 K 线

  • 典型错误:直接用最后成交价作为收盘价(应取时间段内最后一笔)
  • 正确做法 :使用resample+last 而非groupby+last

2025 新规影响

根据已披露的《证券期货业数据规范(2025 征求意见稿》):

  1. 新增 TradeSession 字段区分集合竞价 / 连续交易时段
  2. OrderKind将扩展为 8 种状态(新增大宗交易标识)
  3. 深市 L2 数据延迟从 500ms 降至 300ms

延伸思考

验证跨交易所时序一致性的方法:

  1. 选取同一股票在沪深两市的关联交易(如 ETF 套利)
  2. 比较 BizIndex 的增长规律(各交易所独立编号)
  3. 通过 NTP 服务器时间校准交易所时钟差异

实际开发中,建议在数据接入层就添加交易所时区标记(SH/SZ 的 ExchangeTime 字段)

正文完
 0
评论(没有评论)