【历史文档】高阶技巧-如何在模拟中使用持久化变量
由qxiao创建,最终由small_q 被浏览 188 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
简介
有时候遇到回测和模拟信号不一致,其中一个原因是使用了自定义的全局变量,导致回测和模拟行为不一致。其中有两个关键因素:
1、回测时初始化函数只执行一次,而模拟每天都要跑一次初始化函数,相当于策略在模拟中每天都要重新跑。
2、所以要在模拟中持久化全局变量,需要用平台提供context.extension变量,以字典的格式来存放用户的全局变量。例如context.extension['my_flag'] = 1。
实现步骤
1、平台内置的全局变量context.trading_day_index从0开始每个交易日都会增加1,利用此内置变量在主函数中对我们自己的全局变量进行初始化,这样就能保证在模拟中只初始化一次此变量。例如:
if context.trading_day_index == 0:
context.extension['date_flag'] = 0
2、在主处理函数中根据自己需要对全局变量进行复制,例如:
#date_flag每日变化
if context.extension['date_flag'] == 0:
context.extension['date_flag'] = 1
else:
context.extension['date_flag'] = 0
样例
如下样例实现了每两天进入一次主函数处理逻辑(直接用context.trading_day_index也能实现此功能)
https://bigquant.com/experimentshare/b853cff7eff0417aa9f48cad9465d7b3
\