0
Views
0
Downloads
0
Favorites
ZigZagOnFractals
//+------------------------------------------------------------------+
//| ZigZagOnFractals.mq4 |
//| Scriptong |
//| |
//+------------------------------------------------------------------+
#property copyright "Scriptong"
#property link "http://fortrader.ru/"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- buffers
double Buf[];
int LastZZ;
double FUp, FDn;
datetime LastBar, ZeroBarBit;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_SECTION);
SetIndexBuffer(0,Buf);
SetIndexEmptyValue(0,0.0);
LastBar = 0;
ZeroBarBit = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Ïîèñê ïîñëåäíèõ äâóõ ôðàêòàëîâ (îäèí Up- è îäèí Down-ôðàêòàë) |
//+------------------------------------------------------------------+
void Fract(int Num)
{
FUp = 0; FDn = 0;
for(int i = Num+1; i <= LastZZ; i++)
{
double F = iFractals(Symbol(), 0, MODE_UPPER, i);
if(F != 0 && FUp == 0)
FUp = F;
F = iFractals(Symbol(), 0, MODE_LOWER, i);
if(F != 0 && FDn == 0)
FDn = F;
if(FUp != 0 && FDn != 0)
return;
}
}
//+------------------------------------------------------------------+
//| Íîðìàëèçàöèÿ çíà÷åíèé äî òî÷íîñòè êîòèðîâîê äàííîé âàëþòû |
//+------------------------------------------------------------------+
double ND(double A)
{
return(NormalizeDouble(A, Digits));
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
if(LastBar != Time[0])
{
ArrayInitialize(Buf, 0.0);
LastZZ = Bars-2;
for(int i = Bars-3; i > 0; i--)
{
Fract(i); //  ïåðåìåííûå FUp è FDn çàíîñèì çíà÷åíèÿ ïîñëåäíèõ äâóõ ôðàêòàëîâ
// Åñëè áûëî ïðîáèòèå Up-ôðàêòàëà, òî íàõîäèì ñàìóþ íèæíþþ òî÷êó îò òåêóùåãî ìîìåíòà äî ïðåäûäóùåé âåðøèíû
// Ýòî è áóäåò ëîêàëüíûé ìèíèìóì
if(ND(High[i]) > ND(FUp) && ND(FUp) != 0 && ND(Buf[LastZZ]) != ND(Low[LastZZ]))
if(LastZZ-i-1 > 0)
{
int Ext = iLowest(Symbol(), 0, MODE_LOW, LastZZ-i-1, i+1);
Buf[Ext] = Low[Ext];
LastZZ = Ext;
continue;
}
// Åñëè áûëî ïðîáèòèå Down-ôðàêòàëà, òî íàõîäèì ñàìóþ âûñøóþ òî÷êó îò òåêóùåãî ìîìåíòà äî ïðåäûäóùåé âïàäèíû
// Ýòî è áóäåò ëîêàëüíûé ìàêñèìóì
if(ND(Low[i]) < ND(FDn) && ND(FDn) != 0 && ND(Buf[LastZZ]) != ND(High[LastZZ]))
if(LastZZ-i-1 > 0)
{
Ext = iHighest(Symbol(), 0, MODE_HIGH, LastZZ-i-1, i+1);
Buf[Ext] = High[Ext];
LastZZ = Ext;
}
}
}
// Îòñëåæèâàåì ïðîáèòèå íà íóëåâîì áàðå
if(ZeroBarBit != Time[0])
{
Fract(2);
if(ND(High[0]) > ND(FUp) && ND(FUp) != 0 && ND(Buf[LastZZ]) != ND(Low[LastZZ]))
{
Ext = iLowest(Symbol(), 0, MODE_LOW, LastZZ-1, 1);
Buf[Ext] = Low[Ext];
ZeroBarBit = Time[0];
return(0);
}
if(ND(Low[0]) < ND(FDn) && ND(FDn) != 0 && ND(Buf[LastZZ]) != ND(High[LastZZ]))
{
Ext = iHighest(Symbol(), 0, MODE_HIGH, LastZZ-1, 1);
Buf[Ext] = High[Ext];
ZeroBarBit = Time[0];
}
}
// ------------------------------------
// Print("i = ",i, ", FUp = ", FUp, ", FDn = ", FDn, ", LastZZ = ", LastZZ);
LastBar = Time[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
---