網頁
▼
2013年6月27日 星期四
動能指標-ADX與Momentum
在 動能策略 中介紹了基本的momentum,這篇再紀錄常用的動能指標DMI及ADX。
引用 WIKI的解釋 來看,動向指數(Directional Movement Index,DMI),又稱動向指標、趨向指標,由美國威爾德(Welles Wilder JR.)提出的技術分析方法,「基本原理,是股價在上漲及下跌過程中,藉創新高價或新低價的動能,研判多空買賣力道,藉以尋求多空雙方力道的均衡點,以及股價在多空雙方互動下,波動的趨劫循環過程。」
計算的方法和步驟有兩點
一、計算方向指標(Directional Indicator,DI)
二、計算趨向指數(Directional Movement Index,DX)及「平均趨向指數」(Average Directional Movement Index,ADX)
以上都是從WIKI節錄下來的,更詳細的公式可以直接到wiki 研究。
DMI、ADX與momentum都是公開的公式,在Multicharts也都直接有內建的指標可以使用,只要瞭解這個指標的定義和用途,我們不需要去記錄公式和程式函數怎麼寫,想知道時都可以再查。
但怎麼應用到邏輯設計上就很有紀錄的價值了,動能指標是判斷趨勢用的,趨勢明顯時ADX高,沒趨勢時ADX低,那麼我們要在ADX高點追趨勢還是ADX低點佈局下一波趨勢? 這並不是單選,兩者都有理,看你習慣和偏好,以L自己的經驗來說也是兩者都有設計,不過除了ADX之外還可加其它的指標判斷,以這篇紀錄來說,ADX可以搭配momentum。
策略的設計紀錄如下。第一個當盤勢震盪已有一段時間,ADX會回落低點,尋找這個低點的門檻,判斷是適合進場的時機,再用momentum判斷方向,當兩者同時成立是進場建立部位。第二個當ADX已經高過門檻值,表示趨勢已發動一段時間,此時以momentum判斷方向,進場追隨趨勢。
程式的主體如下圖,
有幾個INPUT參數,意義如下,
adxLen: ADX所取用的長度
momLen: Momentum所取用的長度
aThi: ADX進場門檻(低)
aTho1: ADX進場門檻(高)
aTho2: ADX出場門檻(非常低)
mThh及mThl是用來判斷Momentum方向的門檻
部份進出的狀況如下圖,
策略績效如下圖,期間為03年~13年6月,交易費用來回設定共800。
交易策略的評估可以利用這些測試資料推算,評估方式是
1. 交易策略評估-Kelly formula
2. 交易策略評估-獲利風險比
3. 交易策略評估-損益期間
小結論,動能指標是很實用的參考指標,此篇紀錄範例僅是一小例子,也可注意到此例是偏向短趨勢,因為停損停利出場較快,此策略把停損停利拿掉也是獲利,但損益曲線和勝率/盈虧比的表現非常不同,可以多加嘗試。
L
可以跟你請教一下策略參數設定多少嗎?初次學習程式交易
回覆刪除看圖表似乎有使用到SET指令......這個在回測時要開精密回測才行呦!!
回覆刪除HI~ 是的,有用到SetStopLoss和SetPercentTrailing,不過以我目前瞭解,用到這兩個SET並不需要開啟IOG喔。 (你指的精密回測應該是IOG吧,IntraBar Order Generation)
回覆刪除參數設定的話...這個範例是用10分K線,adxLen 80、momLen 40,其他門檻參數和停損停利參數就不寫囉,你可以試一下不同時間週期和參數跑看看最佳化^^。
嗯嗯嗯.....SetStopLoss和SetPercentTrailing最好是開Tick資料去測試喔!!因為SET指令是用到This Bar去執行,所以當你設定的停損或是回落太小時很可能會造成績效看出來很漂亮但是卻完全無法上線執行喔!!等於是漂亮的聖杯!!先撇開SET不管,其實你這策略還不錯,若是好好發揮應該可以寫出不錯的交易程式!!
回覆刪除你說跑跑最佳化....想跟你請教一下最佳化應該怎麼作呢?以這個策略來看,要將程式改成input:aThi(1),aTho1(1),aTho2(1),mThh(1),mThl(1);然後用暴力演算法作1-100最佳化嗎?這樣要跑很久耶,至少要好幾天才跑的完!!不知你都怎麼作呢?還是說有比較好的參數可以提供給小弟?
回覆刪除瞭解,謝謝^^
回覆刪除這個策略的參數設計是由指標觀察來的,如果你有從指標先觀察就可以看到ADX大部份都是10~40 OR 50,Mom則範圍比較大,正負可能到幾百都有。所以我自己在跑這個策略的最佳化是先經過指標畫出來觀察過、有目標參數了,再來小範圍最佳化,是蠻快的。
回覆刪除一般策略應該也都是這樣,自己先有個目標的參數水準再跑附近參數。如果是無頭緒要在大範圍組合找合適參數時,應該至少用四分五分法囉,例如各參數都想測1~100,那各設20為一跳,等於取五分1~20、21~40、41~60...那結果假設變數a是41~60較符合需求,再來跑變數a的40~45、46~50、51~55、56~60,這樣的方式,把每個參數都先切區分,這樣就很快囉^^
讚......大概知道你說的!!謝謝囉^^"
回覆刪除你好,请问c/1000*mThh中的1000怎么来的呢
回覆刪除你好,请问c/1000*mThh中的1000怎么来的,什么意思,谢谢^﹏^
回覆刪除HI
回覆刪除C/1000只是為了方便計算,沒什麼特別意義,因為台指經常是7000~9000點,那除下來的數字就是7~9,然後用這個數字去乘門檻 mThh來找合適的值。
L