在實盤交易程序啓動前,系統會執行一次檢查,出現如下異常時實盤不可啓動:安全
運行中(或着正在執行啓動前檢查)的實盤,不能更改當前實盤的策略&API key配置,且當前配置的策略&API key被鎖定,沒法進行編輯或刪除操做,直到實盤中止運行時解鎖。函數
當實盤交易程序在運行過程當中遇到如下異常狀況時,默認會報錯並自動中止運行:設計
以上這種嚴格的異常中止機制可以在最大程度上保證明盤運行的準確性和安全性,但也在必定程度上喪失了連續性和容錯能力。因此咱們額外提供了實盤運行異常時的自動重啓和錯誤恢復功能,從而實現實盤程序持續長久託管運行,您能夠在新建/設置實盤交易時自行選擇是否開啓(默認不開啓)。如下是兩個功能的介紹:日誌
用戶開啓自動重啓選項之後,若實盤運行過程當中因出現異常而自動中止,則系統會在實盤中止24小時內不斷嘗試重啓,直到該實盤啓動成功正常運行爲止。重啓做爲一個新的實盤運行實例,與啓動實盤策略邏輯相同(從下一個frequency週期開始運行,輸出日誌有重啓提示,並推送啓動通知),目前不保留中間狀態。下次中止時若是自動重啓選項開啓,則從新計時,相同操做。用戶點擊中止則不會觸發重啓。(注:這個功能不能徹底保證明盤策略執行的連續性,若是用戶實盤是在frequency週期的末尾臨界時間結束並退出,跨frequency週期重啓時,因爲是等待下一個frequency週期到達,則會出現跳frequency週期的執行,所以,這個功能不是萬能的。因此有了下邊個功能設計。)基礎
用戶開啓錯誤恢復選項之後,則實盤在運行過程當中出現異常並不會馬上中止運行, 而是會保留現有的運行時上下文,等待下一個frequency週期到達後(若是行情推送沒有按時到達,則記爲一次恢復失敗,繼續等待下一個frequency週期),執行新的handle_data()函數(上一個handle_data函數已經執行完畢,或已經被Kill)。(這裏須要注意潛在運行風險,若是用戶依賴歷史運行狀態,例如經過user_data來計算趨勢,則在跳過上一個frequency週期,直接運行下一個frequency週期的handle_data函數時候,可能會使趨勢的判斷不許確,形成策略異常。)錯誤恢復時,會對現有的訂單記錄、持倉記錄進行合併,缺失的分析指標基礎數據會進行插值,輸出錯誤恢復日誌,並附帶錯誤恢復計數。每一次錯誤恢復,錯誤計數加1,連續5次錯誤恢復就錯誤恢復計數爲5,第六次錯誤恢復不進行恢復,直接退出。若是錯誤恢復成功,則錯誤計數清零。配置
不管是您手動中止實盤,仍是實盤運行中出錯自動中止,系統都會在中止時撤銷您當前委託中的訂單,以避免形成損失。(當您的實盤程序是因API key失效致使自動中止時,系統沒法撤銷您當前委託中的訂單)語法