问题描述
/
解决方案
报错原因分析
在 ptrade 量化平台中,get_market_list() 接口用于获取当前市场列表目录。根据 ptrade API 文档的明确规定:在回测和交易模块中,该接口仅限在 before_trading_start(盘前)和 after_trading_end(盘后)事件函数中使用。
由于 handle_data 是盘中高频触发的事件函数(日线或分钟级别),为了保证交易引擎的运行效率和稳定性,平台限制了部分基础信息查询接口在盘中的调用。因此,直接在 handle_data 中调用会引发报错。
正确的调用方法
如果您需要在盘中(handle_data)使用市场列表数据,正确的做法是:
- 在
before_trading_start函数中调用get_market_list()获取数据。 - 将获取到的数据赋值给全局对象
g(例如g.market_list)。 - 在
handle_data函数中直接读取g.market_list进行逻辑处理。
代码示例
def initialize(context):
# 初始化股票池
g.security = '600570.SS'
set_universe(g.security)
def before_trading_start(context, data):
# 在盘前获取市场列表,并存入全局变量 g 中
g.market_list = get_market_list()
log.info("盘前已成功获取市场列表数据")
def handle_data(context, data):
# 在盘中直接使用全局变量中的市场列表数据
if hasattr(g, 'market_list') and g.market_list is not None:
# 打印或处理市场列表数据
# log.info(g.market_list.head())
pass
# 其他交易逻辑
order(g.security, 100)
总结
对于 ptrade 中类似 get_market_list、get_market_detail 等基础信息查询接口,通常都建议在盘前或盘后获取并缓存,避免在 handle_data 或 tick_data 中频繁调用,这不仅能解决报错问题,也是编写高效量化策略的最佳实践。