vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 31
声望: 0

同一K线上为什么不能做2次 交易,比如我把多单平了,现在条件符合开空仓的条件,需要开空仓,vnpy系统能实现吗?
PS:我把平仓的函数都放到了上面,建仓的条件都放到下面好像也不行,也把所以的elif都改成了if。

Administrator
avatar
加入于:
帖子: 1711
声望: 80

可以啊,你发平多的同时发个开空委托就行了,基本操作啊

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

因为我历史回测的时候不行,用的一分钟的数据,没有在同一k线开盘的记录。我觉得有可能是咱们交易系统的逻辑问题(更接近实盘,所以才会这根K线委托,下根成交的情况),在实盘用tick数据应该可以成交吧,boss陈。

Administrator
avatar
加入于:
帖子: 1711
声望: 80

你的两次发单语句,放在一个条件判断中就能触发了,因为是下根K线成交规则,所以在当根K线随便你发多少委托,self.pos仓位字段都是不会变的

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

非常感谢指导,可以一根K线多次下单啦
发现个问题:关于下根K线成交规则的:当前K线满足if条件,但下一根不满足if,vnpy里也没有委托,是系统自带的逻辑吗?

Administrator
avatar
加入于:
帖子: 1711
声望: 80

T时刻K线走完,on_bar函数被调用收到T时刻的K线,满足你的if条件发出的委托,永远只会在T+1以及后续的时刻(撤单前)去进行撮合成交。

这是为了保证回测和实盘中的时间序列一致性的前提下(杜绝未来函数),最稳妥的回测思路:事件驱动的回测模式。

我理解你对于回测的理解可能更多停留在向量化的思路上,这种模式很容易出未来函数,所以vn.py并不提供。

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

多谢群众解答,但在vnpy回测中发现当前k线满足if条件,而下根k不满足条件时,不发出委托单的情况。

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

忘了了补充一句,上面的情况发生在同一根k线,第二笔单不出委托。

Administrator
avatar
加入于:
帖子: 1711
声望: 80

不知道你的第二笔单条件是什么?贴代码把

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

if self.Q1 > self.Q2 and bar.low_price <= self.L:
这个在当前K线都是满足条件的

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

当前K线:self. Q1=260, self.Q2=258 ,bar.low_price=731.0 ,self.L= 792.0, self.pos= 1
下一个K线:self.Q1=263,self.Q2=264, bar.low_price= 771.0,self.L= 731.0 ,self.pos= 0
在当前K线满足条件时,把多单给平了(系统是K+1平的,这是对的),然后在后面加第二次开仓的条件:if self.Q1 > self.Q2 and bar.low_price <= self.L:
按理说应该在K+1会下个空单的,但是委托记录没有。

Administrator
avatar
加入于:
帖子: 1711
声望: 80

请贴完整的代码,以上描述没法判断你的if嵌套怎么写的

Member
avatar
加入于:
帖子: 31
声望: 0
   if self.pos ==1:
        if bar.low_price <= self.myprice:
            self.sell(max(bar.open_price, self.L,bar.close_price), 1,True)
        if self.Q1 > self.Q2 and bar.low_price <= self.L:
            self.short(min(bar.open_price, self.L, bar.close_price), 1, True)

调试情况1:
当前K线:self. Q1=260, self.Q2=258 ,bar.low_price=731.0 ,self.L= 792.0, self.pos= 1
下一个K线:self.Q1=263,self.Q2=264, bar.low_price= 771.0,self.L= 731.0 ,self.pos= 0
结果:这样没有第二笔short函数这笔空单
调试情况2:
当前K线:self. Q1=260, self.Q2=258 ,bar.low_price=731.0 ,self.L= 792.0, self.pos= 1
下一个K线:self.Q1=268,self.Q2=264, bar.low_price= 713.0,self.L= 731.0 ,self.pos= -1
结果:有第二笔short函数这笔空单

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