问题描述
需要同时获取多只股票的档位行情,是否需要循环调用get_gear_price多次?
解决方案
在 ptrade 量化交易平台中,get_gear_price 接口完全支持同时查询多只股票的档位数据。您不需要使用 for 循环多次调用该接口,直接传入一个包含多只股票代码的列表(list)即可。
接口说明
根据 ptrade API 文档,get_gear_price(sids) 的入参 sids 支持 list[str] 或 str 类型。这意味着您可以一次性传入多只股票代码。
返回数据格式
当传入多只股票代码时,返回的数据是一个嵌套字典,最外层的 key 是股票代码,value 是该股票的档位数据:
{
'600570.SS': {
'bid_grp': {1: [价格, 委托量, 委托笔数], ...},
'offer_grp': {1: [价格, 委托量, 委托笔数], ...}
},
'600571.SS': {
'bid_grp': {1: [价格, 委托量, 委托笔数], ...},
'offer_grp': {1: [价格, 委托量, 委托笔数], ...}
}
}
代码示例
以下是如何在策略中一次性获取多只股票档位数据的示例:
def initialize(context):
# 设置包含多只股票的股票池
g.security = ['600570.SS', '600571.SS']
set_universe(g.security)
def handle_data(context, data):
# 直接传入列表,一次性获取多只股票的档位行情
gear_prices = get_gear_price(g.security)
# 打印获取到的数据
log.info("多只股票档位数据: %s" % gear_prices)
# 解析单只股票的数据
if '600570.SS' in gear_prices:
bid_1 = gear_prices['600570.SS'].get('bid_grp', {}).get(1)
log.info("600570.SS 买一档数据: %s" % bid_1)
总结与建议
强烈建议直接传入列表来获取多只股票的档位数据,而不是在 handle_data 或其他定时函数中使用 for 循环逐个调用 get_gear_price。批量获取可以显著减少底层接口的调用次数,降低网络和系统开销,从而大幅提升量化策略的运行效率和响应速度。