//+------------------------------------------------------------------+
//| DeMarker.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_level1 0.3
#property indicator_level2 0.7
//---- input parameters
extern int DeMarkerPeriod=14; //---- buffers
double DeMarkerBuffer[]; double ExtMaxBuffer[]; double ExtMinBuffer[]; //+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name; //---- 2 additional buffers are used for counting.
IndicatorBuffers(3); SetIndexBuffer(0,DeMarkerBuffer); SetIndexBuffer(1,ExtMaxBuffer); SetIndexBuffer(2,ExtMinBuffer); //---- indicator line
SetIndexStyle(0,DRAW_LINE); //---- name for DataWindow and indicator subwindow label
short_name="DeM("+DeMarkerPeriod+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- first values aren't drawn
SetIndexDrawBegin(0,DeMarkerPeriod); //----
return(0); }
//+------------------------------------------------------------------+
//| DeMarker |
//+------------------------------------------------------------------+
int start()
{
double dNum; int i,nCountedBars; //---- insufficient data
if(Bars<=DeMarkerPeriod) return(0); //---- bars count that does not changed after last indicator launch.
nCountedBars=IndicatorCounted(); //----
ExtMaxBuffer[Bars-1]=0.0; ExtMinBuffer[Bars-1]=0.0; if(nCountedBars>2) i=Bars-nCountedBars-1; else i=Bars-2; while(i>=0)
{
dNum=High[i]-High[i+1]; if(dNum<0.0) dNum=0.0; ExtMaxBuffer[i]=dNum; dNum=Low[i+1]-Low[i]; if(dNum<0.0) dNum=0.0; ExtMinBuffer[i]=dNum; i--; }
//---- initial zero
if(nCountedBars<1)
for(i=1; i<=DeMarkerPeriod; i++)
DeMarkerBuffer[Bars-i]=0.0; //----
i=Bars-DeMarkerPeriod-1; if(nCountedBars>=DeMarkerPeriod) i=Bars-nCountedBars-1; while(i>=0)
{
dNum=iMAOnArray(ExtMaxBuffer,0,DeMarkerPeriod,0,MODE_SMA,i)+ iMAOnArray(ExtMinBuffer,0,DeMarkerPeriod,0,MODE_SMA,i); if(dNum!=0.0)
DeMarkerBuffer[i]=iMAOnArray(ExtMaxBuffer,0,DeMarkerPeriod,0,MODE_SMA,i)/dNum; else
DeMarkerBuffer[i]=0.0; i--; }
return(0); }
//+------------------------------------------------------------------+