2014年10月6日 星期一

DEM指標 [程式碼]

EasyTrader ArtNo 207
DEM指標由德馬克DeMark創造,用於顯示買進/賣出的機會。市場運行指標表示價格改變所對應的峰頂和谷底。是把當前時段最大值和上一時段的最大值進行比較的的一個指標。
 如果當前時段數值高於上一時段的數值時,就登記兩個時段的差額。如果當前時段低於或等於上一時的數值時,就登記零值。彙總所得到的N個時段的差額,所獲得的數值作為去DEM技術指標的計數器數值,然後將這個數值除以相同的數值加上前一時段最小值和當前最小值差額的總值。如果當前價格最小值大於上一時段的最小值,就登記零值。
 當該指標數值低於30時,我們可以預計一個牛市價格的反轉。當該指數值高於70時,將可能會出現熊市價格的反轉。
 當你使用持續時間較長的時段,計算指標數值時,就能夠抓住一個長期的市場走勢。根據持續時間比較短的時段的指標可以在一個風險較小的時間進入市場,並且可以計算交易時間,以便那個時間恰巧與市場主要趨勢時間同步。

DEM指標的計算方法
 以I為間隔的DEM指標的數值的計算方法如下:
 1、DeMax(i)的計算:
  如果high(i) > high(i-1) , 則DeMax(i) = high(i)-high(i-1), 否則DeMax(i) = 0
 2、DeMin(i)數值的計算:
  如果low(i) < low(i-1), 則DeMin(i) = low(i-1)-low(i), 否則DeMin(i) = 0
 3、DEM指標數值的計算:
  DMark(i) = SMA(DeMax,N)/(SMA(DeMax,N)+SMA(DeMin,N))
有點類似 RSI 相對強弱指標的概念。

利用方法
  1. 該指標在0-100的區間波動,
  2. 當該指標大於70的時候,價格可能向下逆轉
  3. 當該指標低於30的時候,價格可能向上逆轉

測試程式碼
input:EntryType(1),ExitType(2) ;
inputs:NBarL(2),NBarS(2),TradeProfit(0.045),TradeStopLoss(0.034),ATRs_L(5.4),ATRs_S(10.9);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
inputs:LongBar(12),ShortBar(10),HB(40),LB(40),StdL(1.9),StdS(0.6) ;
Vars:DeMax(0),DeMin(0),DeMark(0), SumDem(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 ;

{ DEM 指標計算 }
DeMax = iff(High > High[1] , High-High[1] , 0) ;
Demin = iff(Low < Low[1] , Low[1]-Low , 0) ;
SumDem = Average(DeMax,LongBar)+Average(Demin,LongBar) ;
if SumDem <> 0 then DeMark = Average(DeMax,LongBar)/SumDem * 100;


{ 加上布林帶通道當濾網 }
if EntryType = 1 then Begin
if DeMark > HB and AvgPrice > BollingerBand(Close,LongBar,StdL) then Buy next bar at Highest(High,3) stop ;
if DeMark < LB and AvgPrice < BollingerBand(Close,LongBar,-StdL) then Sell next bar at Lowest(Low,3) stop ;
end;
{ 加上平均線當濾網 }
if EntryType = 2 then Begin
if DeMark Cross over Average(DeMark,5) and Demark > HB then Buy next bar at Market {Highest(High,3) stop} ;
if DeMark Cross under Average(DeMark,5) and Demark < LB then Sell next bar at Market {Lowest(Low,3) 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;

if IsBalanceDay then setExitonClose ;
台指期 日K 多空留倉 交易週期 2004/8/31~ 2014/8/29 交易成本 1200
 台指期 60 min K 多空留倉 交易週期 2004/8/31~ 2014/8/29 交易成本 1200
 台指期 30 min K 多空留倉 交易週期 2004/8/31~ 2014/8/29 交易成本 1200
布林通道當濾網的表現較佳
MagicQS104

2 則留言: