十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章將為大家詳細講解有關(guān)VNPY中開盤前掛單失效的解決方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
在VNPY量化交易平臺中,掛停止單(STOP Order)是交易發(fā)起的常見方式,停止單是至一旦價位到了預定點位,才啟動交易的訂單。
期貨早盤9點和夜盤9點剛剛開票十分鐘,往往是波動大的時段,交易機會很多。但是VNPY存在明明應該掛著停止單,在開盤時候就沒有了,應該是在開盤時刻,所有掛單都是失效了,雖然這些掛單是在VNPY內(nèi)部失效,但是也會失效。具體代碼看了半天,還是沒有找到具體原因。
這里提供一個臨時修補方法。
定義一個全局策略變量stopOpenOrder, 默認值為False;
定義個全局變量status,默認值為NA,放在策略判斷交易代碼中,一旦觸發(fā)掛單,更新這個為掛單方向。
最后把停止單掛單價格也設(shè)為全局變量
2.覆蓋停止單推送function,一旦有開單,這個stopOpenOrder變?yōu)門rue
def onStopOrder(self, so):
"""停止單推送"""
self.writeCtaLog(u'%s阻止單, 品種:%s, 狀態(tài): %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推送(必須由用戶繼承實現(xiàn))"""
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)
在實際測試中,如果符合掛單條件,但是并沒有開出掛單,當?shù)谝粋€tick到來時候,會自動掛單。
關(guān)于VNPY中開盤前掛單失效的解決方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。