上一篇介紹完了AMA指標後,這篇來介紹一個使用AMA發展出的一個簡易交易系統Adaptive Moving Average Filter
Trade System。
這個交易策略主要概念,使用AMA均線變動的方向判斷多空趨勢方向,為Trend
Following型的策略。
然而在盤整盤無明顯趨勢時,AMA均線的變動方向也會跟著快速反覆的變動,造成反覆過多無效的進場。因此這個策略使用了一個濾網AMAF,來判斷AMA變動方向改變時,何時才是有效的的轉折。
AMA Filter Function程式碼:
//AMAF:Adaptive Moving Average Fltr
Inputs: Period(Numeric), Pcnt(Numeric),LengthF(Numeric),LengthS(Numeric);
Vars: Noise(0), Signal(0), Diff(0), efRatio(0), Smooth(1), Fastest(2/(LengthF+1) ),Slowest( 2/(LengthS+1) ), AdaptMA(0), AMAFltr(0);
Diff = AbsValue(Close - Close[1]);
IF CurrentBar <= Period Then AdaptMA = Close;
IF CurrentBar > Period Then Begin
Signal = AbsValue(Close - Close[Period]);
Noise = Summation(Diff, Period);
if Noise <> 0 then
efRatio = Signal / Noise;
Smooth = Power(efRatio * (Fastest - Slowest) + Slowest, 2);
AdaptMA = AdaptMA[1] + Smooth * (Close - AdaptMA[1]);
AMAFltr = StdDev(AdaptMA-AdaptMA[1], Period) * Pcnt;
End;
AMAF = AMAFltr;
AMAF計算方式如下,計算AMA與前一根AMA[1]的差值,並取其在Period內的標準差,並乘上一個常數Pcnt。
AMAFltr = StdDev(AdaptMA-AdaptMA[1], Period) * Pcnt;
AMA Filter Trade System原始策略程式碼:
//Type: System, Name: Adaptive Moving Average Fltr System
Inputs: Period(10), Pcnt(.15),LengthF(2),LengthS(50);
Vars: AMAVal(0), AMAFVal(0), AMALs(0), AMAHs(0);
AMAVal = AMA(Period,LengthF,LengthS);
AMAFVAl = AMAF(Period, Pcnt,LengthF,LengthS);
IF CurrentBar = 1 Then Begin
AMALs = AMAVal;
AMAHs = AMAVal;
End Else Begin
IF AMAVal < AMAVal[1] Then
AMALs = AMAVal;
IF AMAVal > AMAVal[1] Then
AMAHs = AMAVal;
IF AMAVal - AMALs Crosses Above AMAFVal Then
Buy This Bar on Close;
IF AMAHs - AMAVal Crosses Above AMAFVal Then
Sellshort This Bar on Close;
End;
原始策略只有進場沒有出場條件,因此為永遠持倉多空對翻的策略
價格上漲時,當AMA與AMALs (AMA的相對低點)的差值超過了AMAF,表示有效的往上轉折,進場作多
價格下跌時,當AMA與AMAHs (AMA的相對高點)的差值超過了AMAF,表示有效的往下轉折,進場放空
AMA Filter Trade System台指期回測
以下我將這個原始策略進行了簡單修改,針對台指期進行了回測
AMA參數使用Inputs: Period(10), Pcnt(.25),LengthF(2),LengthS(30);
- 回測商品:台指期TXF1
- 回測時間:2000/01/01~2013/10/11
- 回測手續費:單口來回1,000
- 回測軟體: Multichart
- 回測週期:60 分K
平倉權益曲線
策略績效結果
年週期分析
近期進出場狀況
從回測結果看來,為績效普通的波段策略,但是近期內仍有創高能力。
看勝率好像還是很低,是過濾的不夠嗎?
回覆刪除