3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,如果您在 tick_data 函数里尝试获取逐笔委托(order)和逐笔成交(transcation)数据时发现返回了 None,其根本原因是您的账户未开通 Level2 (L2) 行情。
根据 PTrade API 文档的明确规定:
参数 data 中包含的逐笔委托,逐笔成交数据需开通 level2 行情才有数据推送,否则对应数据返回 None。
普通的 Level1 行情只提供基础的快照数据(如买卖五档、最新价、成交量等),而逐笔数据(每一笔具体的委托单和撮合成交单)属于高级行情数据,必须依赖交易所的 Level2 行情源。
当您开通了 Level2 行情后,tick_data 中的 data 参数结构如下:
{'股票代码':
{
'order': DataFrame / None, # 最近一条逐笔委托 (需L2)
'tick': DataFrame, # 当前tick快照数据 (L1/L2均有)
'transcation': DataFrame / None, # 最近一条逐笔成交 (需L2)
}
}
为了避免策略因为未开通 L2 行情或某时刻无逐笔数据而报错,建议在代码中加入 None 值判断:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def tick_data(context, data):
security = g.security
# 1. 获取逐笔成交数据
transcation = data[security].get("transcation")
if transcation is not None:
business_amount = list(transcation["business_amount"])
if len(business_amount) > 0:
log.info("最近一笔逐笔成交的成交量:%s" % business_amount[0])
else:
log.warning("未获取到逐笔成交数据,请检查是否开通Level2行情。")
# 2. 获取逐笔委托数据
order = data[security].get("order")
if order is not None:
trans_kind = list(order["trans_kind"])
if len(trans_kind) > 0:
log.info("最近一笔逐笔委托的委托类别:%s" % trans_kind[0])
else:
log.warning("未获取到逐笔委托数据,请检查是否开通Level2行情。")
def handle_data(context, data):
pass
data[security]['tick'] 中的快照数据(如 bid_grp 买档位、offer_grp 卖档位、last_px 最新价等)来进行逻辑判断。