问题描述
为什么在回测模块中使用get_individual_transaction函数报错或无法获取数据?
解决方案
在 ptrade 量化平台中,如果您在回测模块调用 get_individual_transaction 函数遇到报错或无法获取数据的情况,主要是因为该函数的使用场景限制。
原因分析
根据 ptrade API 文档的明确规定,get_individual_transaction(获取逐笔成交行情)函数仅在交易模块可用。这意味着该接口不支持在回测环境(研究、回测模块)中调用。回测引擎通常不提供 Level-2 级别的逐笔历史数据,因此调用该函数会导致报错或返回空数据。
解决方案与替代方法
如果您在回测阶段需要模拟或使用历史数据,可以考虑以下替代方案:
-
使用 K 线数据替代:
在回测中,您可以使用get_history或get_price函数获取分钟级别(如 '1m')或日线级别('1d')的 K 线数据来近似模拟策略逻辑。虽然精度不及逐笔数据,但对于大多数策略的回测已经足够。# 获取过去10分钟的分钟线数据 history_data = get_history(10, '1m', ['close', 'volume'], security_list='600570.SS') -
实盘/模拟盘测试:
如果您的策略高度依赖逐笔成交数据(如高频交易、微观盘口分析),建议直接在交易模块(模拟盘或实盘)中进行测试。在交易模块中,只要您开通了 Level-2 行情权限,就可以正常使用get_individual_transaction获取当日的逐笔成交数据。 -
注意 Level-2 权限:
即使在交易模块中,调用此函数也需要您的账户开通了 Level-2 行情权限,否则同样会返回无数据(None)。
总结
在编写 ptrade 策略时,请务必注意 API 文档中每个函数的使用场景。对于仅限交易模块使用的函数,在回测代码中应予以规避,或者使用 is_trade() 函数进行场景判断,以确保代码在回测和交易环境中都能平稳运行。
if is_trade():
# 交易环境中获取逐笔成交
transaction = get_individual_transaction()
else:
# 回测环境中使用分钟线替代
history = get_history(1, '1m', 'close')