问题场景:
第一天portfoliostrategy策略已经有持仓中的订单,盘后关闭系统,第二天开盘启动策略时pos_data和target_data恢复正常,当盘中收到新的bar推送时,target_data被重置为新计算的值且新计算的值与原持仓订单无关(例:原持仓订单并未出场,新计算的值为平仓的值)。
问题梳理:
portfoliostrategy策略停止时会将pos_data和target_data存在json文件中;
当第二天开盘策略启动时调用了vnpy_portfoliostrategy/engine.py中_init_strategy()方法,在此方法中,先调用了策略on_init()方法,策略on_init()方法中加载历史bars数据并推送到策略的on_bars()方法中;
然后vnpy_portfoliostrategy/engine.py中_init_strategy()方法执行了恢复策略状态的代码,此时策略的pos_data和target_data将恢复至原持仓的数量;
随后进行了行情订阅,等待实时数据;
问题复现:
在策略on_bars()中添加打印,发现在策略初始化时推送到on_bars()中的历史数据,会重新计算买卖仓位等参数,并未有第一天买入的记录,而在历史数据加载完成后,vnpy_portfoliostrategy/engine.py中_init_strategy()方法中对pos_data和target_data恢复至原持仓的数量。所以就有了问题的场景,当数据推送进来时,历史仓位状态丢失。
请问
vnpy版本为3.9.0,vnpy_portfoliostrategy版本为1.0.8,请问我该如何排查并解决上述问题?