第一章:4 策略模組化


Posted by nightqwq on 2021-12-07

在加密貨幣市場當中,不同的幣種有不同的價格和市場波動,所以也可以針對個別幣種來做策略,於是自然而然會累積許多策略。

然而每當要拿以前做過的策略出來用時,要重打程式碼是一件很煩人的事,於是接下來,我們要試著將策略進行打包,這樣以後不管是要拿出來用,還是要上傳到 Google cloud 自動運行都會變得很方便。

a. 什麼是 Decorator

Decorator 也叫裝飾器,它能夠在不更改程式碼的狀況下為程序附加特殊功能,而這些特殊功能 finlab_crypto 也早已幫我們寫好,現在就讓我們見識加上 finlab_crypto 自家的 Decorator 對我們的程序有怎樣的影響。


b. 策略裝入函式

在上次製作策略圖表那行程式碼複製圖片上反白位置,在新儲存格中貼上,並寫上:

def sma_strategy(ohlcv):

讓其餘程式碼往前四格,使整個策略變成一個函式:

之後在函式最下方 return 出場點和進場點,寫完後可以自行 run 看看,與上一章相同,會獲得時間序列:


c. 策略打包

接下來就是重頭戲了,我們在函式上方從 finlab_crypto 的裡面導入 Strategy:

from finlab_crypto import Strategy

再下一行寫入:

@Strategy()

上一行有小老鼠的程式碼就是 finlab_crypto 自家的 Decorator。

於是,我們的雙均線策略就會多出許多功能,宛如穿上強化裝備一般,比如與上一章的 vectorbt 相似,輸入:

portfolio = sma_strategy.backtest(ohlcv, freq='4h', plot=True)

效果如下:

我們成功製作了一個可移動的可視化回測圖表,圖中的藍色箭頭往上升,代表該區間斷獲利,往下則是虧損。

第二張圖表表示確切的買入賣出時間段,第三章則是累積報酬率:

我們也可以將雙均線加入回測圖表裡,來看看策略是否真的在黃金交叉時買入,死亡交叉時賣出,只要利用 Python 的高級資料結構「字典」就可以辦到。

我們在函式里最後一行的 return 上方寫一個字典,把變數取叫「figures」,我們希望均線能夠跟著價格跑,所以在字典裡寫上「'overlaps'」這個變數再做一個字典,並把雙均線寫進裡面,鍵對應到值:

 figures = {'overlaps': {'sma20': sma20,'sma60': sma60}}

把 figure 加入 return 裡面作為返回值的第三個參數,再重新運行即可看到雙均線:

可以看到,策略確實有在黃金交叉、死亡交叉的時候進行買入和賣出,也就是箭頭的開頭總是會在雙均線交叉附近(箭頭開始買入,箭頭末尾賣出)。

最後,我們將程式最下方把那行叫出視覺化圖表的程式碼存進 portfolio 這個變數裡面,以利後續跟 vectorbt 結合,激盪出更多強力的效果。

portfolio = sma_strategy.backtest(ohlcv, freq='4h', plot=True)

今天先到這邊。

下一節,我們來試著找出策略的最佳參數。


#加密貨幣 #Python







Related Posts

Day02  深入了解 Lazy-load 的背後實作 - Intersection Observer API

Day02 深入了解 Lazy-load 的背後實作 - Intersection Observer API

Day 102

Day 102

Day03 : 字典、集合

Day03 : 字典、集合


Comments