本篇文章為大家展示了VNPY重新啟動后沒有停止掛單原因和解決方法是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
之前在這個鏈接里面,提了vnpy重啟后,比如開盤前開始,即使符合掛單條件,也沒有掛單出現的問題,給了一個比較麻煩的方法。
后來研究代碼,發現原因應該是:
程序用onInit(self) 初始化回放數據,但是此時self.trading 為false,不會發出停止單;而啟動onStart時候,不會重新回放啟動,也就不會有掛單,這樣重啟第一個時間K線是沒有停止單在的。
由于歷史回測是連續的K線,這樣也就是造成回測和實盤差異較大。
之前鏈接解決方法比較復雜,簡單解決方法就是把回放最后一個bar放在onStart里面跑,這時候self.trading 為True,允許掛單。
1. 修改策略的onInit(self) ,回放不包括最后一個bar
def onInit(self): """初始化策略(必須由用戶繼承實現)""" self.writeCtaLog(u'%s策略初始化' % self.name) # 載入歷史數據,并采用回放計算的方式初始化策略數值 initData = self.loadBar(self.initDays) for bar in initData[:-1]: self.onBar(bar) self.putEvent()
2.給onStart加入最后一個bar回放,
def onStart(self): """啟動策略(必須由用戶繼承實現)""" initData = self.loadBar(1) bar = initData[-1] self.onBar(bar) self.writeCtaLog(u'%s策略啟動' % self.name) self.putEvent()
上述內容就是VNPY重新啟動后沒有停止掛單原因和解決方法是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。