问题描述
使用get_gear_price获取股票的逐档委买委卖信息时,最多能获取多少档数据?
解决方案
在 ptrade 量化交易平台中,使用 get_gear_price 函数获取股票的逐档委买委卖信息时,最多能获取的档位数取决于您账户所开通的行情权限:
- Level 1 行情(普通行情):最多返回 5档 行情数据(即买一到买五,卖一到卖五)。
- Level 2 行情(高级行情):最多返回 10档 行情数据(即买一到买十,卖一到卖十)。
数据结构说明
get_gear_price 返回的数据是一个嵌套字典,包含 bid_grp(委买档位)和 offer_grp(委卖档位)。
- 5档行情示例:
{'bid_grp': {1: [价格, 委托量, 委托笔数], ..., 5: [价格, 委托量, 委托笔数]}, 'offer_grp': {1: [价格, 委托量, 委托笔数], ..., 5: [价格, 委托量, 委托笔数]}} - 10档行情示例(Level 2):
注意:在 Level 2 行情下,第一档(买一/卖一)的数据列表中可能会包含第四个元素,即详细的委托队列字典。{'bid_grp': {1: [价格, 委托量, 委托笔数, {委托队列}], ..., 10: [价格, 委托量, 委托笔数]}, 'offer_grp': {1: [价格, 委托量, 委托笔数, {委托队列}], ..., 10: [价格, 委托量, 委托笔数]}}
代码示例
以下是如何在策略中获取并打印档位数据的示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取当前档位行情
gear_price = get_gear_price(g.security)
if gear_price and 'bid_grp' in gear_price:
bid_grp = gear_price['bid_grp']
# 获取当前返回的最大档位数
max_level = max(bid_grp.keys()) if bid_grp else 0
log.info(f"{g.security} 当前获取到 {max_level} 档买盘数据")
# 打印买一价和买十价(如果存在)
if 1 in bid_grp:
log.info(f"买一价: {bid_grp[1][0]}, 委托量: {bid_grp[1][1]}")
if 10 in bid_grp:
log.info(f"买十价: {bid_grp[10][0]}, 委托量: {bid_grp[10][1]}")
总结:get_gear_price 最多可以返回 10档 数据,但这需要您的券商环境支持并开通了 Level 2 行情。如果没有 L2 行情,默认只能获取 5 档数据,且委托笔数字段可能返回 0。