Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
ZigZagOnParabolic
#property indicator_chart_window // â îêíå èíñòðóìåíòà
#property indicator_buffers 3
#property indicator_color1 Aqua
#property indicator_color3 Blue
//--âíåøíèå ïåðåìåííûå
extern double Step=0.02; // íà÷àëüíîå çíà÷åíèå è øàã
extern double Maximum=0.2; // êîíå÷íîå çíà÷åíèå
extern bool ExtremumsShift=1; // ïîëîæåíèå ýêñòðåìóìîâ: 0 - ïî âðåìåíè èõ îïðåäåëíèÿ; 1 - ïî èõ ôàêòè÷åñêîìó ïîëîæåíèþ
extern int History=0; // êîë-âî áàðîâ ïðåäûñòîðèè; 0 - âñå
//--
double Peak[], // áóôåð ZigZag ïî ïèêàì
Trough[], // áóôåð ZigZag ïî âïàäèíàì
SAR[]; // áóôåð Parabolic
//=============================================================
int init()
{
SetIndexBuffer(0,Peak); // ïèêè
SetIndexStyle(0,DRAW_ZIGZAG);
SetIndexLabel(0,"Peak");
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1,Trough); // êðåñòû, ò.å. âïàäèíû)))
SetIndexStyle(1,DRAW_ZIGZAG);
SetIndexLabel(1,"Trough");
SetIndexEmptyValue(1,0.0);
SetIndexBuffer(2,SAR); // Ïàðàáîëèê
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,159);
SetIndexLabel(2,"SAR");
SetIndexEmptyValue(2,0.0);
return(0);
}
//=============================================================
int start()
{
static int BarsPrev; // çíà÷åíèå Bars íà ïðåä.áàðå
bool MissBars=Bars-BarsPrev>1; // 1 - åñòü ïðîïóùåííûå áàðû
bool NewBar=Bars-BarsPrev==1; // 1 - ïåðâûé òèê íóëåâîãî áàðà
if(MissBars && BarsPrev!=0) BarsPrev=reinit(); // ïðîóùåííûå áàðû â ïðîöåññå - ïåðåñ÷åò çàíîâî
int limit=Bars-BarsPrev-(BarsPrev==0); BarsPrev=Bars; // êîë-âî ïåðåñ÷åòîâ
if(History!=0 && limit>History) limit=History-1; // êîë-âî ïåðåñ÷åòîâ ïî èñòîðèè
for(int i=limit; i>=0; i--) // öèêë ïî íåïîñ÷èòàííûì è ïðåäïîñëåäíåìó áàðàì
{
SAR[i]=iSAR(NULL,0,Step,Maximum, i); // Ïàðàáîëèê
double mid[2]; // ñð. öåíà
mid[0]=(High[i]+Low[i])/2; // ñð.öåíà íà òåêóùåì áàðå
mid[1]=(High[i+1]+Low[i+1])/2; // ñð.öåíà íà ïðåä.áàðå
static int j; // ñ÷åò÷èê ñìåùåíèÿ ìåæäó ìîìåíòîì îïðåäåëåíÿ ýêñòðåìóìà è åãî ïîëîæåíèåì âî âðåìåíè
static bool dir; // ôëàã íàïðàâëåíèÿ; 0 - âíèç, 1 - ââåðõ
static double h,l; // òåêóùèå ýêñòðåìàëüíûå çíà÷åíèÿ
int shift; // ñìåùåíèå ìåæäó ìîìåíòîì îïðåäåëåíÿ ýêñòðåìóìà è åãî ïîëîæåíèåì âî âðåìåíè
if(i>0) j++; // åñëè áàð çàâåðøåí, òî èíêðåìåíò ñ÷åò÷èêà ñìåùåíèÿ
if(dir) // ëîâëÿ ïèêà
{
if(h<High[i]) {h=High[i]; j=NewBar;} // òåêóùèé ìàêñèìóì; ñáðîñ ñ÷åò÷èêà ñìåùåíèÿ
if(SAR[i+1]<=mid[1] && SAR[i]>mid[0]) // ïåðåâîðîò Ïàðàáîëèêà âíèç
{
shift=i+ExtremumsShift*(j+NewBar); // ñìåùåíèå
Peak[shift]=h; // ïèê
dir=0; // íàïðàâëåíèå âíèç
l=Low[i]; j=0; // òåêóùèé ìàêñèìóì, ñáðîñ ñ÷åò÷èêà ñìåùåíèÿ
}
}
else // ëîâëÿ âïàäèíû
{
if(l>Low[i]) {l=Low[i]; j=NewBar;} // òåêóùèé ìèíèìóì; ñáðîñ ñ÷åò÷èêà ñìåùåíèÿ
if(SAR[i+1]>=mid[1] && SAR[i]<mid[0]) // ïåðåâîðîò Ïàðàáîëèêà ââåðõ
{
shift=i+ExtremumsShift*(j+NewBar); // ñìåùåíèå
Trough[shift]=l; // âïàäèíà
dir=1; // íàïðàâëåíèå ââåðõ
h=High[i]; j=0; // òåêóùèé ìàêñèìóì, ñáðîñ ñ÷åò÷èêà ñìåùåíèÿ
}
}
}
// if(MissBars) Print("limit: ",limit," Bars:",Bars," IndicatorCounted: ",IndicatorCounted());
return(0);
}
//=============================================================
// ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
int reinit()
{
ArrayInitialize(Peak,0.0);
ArrayInitialize(Trough,0.0);
ArrayInitialize(SAR,0.0);
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
---