3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 的 tick_data(context, data) 事件中,如果开通了 Level-2 行情,可以通过 data[security]['order'] 获取到最近一笔逐笔委托数据。该数据是一个 DataFrame,其中包含关键字段 business_direction(委托方向)和 business_amount(委托数量)。
1 (买):代表买方主动委托。若委托量极大,通常暗示主力资金在建仓或护盘。0 (卖):代表卖方主动委托。若伴随大单,可能暗示主力出货或压盘。2 (借入):代表融资融券中的“借入”意图(通常为融券卖出准备)。3 (出借):代表转融通中的“出借”意图(通常为大股东或机构出借证券)。我们可以通过设定一个大单阈值(例如单笔委托金额超过 50 万元,或委托股数超过 50,000 股),在 tick_data 中实时过滤出主力大单,并根据 business_direction 进行分类统计,从而研判主力意图。
以下是一个在 tick_data 中实时监控主力大单意图的完整 ptrade 策略示例:
# -*- coding: utf-8 -*-
def initialize(context):
# 订阅目标股票
g.security = '600570.SS' # 恒生电子
set_universe(g.security)
# 设定大单阈值(例如单笔委托超过 100,000 股)
g.large_order_threshold = 100000
def tick_data(context, data):
security = g.security
if security not in data:
return
# 获取逐笔委托数据
order_df = data[security].get('order')
# 确保有逐笔委托数据且不为空
if order_df is not None and not order_df.empty:
# 遍历最近的逐笔委托记录
for index, row in order_df.iterrows():
amount = row['business_amount']
direction = row['business_direction']
price = row['hq_px']
order_no = row['order_no']
# 过滤主力大单
if amount >= g.large_order_threshold:
# 计算大单估算金额
order_value = amount * price
# 根据 business_direction 判断意图
if direction == 1:
log.info(f"【主力买入大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 | 金额:{order_value:.2f}元 -> 暗示主力积极建仓/护盘")
# 策略逻辑:可在此处加入跟单买入信号
elif direction == 0:
log.info(f"【主力卖出大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 | 金额:{order_value:.2f}元 -> 暗示主力压盘/出货")
# 策略逻辑:可在此处加入避险卖出信号
elif direction == 2:
log.info(f"【主力借入大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 -> 暗示市场融券卖出意图增加,警惕空头压力")
elif direction == 3:
log.info(f"【机构出借大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 -> 机构转融通出借,市场券源增加")
def handle_data(context, data):
# tick级别策略中,handle_data 可保持为空
pass
order)必须在开通柜台 Level-2 行情权限后才能获取,否则 data[security]['order'] 将返回 None。tick_data 每 3 秒触发一次,处理高频逐笔数据时,应尽量避免复杂的循环和 I/O 操作。如果订阅股票较多,建议在 initialize 中设置 set_parameters(tick_data_no_l2="0") 确保 L2 数据正常推送,并使用 is_dict=True 的高频接口加速数据获取。