我有一个模拟盘使用了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完成初始化,结果必然变来变去。
附,测试代码可以查看各个函数的运行记录。