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

看到文档里面提到锁仓委托转换:

如果lock设置为True,那么该笔订单则会进行锁仓委托转换(在有今仓的情况下,如果想平仓,则会先平掉所有的昨仓,然后剩下的部分都进行反向开仓来代替平今仓,以避免平今的手续费惩罚)。

我理解要完成这个操作,光靠记录一个净持仓pos不够用吧,应该还要记录昨仓、今仓,还要区分出对应的方向。这些信息都存在什么地方了,也是在.vntrader目录下的json文件里面吗?

Member
avatar
加入于:
帖子: 4618
声望: 284

交易所会推送

Member
avatar
加入于:
帖子: 46
声望: 1

我看策略里面似乎是根据净持仓(self.get_pos(vt_symbol))来决定具体操作的,在lock=True的情况下,多空单数量相同则净持仓为0,那岂不会导致操作行为的偏差,平仓操作变开仓?

xiaohe wrote:

交易所会推送

Member
avatar
加入于:
帖子: 716
声望: 62

锁仓的目的本就是为了避免平今惩罚,你为什么还要去平今仓呢,那你就没必要用锁仓模式了呀。锁仓模式就意味着你的今仓有多空两个仓位,你如果需要的不是反向而是平仓,那不使用锁仓模式就行。多空单相同意味着你之前使用的就是锁仓模式,那你继续开仓的行为就是符合预期的。

Member
avatar
加入于:
帖子: 46
声望: 1

这个逻辑我是理解的,今仓是不用平的,但是对于有昨仓的情况呢,在净持仓等于0的情况下,它是怎么判断做平昨操作的呢?

郭易燔 wrote:

锁仓的目的本就是为了避免平今惩罚,你为什么还要去平今仓呢,那你就没必要用锁仓模式了呀。锁仓模式就意味着你的今仓有多空两个仓位,你如果需要的不是反向而是平仓,那不使用锁仓模式就行。多空单相同意味着你之前使用的就是锁仓模式,那你继续开仓的行为就是符合预期的。

Member
avatar
加入于:
帖子: 4618
声望: 284

用self.pos策略净持仓这个变量编写策略只是一种示例写法,也可以从示例策略的逻辑中看到,都是self.pos等于0的时候做开仓操作,不等于0的时候做平仓操作。如果有自己的想法可以基于自己的需求来编写策略

Member
avatar
加入于:
帖子: 46
声望: 1

其实我不是这个意思... 我想问的是在lock=True时,程序如何在self.pos==0的情况下,知道去做平昨仓操作。毕竟只通过self.pos净持仓作为判断依据的时候,self.pos==0,按代码里的逻辑它该做开仓操作,但事实上程序做了平仓操作。lock=True的背后是否做了更复杂的判断?

xiaohe wrote:

用self.pos策略净持仓这个变量编写策略只是一种示例写法,也可以从示例策略的逻辑中看到,都是self.pos等于0的时候做开仓操作,不等于0的时候做平仓操作。如果有自己的想法可以基于自己的需求来编写策略

Member
avatar
加入于:
帖子: 101
声望: 9

如果净持仓self.pos=0,并且第二天接着交易,那么因为self.pos=0所以只会做开仓操作,我们以买入开仓为例(当天首笔开仓),我们将这笔买入开仓的头寸记为req.volume,那么vn.py会做如下操作:
1,如果有昨天的空仓,则平掉该空仓;
2,如果req.volume减去昨仓还有剩余,则以该剩余头寸来下开仓的订单。

关于锁仓的细节在CTA课程里有详细讲解的,另外vn.py做这个转换逻辑的底层代码在vnpy.trader.converter.PositionHolding.convert_order_request_lock函数中。

Member
avatar
加入于:
帖子: 46
声望: 1

感谢

有原 wrote:

如果净持仓self.pos=0,并且第二天接着交易,那么因为self.pos=0所以只会做开仓操作,我们以买入开仓为例(当天首笔开仓),我们将这笔买入开仓的头寸记为req.volume,那么vn.py会做如下操作:
1,如果有昨天的空仓,则平掉该空仓;
2,如果req.volume减去昨仓还有剩余,则以该剩余头寸来下开仓的订单。

关于锁仓的细节可以参考vn.py官方公众号上提供的CTA课程,另外vn.py做这个转换逻辑的底层代码在vnpy.trader.converter.PositionHolding.convert_order_request_lock函数中。

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

沪公网安备 31011502017034号

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