2015年3月5日 星期四

開發商品的交易系統 - 基礎篇 [30]

EasyTrader ArtNo 250
在技術分析中,可客觀反映趨勢強度的一項指標。ADX是一個非定向指標,無論是上升是下跌,都可反映趨勢的強度。平均趨向指數(ADX)由Wells Wilder發明的,該指標通過動態交易時段的最高值和最低值的分析來確定趨勢的力量和價位未來的波動;在技術分析中,通常被視作可客觀反映趨勢強度的一項指標。
ADX上漲:ADX高於25,通常證明具備趨勢,趨勢發展的力度上漲,可參考結合趨勢指標;
ADX下跌:ADX低於20,通常證明缺少趨勢,趨勢發展的可能性低,可參考結合震盪指標。
指數平滑移動平均線 (EMA) 將過去某特定時間內的價格取其平均值,它比重以平均線的長度設定,愈近期的收市價,對市況影響愈重要。如較前的收市價數據沒有移動,他們只會有輕微的影響。
指數移動平均線的公式如下:
計算方式:
1.以當天收盤價當第1天指數平均線 數值得EXP
2.今日指數移動平均值=(今日收盤價 -前一日之EXP)*Y+ 前一日之EXP
3.Y=指數係數(Exponential Percentag-e)=2/(期間N+1)

上揚的移動平均線可看做是股價維持多頭的支撐線,股價回跌至平均線附近,均線自然會產生支撐股價的力量,便是買進時機;這是平均線「平均成本」的觀念產生助漲功效。
下彎的移動平均線可看做是股價維持空頭的壓力線,當股價再度上昇至平均線附近,股價可能會突破均線後再跌破,或只是到達平均線下方便再度回落,最好不要燥進,以免進入平均線的助跌效應範圍。
平均趨向指標ADX與指數移動平均線是兩個常用來追蹤趨勢的技術指標,本篇介紹將兩者一起應用所開發的交易策略( EMA & ADX 組合)

{系統參數與變數}
input:EntryType(10),ExitType(5);
vars:NBarL(30),NBarS(18),TradeProfit(0.045),TradeStopLoss(0.01),ATRs_L(6.7),ATRs_S(8.8);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);

vars: AvgLen(30), ADXLen(12), EntryBar(2);
Vars: UpperMA(0), LowerMA(0), ADXValue(0), ChanSpread(0), BuySetup(False), SellSetup(False), BuyTarget(0), SellTarget(0), MROBS(0), MROSS(0);

MP = MarketPosition ;

if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

{利用K棒高低價的指數平均數作通道}
UpperMA = XAverage(High, AvgLen)[1];
LowerMA = XAverage(Low, AvgLen)[1];
ADXValue = ADX(ADXLen);
ChanSpread = (UpperMA - LowerMA) / 2;

{買方環境建立 - 收盤價大於高通道 且 ADX 上升}
BuySetup = Close > UpperMA AND ADXValue > ADXValue[1];
{多方進場價計算}
IF BuySetup Then BuyTarget = Close + ChanSpread;

{賣方環境建立 - 收盤價小於低通道 且 ADX 上升}
SellSetup = Close < LowerMA AND ADXValue > ADXValue[1];
{空方進場價計算}
IF SellSetup Then SellTarget = Close - ChanSpread;

{ 條件成立後,幾根K棒內有效 }
MROBS = MRO(BuySetup, EntryBar, 1);
MROSS = MRO(SellSetup, EntryBar, 1);

{策略1 - 收盤價+通道寬度/2 為進場價格}
if EntryType = 1 then Begin
IF MROBS <> -1 AND MP <> 1 Then Buy Next Bar at BuyTarget Stop;
IF MROSS <> -1 AND MP <> -1 Then Sell Next Bar at SellTarget Stop;
end;
{策略2  - 收盤價突破 N 根K棒高低點作進場價格}
if EntryType = 2 then Begin
  IF MROBS <> -1 AND MP <> 1  Then Buy Next Bar at Highest(High,HighBar) Stop;
  IF MROSS <> -1 AND MP <> -1  Then Sell Next Bar at Lowest(Low,LowBar) Stop;
end;

{出場規則}
if ExitType = 6 then Begin
ExitLong Next Bar at LowerMA-1 Stop;
ExitShort Next Bar at UpperMA+1 Point Stop;
end;

if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;

{ 結算日增加 20150224 }
if IsBalanceDay or Date = 1150224 then setExitonClose ;

 策略1台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200

策略2台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200
結論:在相同的邏輯條件下,不同的進場價格顯示出明顯的差異,可見即使是耳熟能詳的傳統指標也能有獲利的能力! 如果我們再多觀察ADX指標的變化可以發現當 ADX 的數值在某一數值以下才進場時 即使是策略一也能有績效提升30%達 200 W左右的改善喔
MagicQS158

沒有留言:

張貼留言