前言
股票或期貨的價格波動,總會有一些可以規律可以遵循的。其中,"背離"也算是其中的一種,並且可以作爲判斷趨勢結束或階段調整的預警信號。
通常情況下,我們所說的"背離"是指價格與技術指標的運動方向發生相反方向的運動的情形。正如下面的MACD頂背離技術形態,仔細觀察價格與MACD兩者的走勢。
如下圖所示:
從上圖中可以看到,價格的波峯一個比一個高,而MACD指標的波峯一浪比一浪低。這就是MACD頂背離!
而MACD底背離,如下圖所示:
其主要特徵與頂背離完全相反!
價格的波谷一個比一個低,而MACD指標的波谷一浪比一浪高。這就是MACD底背離!
一旦價格產生背離,說明價格的原上漲或下跌趨勢的動能減弱,預示着趨勢可能發生反轉或震盪。
至於爲什麼會產生背離,它的內在運行機理是什麼。作者在往期的文章中有專門的一篇文章有非常詳細的講解。
而作者在這期文章中,只分享如何利用Python對MACD頂底背離進行量化,並加入簡單的開平倉指令。
Python 語言中“背離”的量化邏輯
背離的量化,不管是什麼語言它的思路都是相同的。唯一的區別是實現這個功能的表達方式!
在Python中我用了兩個函數分別量化"頂背離"和底背離。下面我以"MACD底背離"爲例,下面是圖解實現過程:
作者通過記錄MACD的金叉死叉時的id,然後通過前後藍色id與紅色id相減,得到計算MACD波谷所需要往前移動的k線數量(從金叉起往前數 n根k線)。
然後利用Python中的max()、min()方法,求出價格及MACD的波谷位置。
當我們量化出第一個後,第二個,第三個的思路是一樣的。同時,計算MACD波谷區間的價格波谷也是這樣的思路。
最後通過條件判斷,找出頂背離或底背離的形態,併發出開倉指令。
Python tqsdk實現MACD頂底“背離”
在上述中,作者分享了關於頂底背離的量化思路。接下來,作者將用五個步驟完成背離的量化。
一、首先,導入相應的包並設置參數變量。
作者用於回測的品種是螺紋鋼指數15分鐘。其中self._lowest_md 和self._highest_md 、self.lowest和self.highest 。
分別表示MACD的波谷值和波峯值、MACD波峯波谷對應的價格波峯波谷值。
二、計算MACD指標以及記錄金叉死叉位置。
作者直接使用天勤量化內置的MACD、金叉和死叉函數進行相應計算,並將結果存入kline中。
作者打印出採用天勤內置的上穿函數的計算結果。當遇到MACD金叉時,值爲1,其他爲0。
並且,天勤的下穿函數crossdown(a,b)的返回值和上穿一致,只有1或0。
如下圖所示:
代碼中的trend_long、trend_short,只記錄MACD上穿或下穿0軸的位置,同樣返回值爲1或0。
上述,作者分享了MACD指標的計算以及金叉死叉位置的標註方法。
下面,作者將利用指標及標註的金叉死叉的位置來計算MACD及對應價格的波峯及波谷。
三、計算出用於判斷頂底"背離"所需要的"波峯波谷"數據
在上個一步驟中,作者已經計算出了MACD金死叉的位置。
因此我們就可以通過這個位置所對應的K線id,推算出死叉到金叉之間經過了多少(n)根k線,並從當前倒推n根k線,得到計算波谷的區間。
作者以“底背離爲例”。
代碼:
其中,核心的計算部分是:self._lowest_md、self.lowest這兩個列表存儲着用於判斷底背離的指標及價格的波谷數據。
而這段代碼的最後一部分,當指標在零軸之上時,重置列表及記錄的金叉死叉的id,以便於在新一輪0軸以下再記錄。
同時,頂背離的計算結構與底背離是一致的。
如下圖所示:
四、判斷頂底背離並加入簡單的開平倉指令
這一部分,作者按照開篇所講的“頂背離”和“底背離”的判斷標準來判斷並加入開平倉指令。
1.開倉部分:
2.平倉部分:當平倉後,使用del 刪除列表中已經使用過的波峯波谷值的前一值。
最主要的部分是這段代碼:第一個If是判斷是否是“底背離”,第二個If判斷是否是“頂背離”。如果條件滿足,則開倉1手。
五、調用main() 函數,啓動策略。
驗證代碼的正確性:底背離爲例。
1.金叉:
2.底背離:
小結
上述是用Python語言藉助天勤量化平臺,量化MACD背離的整個過程。
其中重點在於波峯波谷值的計算和背離的判斷,難點在於如何通過控制代碼的運行順序進行計算。
最後
"背離",僅判斷趨勢的動能減弱,而不一定預示着趨勢會反轉。因爲,很有可能是原趨勢的階段性調整,也有可能進入長期的震盪之中。
很有可能,在價格突破或跌破頂背離或底背離區域後,一飛沖天或是一瀉千里!
我們團隊有着十幾年的期貨程序化交易算法與軟件研發經驗,基於C++ Qt技術研發了具有自主知識產權的期貨智能程序化交易一體化系統平臺,該平臺封裝了二百多個量化指標,具有低時延、高性能、小滑點、可定製和跨平臺的特點。團隊致力於將人工智能技術與傳統的程序化交易技術相結合爲客戶提供靈活可定製的期貨智能程序化交易服務和產品。