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

请教一下,我想在收盘前关仓,所以用了下面代码,

exit_time = time(14, 59, 57)

def on_tick(self, tick: TickData):
self.bg_x.update_tick(tick)
self.price = tick.last_price

    if tick.datetime.time() == self.exit_time:
       if self.pos > 0: 
         self.sell(tick.last_price*0.98, abs(self.pos))
       elif self.pos <0:
         self.cover(tick.last_price*1.02, abs(self.pos))

今天试了几个不同品种,有几个按照时间点关仓了,有几个并没有发出委托单,这是怎么回事呢? 是不是和self.pos的值有关?但当时所有品种是都有持仓的。self.pos的值是怎么更新的呢?

Administrator
avatar
加入于:
帖子: 4881
声望: 284

因为你用的是==判断,不是所有合约都保证那个时间点有TICK的,换成>=试试吧

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

感谢回复!如果换成>=的话,tick的更新速度快,有没有可能出现因self.pos的值更新慢了,(虽然仓位已经平掉,但self.pos值不为0), 然后出现连续下单的情况?我有一次在模拟账户上好像碰到过这种情况。

Administrator
avatar
加入于:
帖子: 4881
声望: 284

TICK级别去挂撤单,要自己通过算法状态机实现细粒度控制,上面这种粗放的写法是分钟线级别逻辑用的

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

多谢提示!请问“通过算法状态机实现细粒度控制” 这部分的具体做法在哪儿能查到吗? 我在全实战进阶里好像没看见有。

Administrator
avatar
加入于:
帖子: 4881
声望: 284

这块是比较复杂的主题,论坛上有一些大家分享的经验,可以先学习看看,但是在比较清楚掌握之前不建议用在实盘上,另外就是我们每年2次的【CTA策略小班课】会有详细讲解

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

沪公网安备 31011502017034号