想要使用Level2数据首先要定义逐笔成交、逐笔委托的数据结构,官方文档是这样定义的:
import ctypes
class TDF_MARKET_DATA3(ctypes.Structure):
_fields_ = [
("自然日", ctypes.c_int), # 业务发生日(自然日)
("交易日", ctypes.c_int), # 交易日
("时间", ctypes.c_int), # 时间(HHMMSSmmm)
("状态", ctypes.c_int), # 状态
("前收盘价", ctypes.c_int64), # 前收盘价
("开盘价", ctypes.c_int64), # 开盘价
("最高价", ctypes.c_int64), # 最高价
("最低价", ctypes.c_int64), # 最低价
("最新价", ctypes.c_int64), # 最新价
("申卖价", ctypes.c_int64 * 10), # 申卖价
("申卖量", ctypes.c_int64 * 10), # 申卖量
("申买价", ctypes.c_int64 * 10), # 申买价
("申买量", ctypes.c_int64 * 10), # 申买量
("成交笔数", ctypes.c_int), # 成交笔数
("成交总量", ctypes.c_int64), # 成交总量
("成交总金额", ctypes.c_int64), # 成交总金额
("委托买入总量", ctypes.c_int64), # 委托买入总量
("委托卖出总量", ctypes.c_int64), # 委托卖出总量
("加权平均委买价格", ctypes.c_int64), # 加权平均委买价格
("加权平均委卖价格", ctypes.c_int64), # 加权平均委卖价格
("IOPV净值估值", ctypes.c_int), # IOPV净值估值
("到期收益率", ctypes.c_int), # 到期收益率
("涨停价", ctypes.c_int64), # 涨停价
("跌停价", ctypes.c_int64), # 跌停价
("证券信息前缀", ctypes.c_char * 4), # 证券信息前缀
("市盈率1", ctypes.c_int), # 市盈率1
("市盈率2", ctypes.c_int), # 市盈率2
("升跌2", ctypes.c_int), # 升跌2(对比上一笔)
]
class TDF_TRANSACTION3(ctypes.Structure):
_fields_ = [
("日期", ctypes.c_int), # 成交日期
("时间", ctypes.c_int), # 成交时间(HHMMSSmmm)
("编号", ctypes.c_int), # 成交编号
("价格", ctypes.c_int64), # 成交价格
("数量", ctypes.c_int), # 成交数量
("金额", ctypes.c_int64), # 成交金额
("方向", ctypes.c_char*4), # 买卖方向(买:'B', 卖:'S', 撤:' ')
("类别", ctypes.c_int8), # 成交类别(全部为0, 需要委托序号识别撤单方向)
("代码", ctypes.c_int8), # 成交代码
("卖方序号", ctypes.c_int), # 卖方委托序号
("买方序号", ctypes.c_int), # 买方委托序号
]
class TDF_ORDER3(ctypes.Structure):
_fields_ = [
("日期", ctypes.c_int), # 委托日期(YYMMDD)
("时间", ctypes.c_int), # 委托时间(HHMMSSmmm)
("编号", ctypes.c_int), # 委托编号
("价格", ctypes.c_int64), # 委托价格
("数量", ctypes.c_int), # 委托数量
("类别", ctypes.c_char), # 委托类别('A':限价, 'D':撤单, '0':限价, '1':对手价, 'U':排队价) # AD为沪市,01U为深市
("方向", ctypes.c_char), # 委托代码(买:'B', 卖:'S')
("经纪", ctypes.c_int), # 经纪商编码
("状态", ctypes.c_int8), # 委托状态
("标志", ctypes.c_int8), # 标志
]
# 组合结构体
class TDF_L1(ctypes.Structure):
_fields_ = [
("代码", ctypes.c_int),
("aData", TDF_MARKET_DATA3),
]
class TDF_L2(ctypes.Structure):
_fields_ = [
("代码", ctypes.c_int),
("aData", TDF_TRANSACTION3),
]
class TDF_WT(ctypes.Structure):
_fields_ = [
("代码", ctypes.c_int),
("aData", TDF_ORDER3),
]