VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 10
声望: 0

问题场景:

第一天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,请问我该如何排查并解决上述问题?

Member
avatar
加入于:
帖子: 4709
声望: 287

第二天策略初始化之后,pos_data应该会与前一天停止策略时保存的数值一致的,那么策略里get_pos获取到的持仓也会和昨日收盘一致。至于收到行情推送之后的target_data为什么与预想不一致,可以自己在策略里基于策略逻辑打印排查看看

Member
avatar
加入于:
帖子: 3
声望: 0

另一个问题, 同样是vnp_portfoliostrategy模块下运行交易策略, 有一次忘记点击停止运行, 导致pos信息没有保存至json文件, 仓位信息丢失.
当下一个交易时段重新运行后就会出现账户实际持仓信息, 和策略读取的本地持仓信息不同的情况. 请问这种情况除了手工改写本地保存的仓位信息外, 有无其他方法? (最好是直接读取服务器的账户持仓信息, 这种方法能实现吗?)

所用交易环境为TTS模拟交易, 实盘是否也会这样?

感谢!

Member
avatar
加入于:
帖子: 4709
声望: 287

没有
如果想在vnpy_portfoliostrategy里面每次成交都同步,可以重载update_trade函数,先super继承,然后调用sync_data函数同步
没有停止策略是用户行为,和接口无关

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】