Miscellaneous
0
Views
0
Downloads
0
Favorites
i_ZigZag_NK
//+------------------------------------------------------------------+
//| ZigZag_NK.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_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ
#property indicator_buffers 2
//---- öâåò èíäèêàòîðà
#property indicator_color1 Aqua
#property indicator_color2 Aqua
//---- òîëùèíà èíäèêàòîðíîé ëèíèè
#property indicator_width1 0
#property indicator_width2 0
//---- ñòèëü èíäèêàòîðíîé ëèíèè
#property indicator_style1 1
#property indicator_style2 1
//---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//----
//---- èíäèêàòîðíûå áóôôåðû
double LowestBuffer[],HighestBuffer[];
//----+ Ââåäåíèå öåëûõ ïåðåìåííûõ ïàìÿòè äëÿ ïåðåñ÷¸òà èíäèêàòîðà òîëüêî
// íà íåïîäñ÷èòàííûõ áàðàõ
int MaxBar,time2,LASTLOWPOS,LASTHIGHPOS,LHTIME,LLTIME,size;
//----+ Ââåäåíèå ïåðåìåííûõ ïàìÿòè ñ ïëàâàþùåé òî÷êîé äëÿ ïåðåñ÷¸òà
// èíäèêàòîðà òîëüêî íà íåïîäñ÷èòàííûõ áàðàõ
double LowestMEMORY[1],HighestMEMORY[1],LASTLOW0,LASTLOW1,LASTHIGH0,
LASTHIGH1,LASTHIGHEST,LASTLOWEST;
static datetime PrevTimeCalc=0;
//+------------------------------------------------------------------+
//| ZigZag initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- äâà èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàí äëÿ ñ÷¸òà
SetIndexBuffer(0,LowestBuffer);
SetIndexBuffer(1,HighestBuffer);
//---- Ñòèëü èñïîëíåíèÿ ãðàôèêà âèäå ëîìàííîé ZigZag
SetIndexStyle(0,DRAW_ZIGZAG);
SetIndexStyle(1,DRAW_ZIGZAG);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
//---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí
SetIndexLabel(0,"Low" );
SetIndexLabel(1,"High");
IndicatorShortName("ZigZag (ExtDepth="+ExtDepth+", ExtDeviation="+
ExtDeviation+", ExtBackstep="+ExtBackstep+" )");
//---- îïðåäåëåíèå ðàçìåðîâ âðåìåííûõ áóôôåðîâ
size=ExtBackstep+1;
//---- èçìåíåíèå ðàçìåðîâ âðåìåííûõ áóôôåðîâ
if(ArrayResize(LowestMEMORY,size)!=size)return(-1);
if(ArrayResize(HighestMEMORY,size)!=size)return(-1);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(0);
}
//+------------------------------------------------------------------+
//| ZigZag iteration function |
//+------------------------------------------------------------------+
int start()
{
if (PrevTimeCalc==Time[0]) return;
PrevTimeCalc=Time[0];
//----+ ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ êîððåêòíîãî
// ðàñ÷¸òà èíäèêàòîðà
if (Bars-1<ExtDepth)return(0);
//----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ
int limit,iii,counted_bars=IndicatorCounted();
//---- ïðîâåðêà íà âîçìîæíûå îøèáêè
if (counted_bars<0)return(-1);
//---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí
if (counted_bars>0) counted_bars--;
//----+ Ââåäåíèå ïåðåìåííûõ
int bar,back,lasthighpos,lastlowpos;
double curlow,curhigh,lasthigh0,lastlow0,lasthigh1,lastlow1,val,res;
//---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî
// áóäåò ïðîèçåä¸í ïîëûé ïåðåñ÷¸ò âñåõ áàðîâ
MaxBar=Bars-ExtDepth;
//---- îïðåäåëåíèå íîìåðà ñòàðòîâîãî áàðà â öèêëå, íà÷èíàÿ ñ êîòîðîãî
// áóäåò ïðîèçîäèòüñÿ ïåðåñ÷¸ò íîâûõ áàðîâ
limit=Bars-counted_bars-1;
//+--- âîññòàíîâëåíèå çíà÷åíèé ïåðåìåííûõ +======+
int Tnew=Time[limit+1];
if (limit<MaxBar)
{
if (Tnew==time2)
{
lastlow0=LASTLOW0;
lasthigh0=LASTHIGH0;
//+---
lastlow1=LASTLOW1;
lasthigh1=LASTHIGH1;
//+---
lastlowpos=iBarShift(NULL,0,LLTIME,true);
lasthighpos=iBarShift(NULL,0,LHTIME,true);
//+--- ïðîâåðêà ïåðåìåííûõ lasthighpos è lastlowpos íà
// êîððåêòíîñòü äëÿ äàëüíåéøåãî ðàñ÷¸òà
if ((lasthighpos<0)||(lastlowpos<0))
{
Print("Îøèáêà âîññòàíîâëåíèÿ ïåðåìåííûõ!!!" +
" Ïîòåðÿíû çíà÷åíèÿ ïåðåìåííûõ lasthighpos è lastlowpos");
Print("Áóäåò ïðîèçâåä¸í ïåðåñ÷¸ò èíäèêàòîðà íà âñåõ áàðàõ!");
return(-1);
}
//+---
LowestBuffer[lastlowpos]=LASTLOWEST;
HighestBuffer[lasthighpos]=LASTHIGHEST;
//+---
for(iii=size-1; iii>=0; iii--)
{
LowestBuffer[iii+limit+1]=LowestMEMORY[iii];
HighestBuffer[iii+limit+1]=HighestMEMORY[iii];
}
//+---
}
else
{
if (Tnew>time2)
Print("Îøèáêà âîññòàíîâëåíèÿ ïåðåìåííûõ!!! Tnew>time2");
else Print("Îøèáêà âîññòàíîâëåíèÿ ïåðåìåííûõ!!! Tnew<time2");
Print("Áóäåò ïðîèçâåä¸í ïåðåñ÷¸ò èíäèêàòîðà íà âñåõ áàðàõ!");
return(-1);
}
}
//+--- +==========================================+
//---- èíèöèàëèçàöèÿ íóëÿ
if (limit>=MaxBar)
{
for (bar=Bars-1; bar>=MaxBar;bar--)
{
LowestBuffer [bar]=0.0;
HighestBuffer[bar]=0.0;
}
lastlow1=-1;
lasthigh1=-1;
lastlowpos=-1;
lasthighpos=-1;
limit=MaxBar;
}
//----+ <<< íà÷àëî ïåðâîãî áîëüøîãî öèêëà >>> -----------+
for(bar=limit; bar>=0; bar--)
{
//+--- Ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ +=========+
if (bar==1)
{
if(((limit==1)&&(time2==Time[2]))||(limit>1))
{
LASTLOW0=lastlow0;
LASTHIGH0=lasthigh0;
//+---
for(iii=size-1; iii>=0; iii--)
{
LowestMEMORY[iii]=LowestBuffer[iii+2];
HighestMEMORY[iii]=HighestBuffer[iii+2];
}
}
}
//+---+=========================================+
//--- low
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,bar)];
if(val==lastlow0) val=0.0;
else
{
lastlow0=val;
if((Low[bar]-val)>(ExtDeviation*Point))val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=LowestBuffer[bar+back];
if((res!=0)&&(res>val))LowestBuffer[bar+back]=0.0;
}
}
}
LowestBuffer[bar]=val;
//--- high
val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,bar)];
if(val==lasthigh0) val=0.0;
else
{
lasthigh0=val;
if((val-High[bar])>(ExtDeviation*Point))val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=HighestBuffer[bar+back];
if((res!=0)&&(res<val))HighestBuffer[bar+back]=0.0;
}
}
}
HighestBuffer[bar]=val;
}
//----+ êîíåö ïåðâîãî áîëüøîãî öèêëà
//----+ <<< íà÷àëî âòîðîãî áîëüøîãî öèêëà >>> -----------+
for(bar=limit; bar>=0; bar--)
{
//+--- Ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ +====+
if (bar==1)
{
if(((limit==1)&&(time2==Time[2]))||(limit>1))
{
time2=Time [2];
LASTLOW1=lastlow1;
LASTHIGH1=lasthigh1;
//+---
LLTIME=Time[lastlowpos];
LHTIME=Time[lasthighpos];
//+---
LASTLOWEST=LowestBuffer[lastlowpos];
LASTHIGHEST=HighestBuffer[lasthighpos];
}
}
//+---+====================================+
curlow=LowestBuffer[bar];
curhigh=HighestBuffer[bar];
//---
if((curlow==0)&&(curhigh==0))continue;
//---
if(curhigh!=0)
{
if(lasthigh1>0)
{
if(lasthigh1<curhigh)HighestBuffer[lasthighpos]=0;
else HighestBuffer[bar]=0;
}
//---
if(lasthigh1<curhigh || lasthigh1<0)
{
lasthigh1=curhigh;
lasthighpos=bar;
}
lastlow1=-1;
}
//----
if(curlow!=0)
{
if(lastlow1>0)
{
if(lastlow1>curlow) LowestBuffer[lastlowpos]=0;
else LowestBuffer[bar]=0;
}
//---
if((curlow<lastlow1)||(lastlow1<0))
{
lastlow1=curlow;
lastlowpos=bar;
}
lasthigh1=-1;
}
}
//----+ êîíåö âòîðîãî áîëüøîãî öèêëà
//+--------------------------------------------------------+
//---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà
return(0);
}
//+-----------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---