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

这应该是vnpy 的一个bug:
就是在使用多合约组合策略的模块,使用buy,sell等函数下单,下单能实际成交,但pos或pos_data没自动更新,而pos应该和cta模块一样,会自动根据成交来更新持仓。
在最新的3.6版本,pos在多合约策略中变成了pos_data,按照例子使用set target,但也影响不了pos_data(也就是pos)的变化。
使用下单或平仓函数可以,但持仓pos数据没变化,这是在2.9和3.6版本中的多合约策略都出现,与之对应,cta策略就会自动改变pos。这个问题通过重装vnstudio以及测试过不同版本都出现,重装系统也解决不了,由此看应该是vnpy的多合约模块的bug。
有朋友知道pos的更新是在源码哪里查看和更改吗?感谢!

Member
avatar
加入于:
帖子: 5051
声望: 304

engine的process_trade_event函数

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

经过参考CTA的engine里的代码,对比发现多合约组合策略里缺少了pos的更新,在engine的process_trade_event函数里。

这个算是bug,可能大家比较少用多合约组合所以就没发现,希望后续能修复。

参考CTA增加部分在166行左右,如下:

    # Update strategy pos before calling on_trade method
    if trade.direction == Direction.LONG:
        strategy.pos[trade.symbol + '.' + trade.exchange.name] += trade.volume
    else:
        strategy.pos[trade.symbol + '.' + trade.exchange.name] -= trade.volume

还有下面少了:

    # Sync strategy variables to data file
    self.sync_strategy_data(strategy)

    # Update GUI
    self.put_strategy_event(strategy)
Member
avatar
加入于:
帖子: 5051
声望: 304

通过调用策略update_trade函数更新了的

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

沪公网安备 31011502017034号

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