溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VNPY中開盤前掛單失效的解決方法

發(fā)布時(shí)間:2021-12-04 15:23:21 來源:億速云 閱讀:176 作者:柒染 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)VNPY中開盤前掛單失效的解決方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

在VNPY量化交易平臺(tái)中,掛停止單(STOP Order)是交易發(fā)起的常見方式,停止單是至一旦價(jià)位到了預(yù)定點(diǎn)位,才啟動(dòng)交易的訂單。

期貨早盤9點(diǎn)和夜盤9點(diǎn)剛剛開票十分鐘,往往是波動(dòng)最大的時(shí)段,交易機(jī)會(huì)很多。但是VNPY存在明明應(yīng)該掛著停止單,在開盤時(shí)候就沒有了,應(yīng)該是在開盤時(shí)刻,所有掛單都是失效了,雖然這些掛單是在VNPY內(nèi)部失效,但是也會(huì)失效。具體代碼看了半天,還是沒有找到具體原因。

這里提供一個(gè)臨時(shí)修補(bǔ)方法。

  1. 定義一個(gè)全局策略變量stopOpenOrder, 默認(rèn)值為False;

    定義個(gè)全局變量status,默認(rèn)值為NA,放在策略判斷交易代碼中,一旦觸發(fā)掛單,更新這個(gè)為掛單方向。

    最后把停止單掛單價(jià)格也設(shè)為全局變量


     2.覆蓋停止單推送function,一旦有開單,這個(gè)stopOpenOrder變?yōu)門rue

    def onStopOrder(self, so):

        """停止單推送"""

        self.writeCtaLog(u'%s阻止單, 品種:%s, 狀態(tài): %s, 方向:%s,價(jià)格:%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時(shí)候, 如果status是buy 或者short,進(jìn)行相應(yīng)掛單。

    def onTick(self, tick):

        """收到行情TICK推送(必須由用戶繼承實(shí)現(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í)際測試中,如果符合掛單條件,但是并沒有開出掛單,當(dāng)?shù)谝粋€(gè)tick到來時(shí)候,會(huì)自動(dòng)掛單。

關(guān)于VNPY中開盤前掛單失效的解決方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI