vn.py官网
开源量化社区
Member
加入于:
帖子: 30
声望: 0

假定股指有昨仓 buy 2手,sell 2手; 今天第一笔开仓想要 sell open 1手。 调用的self.short(). 用了锁仓模式lock=True。
结果应该是变成buy1手,sell 2手?(即 buy close 1)--我认为预期结果是这个。
还是 buy 2手,sell 3 手?(即直接sell open 1 )?

按照convert.py代码里的:
if yd_available:
req_yd = copy(req)
if self.exchange in [Exchange.SHFE, Exchange.INE]:
req_yd.offset = Offset.CLOSEYESTERDAY
else:
req_yd.offset = Offset.CLOSE
req_yd.volume = close_volume
req_list.append(req_yd)

发现最终下出去的指令是 sell close。。。为什么不是buy close?!

麻烦大侠指教,谢谢

Member
avatar
加入于:
帖子: 3027
声望: 174

多平是cover。锁仓模式只修改offset不修改direction

Member
加入于:
帖子: 30
声望: 0

xiaohe wrote:

> 多平是cover。锁仓模式只修改offset不修改direction

多谢回答。 有点更迷糊了,麻烦给捋捋。。。

我是想要开一手空,不是要平多。(我的理解平多,应该是锁仓模式给自动转换的?)

还是上面的例子,逻辑上来说,想要开一手空(即 sell open),正常应该是下单self.short() .
如果不用锁仓模式,当然就直接下去到交易所就好。显示出来也是sell open。
如果用了锁仓模式,该订单在convert里边转化成cover,即发了平多出去(经过未开今以及有昨仓的判断后)。

不是以上的过程这样? 如果不是,上面的例子,要开空,就要下平多。这就变成我自己判断,不需要锁仓转换了啊??

还请大侠再详细解释指点一下,我是哪个地方想错了。

Member
avatar
加入于:
帖子: 3027
声望: 174

锁仓主要是为了避免平今惩罚。平仓时,如果有昨仓就优先平昨,如果没有昨仓,就反向开仓避免平今惩罚。
这个锁仓转换有在微信公众号vnpy_community里的vn.py全实战进阶-CTA策略的第32课锁仓转换有做具体讲解,感兴趣的话可以去看一下。

Member
加入于:
帖子: 30
声望: 0

大侠说的,我明白。视频中最后的那个总结图,我也觉得没看明白。锁仓目的是平今手续费。都是先检查今仓,和昨仓,在看是否反向开仓的情况。这些都能理解。但是,对于有昨仓(无今仓)的情况下,开仓怎么处理? 正如上面我举例的那个情况,能否按照我的例子给解答一下。
1)昨仓Buy 2手,Sell 2手
2)今第一笔开仓:开空仓1手(sell open 1手)。在策略层下单self.short(lock=True)
3) 代码走到converter.py,offset被改成了close。(但是direction没变,仍是short)
if yd_available:
req_yd = copy(req)
if self.exchange in [Exchange.SHFE, Exchange.INE]:
req_yd.offset = Offset.CLOSEYESTERDAY
else:
req_yd.offset = Offset.CLOSE
req_yd.volume = close_volume
req_list.append(req_yd)

4)最终下单就得到了short close,也即sell close。

到底哪里不对了??
是第2),在开空仓时不应该用self.short? 而是self.cover() ,即buyclose吗? 我要的是开空仓,如果自己判断了平今惩罚,而变成buyclose,就不用走锁仓模式啊?
是说 平仓时才用lock=True。 开仓就不用?(记得说过要用锁仓,就都要用啊)

Member
avatar
加入于:
帖子: 3027
声望: 174

vn.py默认是基于净仓交易的,从图上也能看出,如果有今仓,默认直接开仓。如果没有今仓,就默认先平昨仓再开仓了
description

Member
加入于:
帖子: 30
声望: 0

谢谢,是我自己把买卖开平那4个委托指令搞混淆了,所以转不出来。。。

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

沪公网安备 31011502017034号