扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关VNPY中开盘前挂单失效的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、虚拟空间、营销软件、网站建设、安源网站维护、网站推广。在VNPY量化交易平台中,挂停止单(STOP Order)是交易发起的常见方式,停止单是至一旦价位到了预定点位,才启动交易的订单。
期货早盘9点和夜盘9点刚刚开票十分钟,往往是波动大的时段,交易机会很多。但是VNPY存在明明应该挂着停止单,在开盘时候就没有了,应该是在开盘时刻,所有挂单都是失效了,虽然这些挂单是在VNPY内部失效,但是也会失效。具体代码看了半天,还是没有找到具体原因。
这里提供一个临时修补方法。
定义一个全局策略变量stopOpenOrder, 默认值为False;
定义个全局变量status,默认值为NA,放在策略判断交易代码中,一旦触发挂单,更新这个为挂单方向。
最后把停止单挂单价格也设为全局变量
2.覆盖停止单推送function,一旦有开单,这个stopOpenOrder变为True
def onStopOrder(self, so):
"""停止单推送"""
self.writeCtaLog(u'%s阻止单, 品种:%s, 状态: %s, 方向:%s,价格:%s' % (self.name, so.vtSymbol, so.status, so.orderType, so.price))
if so.offset == OFFSET_OPEN:
self.stopOpenOrder = True
self.putEvent()
3.覆盖OnTick function, 如果pos为空,stopOpenOrder == False时候, 如果status是buy 或者short,进行相应挂单。
def onTick(self, tick):
"""收到行情TICK推送(必须由用户继承实现)"""
if self.pos == 0 and self.stopOpenOrder == False:
if self.status == "buy":
self.buy(self.buyPrice, self.fixedSize, True)
elif self.status == "short":
self.short(self.shortPrice, self.fixedSize, True)
self.bg.updateTick(tick)
在实际测试中,如果符合挂单条件,但是并没有开出挂单,当第一个tick到来时候,会自动挂单。
关于VNPY中开盘前挂单失效的解决方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流