QMT中的自定义数据结构:如何管理多个股票池和信号
发布时间:6小时前阅读:5

随着量化策略复杂度的提升,需要管理多个股票池、多个信号来源以及中间计算结果。QMT的Python环境允许使用任意自定义数据结构,如字典、列表、Pandas DataFrame。本文介绍如何在QMT中高效组织数据。
场景一:多股票池轮动。定义两个列表:stock_pool_1 = ['000001.SZ', '000002.SZ'],stock_pool_2 = ['600001.SH', '600002.SH']。在init中存入context.pool1和context.pool2。在handle_bar中根据条件选择使用哪个池子。
场景二:存储每个股票的技术指标值。可以使用字典:context.signal = {},在每次计算时更新context.signal[stock] = value。例如,计算RSI后存入,供后续判断使用。注意字典的键必须是字符串(股票代码),值可以是数字、布尔值或列表。
场景三:缓存历史数据以提高性能。QMT的history_bars每次调用都会读取数据,频繁调用会影响速度。可以在init中一次性加载所有历史数据,存入context.hist_data(DataFrame),然后在handle_bar中按日期索引。但要注意数据更新:每天收盘后需要追加新数据。
场景四:信号合并与排序。多因子模型会产生每个股票的得分。可以使用列表套元组:scores = [(stock, value) for stock, value in score_dict.items()],然后scores.sort(key=lambda x: x[1], reverse=True),取前N名。
高级用法:使用pickle模块保存中间结果,避免每天重新计算。例如,计算全市场选股因子需要大量时间,可以在盘后计算一次,保存为文件,次日开盘读取。
注意:QMT的context对象不能直接存储大型DataFrame(可能导致性能下降),建议存储文件路径,在需要时再加载。同时,自定义数据结构要确保在回测和实盘中一致性。
国金证券的QMT支持完整的Python语法,10万资金即可开通。量化社群中有许多关于数据结构的经验分享,如如何管理因子库、信号队列等。同时,两融全线上办理,管理信用账户的持仓时需要额外标记。良好的数据结构设计,是策略可维护性和扩展性的基础。
温馨提示:投资有风险,选择需谨慎。


问一问

+微信
分享该文章
