前言股票或期貨的價(jià)格波動,總會有一些可以規(guī)律可以遵循的。其中,'背離'也算是其中的一種,并且可以作為判斷趨勢結(jié)束或階段調(diào)整的預(yù)警信號。 通常情況下,我們所說的'背離'是指價(jià)格與技術(shù)指標(biāo)的運(yùn)動方向發(fā)生相反方向的運(yùn)動的情形。正如下面的MACD頂背離技術(shù)形態(tài),仔細(xì)觀察價(jià)格與MACD兩者的走勢。 如下圖所示: 從上圖中可以看到,價(jià)格的波峰一個比一個高,而MACD指標(biāo)的波峰一浪比一浪低。這就是MACD頂背離! 而MACD底背離,如下圖所示: 其主要特征與頂背離完全相反! 價(jià)格的波谷一個比一個低,而MACD指標(biāo)的波谷一浪比一浪高。這就是MACD底背離! 一旦價(jià)格產(chǎn)生背離,說明價(jià)格的原上漲或下跌趨勢的動能減弱,預(yù)示著趨勢可能發(fā)生反轉(zhuǎn)或震蕩。 至于為什么會產(chǎn)生背離,它的內(nèi)在運(yùn)行機(jī)理是什么。作者在往期的文章中有專門的一篇文章有非常詳細(xì)的講解。 而作者在這期文章中,只分享如何利用Python對MACD頂?shù)妆畴x進(jìn)行量化,并加入簡單的開平倉指令。 Python 語言中'背離'的量化邏輯背離的量化,不管是什么語言它的思路都是相同的。唯一的區(qū)別是實(shí)現(xiàn)這個功能的表達(dá)方式! 在Python中我用了兩個函數(shù)分別量化'頂背離'和底背離。下面我以'MACD底背離'為例,下面是圖解實(shí)現(xiàn)過程: 作者通過記錄MACD的金叉死叉時(shí)的id,然后通過前后藍(lán)色id與紅色id相減,得到計(jì)算MACD波谷所需要往前移動的k線數(shù)量(從金叉起往前數(shù) n根k線)。 然后利用Python中的max()、min()方法,求出價(jià)格及MACD的波谷位置。 當(dāng)我們量化出第一個后,第二個,第三個的思路是一樣的。同時(shí),計(jì)算MACD波谷區(qū)間的價(jià)格波谷也是這樣的思路。 最后通過條件判斷,找出頂背離或底背離的形態(tài),并發(fā)出開倉指令。 Python tqsdk 實(shí)現(xiàn)MACD頂?shù)?#39;背離'在上述中,作者分享了關(guān)于頂?shù)妆畴x的量化思路。接下來,作者將用五個步驟完成背離的量化。 一、首先,導(dǎo)入相應(yīng)的包并設(shè)置參數(shù)變量。 作者用于回測的品種是螺紋鋼指數(shù)15分鐘。其中self._lowest_md 和self._highest_md 、self.lowest和self.highest 。 分別表示MACD的波谷值和波峰值、MACD波峰波谷對應(yīng)的價(jià)格波峰波谷值。 二、計(jì)算MACD指標(biāo)以及記錄金叉死叉位置。 作者直接使用天勤量化內(nèi)置的MACD、金叉和死叉函數(shù)進(jìn)行相應(yīng)計(jì)算,并將結(jié)果存入kline中。 作者打印出采用天勤內(nèi)置的上穿函數(shù)的計(jì)算結(jié)果。當(dāng)遇到MACD金叉時(shí),值為1,其他為0。 并且,天勤的下穿函數(shù)crossdown(a,b)的返回值和上穿一致,只有1或0。 如下圖所示:
代碼中的trend_long、trend_short,只記錄MACD上穿或下穿0軸的位置,同樣返回值為1或0。
上述,作者分享了MACD指標(biāo)的計(jì)算以及金叉死叉位置的標(biāo)注方法。 下面,作者將利用指標(biāo)及標(biāo)注的金叉死叉的位置來計(jì)算MACD及對應(yīng)價(jià)格的波峰及波谷。 三、計(jì)算出用于判斷頂?shù)?#39;背離'所需要的'波峰波谷'數(shù)據(jù) 在上個一步驟中,作者已經(jīng)計(jì)算出了MACD金死叉的位置。 因此我們就可以通過這個位置所對應(yīng)的K線id,推算出死叉到金叉之間經(jīng)過了多少(n)根k線,并從當(dāng)前倒推n根k線,得到計(jì)算波谷的區(qū)間。
作者以“底背離為例”。 代碼:
其中,核心的計(jì)算部分是:self._lowest_md、self.lowest這兩個列表存儲著用于判斷底背離的指標(biāo)及價(jià)格的波谷數(shù)據(jù)。
而這段代碼的最后一部分,當(dāng)指標(biāo)在零軸之上時(shí),重置列表及記錄的金叉死叉的id,以便于在新一輪0軸以下再記錄。
同時(shí),頂背離的計(jì)算結(jié)構(gòu)與底背離是一致的。 如下圖所示:
四、判斷頂?shù)妆畴x并加入簡單的開平倉指令 這一部分,作者按照開篇所講的“頂背離”和“底背離”的判斷標(biāo)準(zhǔn)來判斷并加入開平倉指令。 1.開倉部分:
2.平倉部分:當(dāng)平倉后,使用del 刪除列表中已經(jīng)使用過的波峰波谷值的前一值。
最主要的部分是這段代碼:第一個If是判斷是否是“底背離”,第二個If判斷是否是“頂背離”。如果條件滿足,則開倉1手。
五、調(diào)用main() 函數(shù),啟動策略。
驗(yàn)證代碼的正確性:底背離為例。 1.金叉:
2.底背離:
小結(jié)。 上述是用Python語言借助天勤量化平臺,量化MACD背離的整個過程。 其中重點(diǎn)在于波峰波谷值的計(jì)算和背離的判斷,難點(diǎn)在于如何通過控制代碼的運(yùn)行順序進(jìn)行計(jì)算。 最后'背離',僅判斷趨勢的動能減弱,而不一定預(yù)示著趨勢會反轉(zhuǎn)。因?yàn)?,很有可能是原趨勢的階段性調(diào)整,也有可能進(jìn)入長期的震蕩之中。 很有可能,在價(jià)格突破或跌破頂背離或底背離區(qū)域后,一飛沖天或是一瀉千里! |
|
|