Time: 2011-02-01 | Download file:3c_Demark.mq4
/* "Описание индикатора Т.ДеМарка " Во вногие пакеты технического включен индикатор, предложенный Т.ДеМарком. Близкий по смыслу к DMI, но более просто вычисляемый (DEMARK в отличие от ADX, учитывает только экстремальные цены, а не цены закрытия) он дает наглядные сигналы и наравне с другими осцилляторами может быть применен для построения торговых систем. Определение индикатора: если сегодняшний high выше вчерашнего high, то аккумулируем соответствующие разности, если сегодняшний low ниже вчерашнего, то отдельно аккумулируем соответствующие разности (и те и другие - положительные величины). Количество свечей n, по которым происходит аккумулирование (усреднение), является параметром индикатора, равного дроби: DEMARK = (накопленные за n свечей разности high - high[-1]) / ( (накопленные за n свечей разности high - high[-1]) + (накопленные за n свечей разности low[-1] - low) ) При вызове индикатора он запрашивает длину окна усреденения n; по умолчанию предлагается значение n = 13. Чтение этого индикатора во многом аналогично RSI: он также образует области перекупленности и перепроданности, часто показывает хорошие дивергенции. В то же время, во вмогих ситуациях он может иметь преимущества, так как более полно учитывает структуру свечи. © 1997-2005, «FOREX CLUB» http://www.fxclub.org/academy_lib_article/article17.html */ //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ //| 3color_Demark_H.mq4 | //| Copyright © 2005, Nikolay Kositsin | //| Khabarovsk, violet@mail.kht.ru | //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ #property copyright "Nikolay Kositsin" #property link "violet@mail.kht.ru" #property indicator_separate_window #property indicator_minimum -1.0 #property indicator_maximum 1.0 #property indicator_level1 0.7 #property indicator_level2 -0.7 #property indicator_buffers 3 #property indicator_color1 Blue #property indicator_color2 Magenta #property indicator_color3 Purple //---- input parameters extern int DemarkPeriod=13; extern int CountBars=300; //---- buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double HighBuffer []; double LowBuffer []; double MinHigh,MinLow,Up,Down,Demark,trend; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 8 additional buffers are used for counting. IndicatorBuffers(5); if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2) && !SetIndexBuffer(2,ind_buffer3) && !SetIndexBuffer(3,HighBuffer ) && !SetIndexBuffer(4,LowBuffer )) Print("cannot set indicator buffers!"); //---- indicator drow line style. SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID, 3); SetIndexStyle(1,DRAW_HISTOGRAM, STYLE_SOLID, 3); SetIndexStyle(2,DRAW_HISTOGRAM, STYLE_SOLID, 3); //---- name for DataWindow and indicator subwindow label. short_name="Demark("+DemarkPeriod+")"; IndicatorShortName(short_name); SetIndexLabel(0,"DemarkUp"); SetIndexLabel(1,"DemarkDown"); SetIndexLabel(2,"DemarkSt"); //--------------------------------------- SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); //--------------------------------------- SetIndexDrawBegin(0,Bars-CountBars); SetIndexDrawBegin(1,Bars-CountBars); SetIndexDrawBegin(2,Bars-CountBars); //--------------------------------------- return(0); } //+------------------------------------------------------------------+ //| Demark | //+------------------------------------------------------------------+ int start() { int s,limit,counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); if(Bars<=DemarkPeriod) return( 0); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; if(counted_bars=0; j--) { MinHigh=High[j] - High[j+1]; MinLow =Low [j+1]- Low[j]; if(MinHigh>0) HighBuffer[j]=MinHigh; else HighBuffer[j]=0.0; if(MinLow >0) LowBuffer [j]=MinLow; else LowBuffer [j]=0.0; } //------------------------------ for(int k=limit; k>=0; k--) { Up =iMAOnArray(HighBuffer,Bars,DemarkPeriod,0,MODE_SMA,k); Down=iMAOnArray(LowBuffer, Bars,DemarkPeriod,0,MODE_SMA,k); //---- if(Up+Down!=0.0) Demark=2*Up/(Up+Down)-1; else Demark=1.0; //---- +SSSSSSSSSSSSSSSS <<< Three colore code >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ trend=Demark-ind_buffer1[k+1]-ind_buffer2[k+1]-ind_buffer3[k+1]; if (trend>0.0){ind_buffer1[k]=Demark; ind_buffer2[k]=0.0; ind_buffer3[k]=0.0;} else{if(trend<0.0){ind_buffer1[k]=0.0; ind_buffer2[k]=Demark; ind_buffer3[k]=0.0;} else {ind_buffer1[k]=0.0; ind_buffer2[k]=0.0; ind_buffer3[k]=Demark;}} //---- +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ } //---- return(0); } //+------------------------------------------------------------------+