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

群主,您好

历史测试,为啥检测到信号的时间和实际成交的tick时间中间隔了好几个tick的呢,不是信号的下一个tick的时间的呢?

我是用tick测试的,那么在这个tick符合条件了,记录了这个tick的时间,然后buy、sell、short、cover后,在showBacktestingResult(self)的d['resultList'] 中的实际时间并不是下一个tick的时间,有时候差了4、5个tick的。(我是把tick的时间保存了并同时记录了信号标识,然后用['resultList'] 的时间去匹配tick的数据发现的)
截图如下:
enter image description here

谢谢!

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

另外再补充请教下:
为啥在tick的测试模式中,当前tick的pos是0,buy、sell、short、cover后,等到下一个tick的了,但是此时pos还不是1或者-1的,仍旧是 0 ,要过2、3个tick才会变成 1或者 -1的呢,是不是跟上边的是同一个问题?
谢谢!

Administrator
avatar
加入于:
帖子: 4191
声望: 236

你发出的委托,是和下一个tick的bid/ask价格撮合,而不是lastPrice撮合,我估计是因为你发的价格没法和对价成交的关系。

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

大概原因应该是
函数 def crossLimitOrder(self):
中的

        # 判断是否会成交
        buyCross = (order.direction==DIRECTION_LONG and 
                    order.price>=buyCrossPrice and
                    buyCrossPrice > 0)      # 国内的tick行情在涨停时askPrice1为0,此时买无法成交

        sellCross = (order.direction==DIRECTION_SHORT and 
                     order.price<=sellCrossPrice and
                     sellCrossPrice > 0)    # 国内的tick行情在跌停时bidPrice1为0,此时卖无法成交

===
应该是这里导致的。我仔细比较下看我数据吧。

如果不是,请群主再给指导下,谢谢!

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

用Python的交易员 wrote:

你发出的委托,是和下一个tick的bid/ask价格撮合,而不是lastPrice撮合,我估计是因为你发的价格没法和对价成交的关系。

收到,感谢!

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

用Python的交易员 wrote:

你发出的委托,是和下一个tick的bid/ask价格撮合,而不是lastPrice撮合,我估计是因为你发的价格没法和对价成交的关系。

======
群主,您好
发现 order.price<=sellCrossPrice 比较,虽然都是float类型的,数值都是相同的,我当时是2.78,但是实际条件不成立,也就是 = 的情况不对的了,这个不知道是否算问题的。
我round后就都可以的了。
我不知道如果价格完全相同的情况,是不是就会导致测试结果失真的了。请您有空了确认下。
感谢您的指导!

Administrator
avatar
加入于:
帖子: 4191
声望: 236

这种情况确实有可能,你确定print两个数值,都是完全一样的数据吗?因为某个数据可能后续会带0.000000000000001之类的错误数据(源于Python浮点数精度)

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

鼠标放上去是都是2.78的,round后就没任何问题的了。没用print出来看最终结果的,应该就是浮点数精度导致的。
感谢!

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