2013年12月17日 星期二

MACD指標的另一種策略元素(程式碼)

EasyTrader ArtNo 075
MACD指標又叫指數平滑異同移動平均線,是由查拉爾·阿佩爾(Gerald Apple)所創造的,一種研判股票買賣時機、跟蹤股價運行趨勢的技術分析工具。MACD所考慮的就是,如何把股價運動的方向、速度、加速度更好的表達出來。其中一種求速度變化的思路是:找到兩條均線,例出12日均線和26日均線,明顯的,因為長期均線反應更遲鈍,如果股價加速上漲,12日均線離26日均線的位置就會拉大,反之亦然。我們可以通過求到12日均線和26日均線的差值,來了解速度的變化。在均線的選擇上,我們可以選擇簡單移動均線,即若干天的平均股價,也可以選擇指數移動平均線,即認為近期的股價更重要,賦予近期股價更大的權重,MACD的發明者選擇了後者。要不再求兩條線的差,看看潛藏在其中更深層次的“速度”變化?綜上所述:MACD指標是運用快速(短期)和慢速(長期)指數移動平均線及其聚合與分離的征兆,加以雙重平滑運算。而根據移動平均線原理發展出來的MACD,一則去除了移動平均線頻繁發出假信號的缺陷,二則保留了移動平均線的效果,因此,MACD指標具有均線趨勢性、穩重性、安定性等特點,是用來研判買賣股票的時機,預測股票價格漲跌較好的趨勢技術分析指標 。
以往所熟知的是使用均線在零軸上下或是均線差值的斜率或者是柱狀圖突破/跌破零軸作多空判斷,本篇使用另外的方式以柱狀圖高度來作進出依據,並加上如意多空網來作比較

測試程式碼
inputs:TradeProfit(0.05),TradeStopLoss(0.03),HighBand(40),LowBand(40),UpBand(20),DnBand(20),StepRatio(3) ;
inputs:FastLen(12),SlowLen(26),AvgLen(9),Type(1);
Vars:MP(0),IsBalanceDay(false),DIF_A(0),DIF_B(0),PF(0),PL(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 ;

{ 改變均線比例 }
Value1 = IntPortion(FastLen*StepRatio) ;
Value2 = IntPortion(FastLen*StepRatio/3) ;
if Value1 < FastLen then Value1 = FastLen * 2 ;
if Value2 < FastLen then Value2 = FastLen ;

{柱狀圖高度}
{ 原始參數 12,26,9}
DIF_A = Macd(Close,FastLen,SlowLen)-XAverage(Macd(Close,FastLen,SlowLen),AvgLen) ;
{比例參數 }
DIF_B = Macd(Close,FastLen,Value1)- XAverage(Macd(Close,FastLen,Value1),Value2) ;

Condition1 = DIF_A Cross over HighBand ;
Condition2 = DIF_A Cross under -LowBand ;
Condition3 = DIF_A > UpBand ;
Condition4 = DIF_A < -DnBand ;

Condition5 = DIF_B Cross Over HighBand;
Condition6 = DIF_B Cross Under -LowBand ;
Condition7 = DIF_B > UpBand ;
Condition8 = DIF_B < -DnBand ;

if Type = 1 then Begin
if Condition1 then Sell next Bar at Highest(High,3) stop { Market} ;
if Condition2 then Buy next Bar at Lowest(Low,3) stop {Market} ;
end;
if Type = 2 then Begin
if Condition3 then Buy next Bar at Highest(High,3) stop { Market} ;
if Condition4 then Sell next Bar at Lowest(Low,3) stop {Market} ;
end;
if Type = 3 then Begin
if Condition5 then Buy next Bar at Highest(High,3) stop { Market} ;
if Condition6 then Sell next Bar at Lowest(Low,3) stop {Market};
end;
if Type = 4 then Begin
if Condition7 then Buy next Bar at Highest(High,3) stop { Market} ;
if Condition8 then Sell next Bar at Lowest(Low,3) stop {Market} ;
end;
{ 以下條件加入如意多空網 }
if Type = 5 then Begin
if _MagicQF001(1) = 1 and Condition1 then Sell next Bar at Highest(High,3) stop { Market} ;
if _MagicQF001(1) = -1 and Condition2 then Buy next Bar at Lowest(Low,3) stop {Market} ;
end;
if Type = 6 then Begin
if _MagicQF001(1) = 1 and Condition3 then Buy next Bar at Highest(High,3) stop { Market} ;
if _MagicQF001(1) =-1 and Condition4 then Sell next Bar at Lowest(Low,3) stop {Market} ;
end;
if Type = 7 then Begin
if _MagicQF001(1) =1 and Condition5 then Buy next Bar at Highest(High,3) stop { Market} ;
if _MagicQF001(1) =-1and Condition6 then Sell next Bar at Lowest(Low,3) stop {Market};
end;
if Type = 8 then Begin
if _MagicQF001(1) =1 and Condition7 then Buy next Bar at Highest(High,3) stop { Market} ;
if _MagicQF001(1)=-1 and Condition8 then Sell next Bar at Lowest(Low,3) stop {Market} ;
end;

SetStopLoss(PL * BigPointValue) ;
if IsBalanceDay then SetExitonClose ;

使用 MACD原始參數+柱狀圖高度進出
使用 MACD比例參數+柱狀圖高度進出

使用 MACD原始參數+柱狀圖高度進出再加上如意多空網
使用 MACD比例參數+柱狀圖高度進出再加上如意多空網


沒有留言:

張貼留言