vn.py 是我們常用來做 CTA 策略的交易平台,具體的安裝可參考之前的文章《基於 VN.PY 的 CTA 策略入門心得》。vn.py 的 CTA 策模塊中有一塊叫做回調函數,包括 on_init (),on_start (),on_bar () 等。我們大多數的時候會關注 on_bar () 函數的內容,因為那是具體策略的內容,不過也不能忽視其他回調函數,比如說 on_init ()。
on_init () 一共沒有幾行程式,但並不是表面上看上去的簡單。我們很多人對他的理解還是停留在完成變量初始化操作,並通過主動函數 self.load_bar (10) 載入所需的歷史數據(在策略初始化時候,會調用 K 線時間序列管理器計算並緩存相關的計算指標,但是並不觸發交易)。其實,on_init () 還有一個容易被忽視掉的作用,就是恢復上次退出之前的策略狀態,具體表現為從.vntrader/cta_strategy_data.json 內讀取策略參數,最新的技術指標,以及持倉數量(pos),並把這些數值還原回來。
參考如下的例子,cta_strategy_data.json 中內容如下:
{
"rbS": {
"pos": -12,
"initial_sell": 3470,
"initial_cover": 3500,
"step": 20
}
}
這種情況下,如果我們重新啟動一個 CTA 策略,並且命名為 rbS 的話,那麼上述策略的參數會在初始化的時候被重新加載,而無視新的程式,效果參考如下:
所以,如果是準備重新啟動一個 CTA 策略,那不妨直接刪除 cta_strategy_data.json 文件或刪除其中相關部分,否則往往和期望的初始化不一致。