问题描述
为什么在回测模块中使用get_individual_entrust函数报错或无法获取数据?
解决方案
在 ptrade 量化交易平台中,如果在回测模块调用 get_individual_entrust 函数遇到报错或无法获取数据的情况,主要是由该 API 的使用场景限制决定的。
为什么回测中无法使用?
根据 ptrade 官方 API 文档规定:
- 使用场景限制:
get_individual_entrust函数仅在交易模块可用。它不支持在研究(Research)或回测(Backtest)模块中调用。如果在回测中调用,框架会抛出异常或返回空数据。 - 数据源要求:该函数用于获取当日的逐笔委托行情数据。逐笔委托和逐笔成交数据属于高频的 Level2 行情数据,必须在实盘或模拟交易环境中,且账户开通了 Level2 行情权限才能接收到推送。
正确的使用方法
如果您需要处理逐笔委托数据,必须将策略部署在交易模块中,并在盘中(如 handle_data 或 tick_data)进行调用。
示例代码(仅限交易模块):
def initialize(context):
g.security = "000001.SZ"
set_universe(g.security)
g.flag = False
def handle_data(context, data):
if not g.flag:
# 获取当前股票池逐笔委托数据(返回 dict 类型速度更快)
entrust = get_individual_entrust([g.security], is_dict=True)
if entrust is not None:
log.info("逐笔委托数据为:%s" % entrust)
g.flag = True
回测中的替代方案
如果您在回测中需要获取历史行情数据,请使用 get_history 或 get_price 函数。这两个函数支持获取分钟级(1m, 5m 等)和日线级(1d)的 K 线数据,完全兼容回测模块。
总结:get_individual_entrust 是专为实盘/模拟盘交易设计的 L2 高频接口,请勿在回测环境中使用。