请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3365809 新帖:16

全局变量初始化,使用process_initialize要特别小心

牛市来了发表于:5 月 10 日 00:39回复(1)

我有一个模拟盘使用了process_initialize初始化了一些全局变量,其中有一个变量,在开盘前根据最近的市场状态做出调整,模拟测试没问题,模拟盘感觉不稳定,找了很久发现process_initialize不是我想的那个样子。

根据API,我原以为每天重启模拟盘,依次执行after_code_changed (如果改变了代码)、process_initialize,然后依次执行before_trading_start、handle_data、after_trading_end,收盘后关闭。

其实不是,在凌晨、早上9:00、下午13:00、15:00都有可能启动process_initialize,也可能不重启,也可能在其他时间重启。如果使用了process_initialize初始化全局变量,在before_trading_start做了调整,这个参数就有可能变来变去。

那么全局变量初始化(参数定义)放在哪儿好?

放在initialize不行,因为模拟盘只启动initialize一次,以后即使改了代码也不会执行。

全局变量初始化应该放在after_code_changed之内,只运行一次。第一次启动模拟盘,after_code_changed在initialize之后,以后改动了代码则在重启之后、process_initialize之前。

全局变量初始化或者放在before_trading_start之内,每天开盘前运行一次。

看一个实际记录:

2018-11-27 15:30:00 - INFO - initialize process

2018-11-27 15:30:00 - INFO - after trading closed

2018-11-27 15:00:00 - INFO - initialize process

2018-11-27 09:30:00 - INFO - initialize process

2018-11-27 09:30:00 - INFO - trading

2018-11-27 09:00:00 - INFO - initialize process

2018-11-27 09:00:00 - INFO - before trading started

2018-11-27 00:00:00 - INFO - initialize process

process_initialize在0点、9点、9点30、15点、15:30各启动一次,尤其令人惊讶的是9:30那次,在handle_data之后,如果参数在process_initialize完成初始化,结果必然变来变去。

附,测试代码可以查看各个函数的运行记录。

全部回复

0/140

量化课程

    移动端课程