//+------------------------------------------------------------------+
//| DMA.mq4 |
//| Copyright © 2010, LenIFCHIK |
//|Èíäèêàòîð DMA (Displaced Moving Averages)îòîáðàæàåò â îñíîâíîì |
//|îêíå 3 ñêîëüçÿùèõ ñðåäíèõ: |
//| - 3-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ, |
//| ñìåùåííàÿ âïåðåä íà òðè ïåðèîäà (âõîäíîé ïàðàìåòð - SR_DSMA); |
//| - 7-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ, |
//| ñìåùåííàÿ âïåðåä íà ïÿòü ïåðèîäîâ (âõîäíîé ïàðàìåòð - MR_DSMA);|
//| - 25-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ, |
//| ñìåùåííàÿ âïåðåä íà ïÿòü ïåðèîäîâ(âõîäíîé ïàðàìåòð - LR_DSMA). |
//+------------------------------------------------------------------+
#property copyright "LenIFCHIK"
#property indicator_chart_window // â îñíîâíîì îêíå
#property indicator_buffers 3 // êîëè÷åñòâî áóôåðîâ
#property indicator_color1 Red // öâåò SR DSMA
#property indicator_color2 Blue // öâåò MR DSMA
#property indicator_color3 Lime // öâåò LR DSMA
//---- âíåøíèå ïàðàìåòðû èíäèêàòîðà
//---- äëÿ SR DSMA
extern int SR_DSMA_Period=3; // ïåðèîä SR DSMA
extern int SR_DSMA_Shift=3; // ñäâèã SR DSMA
//---- äëÿ MR DSMA
extern int MR_DSMA_Period=7; // ïåðèîä MR DSMA
extern int MR_DSMA_Shift=5; // ñäâèã MR DSMA
//---- äëÿ LR DSMA
extern int LR_DSMA_Period=25; // ïåðèîä LR DSMA
extern int LR_DSMA_Shift=5; // ñäâèã LR DSMA
//---- ïàðàìåòðû îòîáðàæåíèÿ ëèíèé (1-on,2-off)
extern string Display_mode="0 - on, 1 - off";
extern int SR_DSMA_disp=1; // ðåæèì îòîáðàæåíèÿ SR DSMA
extern int MR_DSMA_disp=1; // ðåæèì îòîáðàæåíèÿ MR DSMA
extern int LR_DSMA_disp=1; // ðåæèì îòîáðàæåíèÿ LR DSMA
//---- áóôåðû èíäèêàòîðà
double SR_DSMA_Buffer[]; // áóôåð SR DSMA
double MR_DSMA_Buffer[]; // áóôåð MR DSMA
double LR_DSMA_Buffer[]; // áóôåð LR DSMA
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- ðåæèì îòîáðàæåíèÿ
//---- ðåæèì îòîáðàæåíèÿ SR DSMA
switch(SR_DSMA_disp)
{
case 0 :
SetIndexStyle(0,DRAW_NONE);break; // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
case 1 :
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);break; // ÎÒÎÁÐÀÆÀÅÒÑß
default :
SR_DSMA_disp=1; // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
}
//---- ðåæèì îòîáðàæåíèÿ MR DSMA
switch(MR_DSMA_disp)
{
case 0 :
SetIndexStyle(1,DRAW_NONE);break; // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
case 1 :
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);break; // ÎÒÎÁÐÀÆÀÅÒÑß
default :
MR_DSMA_disp=1; // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
}
//---- ðåæèì îòîáðàæåíèÿ LR DSMA
switch(LR_DSMA_disp)
{
case 0 :
SetIndexStyle(2,DRAW_NONE);break; // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
case 1 :
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);break; // ÎÒÎÁÐÀÆÀÅÒÑß
default :
LR_DSMA_disp=1; // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
}
//---- ïàðàìåòðû ñìåùåíèÿ
SetIndexShift(0,SR_DSMA_Shift); // ñìåùåíèÿ ëèíèè SR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
SetIndexShift(1,MR_DSMA_Shift); // ñìåùåíèÿ ëèíèè MR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
SetIndexShift(2,LR_DSMA_Shift); // ñìåùåíèÿ ëèíèè LR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); // óñòàíîâêà ôîðìàòà òî÷íîñòè äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà
//---- èìåíà ëèíèé, äëÿ îòîáðàæåíèÿ èíôîðìàöèè â îêíå DataWindow è âñïëûâàþùåé ïîäñêàçêå
SetIndexLabel(0,"SR DSMA");
SetIndexLabel(1,"MR DSMA");
SetIndexLabel(2,"LR DSMA");
//---- óñòàíîâêà ïîðÿäêîâîãî íîìåðà áàðà îò íà÷àëà äàííûõ, ñ êîòîðîãî äîëæíà íà÷èíàòüñÿ îòðèñîâêà
SetIndexDrawBegin(0,SR_DSMA_Period-1);
SetIndexDrawBegin(1,MR_DSMA_Period-1);
SetIndexDrawBegin(2,LR_DSMA_Period-1);
//---- ñâÿçü ïåðåìåííîé, îáúÿâëåííîé íà ãëîáàëüíîì óðîâíå, ñ ïðåäîïðåäåëåííûì áóôåðîì èíäèêàòîðà
SetIndexBuffer(0,SR_DSMA_Buffer);
SetIndexBuffer(1,MR_DSMA_Buffer);
SetIndexBuffer(2,LR_DSMA_Buffer);
//---- êîíåö èíèöèàëèçàöèè
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if(Bars<=LR_DSMA_Period) return(0);
ExtCountedBars=IndicatorCounted();
//----
if (ExtCountedBars<0) return(-1);
//----
if (ExtCountedBars>0) ExtCountedBars--;
//---- ðàñ÷¸ò êðàòêîñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
double sum=0;
int i,pos=Bars-ExtCountedBars-1;
if(pos<SR_DSMA_Period) pos=SR_DSMA_Period;
for(i=1;i<SR_DSMA_Period;i++,pos--)
sum+=Close[pos];
while(pos>=0)
{
sum+=Close[pos];
SR_DSMA_Buffer[pos]=sum/SR_DSMA_Period;
sum-=Close[pos+SR_DSMA_Period-1];
pos--;
}
if(ExtCountedBars<1)
for(i=1;i<SR_DSMA_Period;i++) SR_DSMA_Buffer[Bars-i]=0;
//---- ðàñ÷¸ò ñðåäíåñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
double sum1=0;
int pos1=Bars-ExtCountedBars-1;
if(pos1<MR_DSMA_Period) pos1=MR_DSMA_Period;
for(i=1;i<MR_DSMA_Period;i++,pos1--)
sum1+=Close[pos1];
while(pos1>=0)
{
sum1+=Close[pos1];
MR_DSMA_Buffer[pos1]=sum1/MR_DSMA_Period;
sum1-=Close[pos1+MR_DSMA_Period-1];
pos1--;
}
if(ExtCountedBars<1)
for(i=1;i<MR_DSMA_Period;i++) MR_DSMA_Buffer[Bars-i]=0;
//---- ðàñ÷¸ò äîëãîñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
double sum2=0;
int pos2=Bars-ExtCountedBars-1;
if(pos2<LR_DSMA_Period) pos2=LR_DSMA_Period;
for(i=1;i<LR_DSMA_Period;i++,pos2--)
sum2+=Close[pos2];
while(pos2>=0)
{
sum2+=Close[pos2];
LR_DSMA_Buffer[pos2]=sum2/LR_DSMA_Period;
sum2-=Close[pos2+LR_DSMA_Period-1];
pos2--;
}
if(ExtCountedBars<1)
for(i=1;i<LR_DSMA_Period;i++) LR_DSMA_Buffer[Bars-i]=0;
}
//+------------------------------------------------------------------+
Comments