本方案由 EasyQuant AI量化助手 提供。
问题背景
实时交易中,仅看最新价往往不够。买一到买五、卖一到卖五的价格、挂单量和委托笔数,可用于判断盘口流动性、设置限价委托价格或过滤异常行情。
PTrade 的 get_gear_price() 可获取指定证券的档位行情数据。
完整代码示例
def initialize(context):
g.security = "510300.SS"
set_universe([g.security])
def handle_data(context, data):
# 获取当前盘口档位数据
gear_data = get_gear_price(g.security)
if not gear_data:
log.info("未获取到盘口数据")
return
bid_grp = gear_data.get("bid_grp", {})
offer_grp = gear_data.get("offer_grp", {})
if not bid_grp or not offer_grp:
log.info("盘口数据为空,可能行情快照获取失败")
return
# 买一:[价格、委托量、委托笔数]
bid_one = bid_grp.get(1, [0, 0, 0])
# 卖一:[价格、委托量、委托笔数]
ask_one = offer_grp.get(1, [0, 0, 0])
bid_price = bid_one[0]
bid_volume = bid_one[1]
bid_count = bid_one[2]
ask_price = ask_one[0]
ask_volume = ask_one[1]
ask_count = ask_one[2]
log.info(
"买一:价格=%.3f,数量=%d,笔数=%d"
% (bid_price, bid_volume, bid_count)
)
log.info(
"卖一:价格=%.3f,数量=%d,笔数=%d"
% (ask_price, ask_volume, ask_count)
)
# 计算买卖一档价差
if bid_price > 0 and ask_price > 0:
spread = ask_price - bid_price
log.info("买卖一档价差:%.3f" % spread)
# 简单盘口失衡指标
total_volume = bid_volume + ask_volume
if total_volume > 0:
bid_ratio = bid_volume / total_volume
log.info("买一挂单占比:%.2f%%" % (bid_ratio * 100))
if bid_ratio > 0.7:
log.info("买一挂单相对较强")
elif bid_ratio < 0.3:
log.info("卖一挂单相对较强")
多股票读取示例
def handle_data(context, data):
stocks = ["510300.SS", "159919.SZ"]
gear_data = get_gear_price(stocks)
for security in stocks:
stock_gear = gear_data.get(security, {})
bid_one = stock_gear.get("bid_grp", {}).get(1, [0, 0, 0])
ask_one = stock_gear.get("offer_grp", {}).get(1, [0, 0, 0])
log.info(
"%s 买一=%.3f,卖一=%.3f"
% (security, bid_one[0], ask_one[0])
)
注意事项
-
get_gear_price()仅支持 PTrade 交易模块。 -
档位数据为空时,应跳过交易,不能直接以空数据下单。
-
无 L2 行情时,委托笔数字段可能为
0。 -
盘口挂单可能快速撤销,不应仅依赖单一档位做交易决策。
-
盘口数据适合辅助限价下单和流动性判断,不构成收益保证。
总结
get_gear_price() 能帮助 PTrade 策略读取买卖盘口,在限价委托、ETF 做市价差监控和短线流动性过滤中非常实用。

819

被折叠的 条评论
为什么被折叠?



