- BackTrader量化交易案例圖解
- 何海群
- 711字
- 2020-11-24 13:23:53
3.4 策略編程模板
BackTrader策略的編寫,對于初學者來說有一定的門檻,所以筆者特意開發了一個策略編程模板,方便大家套用。大家可以通過該模板,編寫出風格一致的策略程序。
策略編程模板代碼如下:


策略編程模板當中的log輸出函數主要用于信息輸出和編程調試。
在策略代碼模板中,最常用的兩個核心函數如下。
● init:初始化函數。
● next:節點策略執行函數。
如圖3-4所示是BackTrader量化軟件中的ma_CrossOver均線交叉策略的模塊架構圖。

圖3-4 ma_CrossOver均線交叉策略模塊架構圖
這里強調一下,class屬于面向對象類定義函數。初學者在使用Python進行編程時,最好采用面向過程的Basic語言編程模式,因為class函數編程的代碼非常煩瑣。
大家可以看一看案例中的class面向對象類的策略代碼,我們只是想看看每天的收盤價格,結果出現一大堆代碼,而真正有用的只有next函數中的一條代碼:

雖然OOP面向對象開發模式的爭議很多,但是,對于BackTrader這種大型軟件項目來說,OOP面向對象開發模式還是有一定價值的。例如,方便代碼復用、自行擴展,以及在使用時可以采用簡單的模板調用方式等。
下面看看案例策略的具體代碼。
這里不用過多關注log函數,因為它只是用于輸出信息。

init初始化函數:

案例策略中的交易價格數據,采用的是收盤價。程序代碼使用dataclose,作為收盤價的別名或者短名稱、變量名。
在本案例中只有一只股票,如果有多只股票,則數據代碼會有所不同。
本案例中策略編程的重點是next節點策略執行函數,代碼如下:

本案例的策略編程使用的是空策略,所以系統只顯示每天的交易價格:收盤價數據。輸出的收盤價,交易數據是按日期的正序排序的,最新的日期輸出在最后面。
next節點策略執行函數,主要負責對買賣點交易時間進行篩選。實際交易時間是第二天或者后續時間,所以用next作為函數名稱,表示下一個交易節點需要處理的事情。