3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,高频策略与微观结构交易通常需要依赖 Level-2 逐笔行情。通过 tick_data 回调函数,策略可以每 3 秒接收一次高频行情推送,并实时提取逐笔委托(order)与逐笔成交(transcation)数据。
在 tick_data(context, data) 中,data 参数是一个字典,格式如下:
{
'股票代码': {
'order(最近一条逐笔委托)': DataFrame / None,
'tick(当前tick数据)': DataFrame,
'transcation(最近一条逐笔成交)': DataFrame / None
}
}
注意:逐笔委托与逐笔成交数据需要券商账号开通 Level-2 行情权限 才能推送,否则对应字段将返回
None。
order) 关键字段business_time: 毫秒级时间戳hq_px: 委托价格business_amount: 委托数量order_no: 委托编号business_direction: 委托方向(0 - 卖,1 - 买,2 - 借入,3 - 出借)trans_kind: 委托类别(1 - 市价委托,2 - 限价委托,3 - 本方最优)transcation) 关键字段business_time: 毫秒级时间戳hq_px: 成交价格business_amount: 成交数量trade_index: 成交编号business_direction: 成交方向(0 - 卖,1 - 买)buy_no: 叫买方编号sell_no: 叫卖方编号trans_flag: 成交标记(0 - 普通成交,1 - 撤单成交)以下示例展示了如何在 PTrade 的 tick_data 回调中提取逐笔行情,并根据买一档价格触发下单:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def tick_data(context, data):
security = g.security
if security not in data:
return
# 1. 解析 Tick 档位数据(买一价)
tick_df = data[security]['tick']
bid_grp = eval(tick_df['bid_grp'][0]) if isinstance(tick_df['bid_grp'][0], str) else tick_df['bid_grp'][0]
bid_price1 = bid_grp[1][0] # 买一价
log.info(f"{security} 当前买一价: {bid_price1}")
# 2. 解析逐笔委托数据 (order)
order_df = data[security]['order']
if order_df is not None and not order_df.empty:
latest_order = order_df.iloc[0]
log.info(f"[逐笔委托] 时间: {latest_order['business_time']}, 价格: {latest_order['hq_px']}, 数量: {latest_order['business_amount']}, 方向: {latest_order['business_direction']}")
# 3. 解析逐笔成交数据 (transcation)
trans_df = data[security]['transcation']
if trans_df is not None and not trans_df.empty:
latest_trans = trans_df.iloc[0]
log.info(f"[逐笔成交] 时间: {latest_trans['business_time']}, 价格: {latest_trans['hq_px']}, 数量: {latest_trans['business_amount']}, 方向: {latest_trans['business_direction']}")
# 4. 示例交易逻辑:当买一价达到设定阈值时以买一档下单
if bid_price1 > 35.0:
# 使用 tick 专属下单接口 order_tick,priceGear='1' 表示买一档
order_tick(security, 100, priceGear='1')
def handle_data(context, data):
pass
tick_data 函数中下单时,必须使用专门的 order_tick() 函数,不能直接使用普通 order()。initialize 中使用 `set_parameters(tick_data_no_l2=