ZigZag Corrected
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «zigzag corrected fibo.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «ZigZag Corrected» для MetaTrader 4 отображает на графике ZigZag-линию, соединяющую значимые максимумы и минимумы цены. Настраиваемые параметры глубины поиска и допуска отклонения позволяют адаптировать детализацию под любой таймфрейм и инструмент.
Индикатор автоматически строит уровни Фибоначчи между выделенными точками графика и поддерживает до 10 настраиваемых уровней с индивидуальными значениями и цветами. Дополнительно реализована маркировка точек ABCD для визуализации паттернов.
Предусмотрены интерактивные кнопки на графике для управления отображением отдельных Fibonacci-сегментов, а также система уведомлений об изменении направления ZigZag. Обновление данных выполняется по таймеру и при обработке событий графика.
Настройки программы
| Настройка | Описание |
|---|---|
| Lookback period - for highest or lowest of last (n) bars (includes current bar) (ExtDepth) | Глубина поиска — Период поиска — количество баров для определения максимума или минимума |
| Pips (Points after decimal) tolerance in assigning Highs or Lows. Recommend increase value with time (ExtDeviation) | Допуск отклонения — Допуск отклонения в пунктах при определении максимумов и минимумов |
| How many previous highs and lows are looked at in recalculating /repainting. Recommend '1'. (ExtBackstep) | Количество откатов — Количество предыдущих максимумов и минимумов, учитываемых при пересчёте |
| ShowZigZag | Показывать ZigZag — Отображение линии ZigZag на графике |
| ShowFibo | Показывать Fibonacci — Отображение кнопок и уровней Фибоначчи |
| ShowFiboLevel1 | Показать уровень Fibonacci 1 — Отображение первого уровня Фибоначчи |
| FiboLevel1 | Уровень Fibonacci 1 — Значение первого уровня Фибоначчи |
| ShowFiboLevel2 | Показать уровень Fibonacci 2 — Отображение второго уровня Фибоначчи |
| FiboLevel2 | Уровень Fibonacci 2 — Значение второго уровня Фибоначчи |
| ShowFiboLevel3 | Показать уровень Fibonacci 3 — Отображение третьего уровня Фибоначчи |
| FiboLevel3 | Уровень Fibonacci 3 — Значение третьего уровня Фибоначчи |
| ShowFiboLevel4 | Показать уровень Fibonacci 4 — Отображение четвёртого уровня Фибоначчи |
| FiboLevel4 | Уровень Fibonacci 4 — Значение четвёртого уровня Фибоначчи |
| ShowFiboLevel5 | Показать уровень Fibonacci 5 — Отображение пятого уровня Фибоначчи |
| FiboLevel5 | Уровень Fibonacci 5 — Значение пятого уровня Фибоначчи |
| ShowFiboLevel6 | Показать уровень Fibonacci 6 — Отображение шестого уровня Фибоначчи |
| FiboLevel6 | Уровень Fibonacci 6 — Значение шестого уровня Фибоначчи |
| ShowFiboLevel7 | Показать уровень Fibonacci 7 — Отображение седьмого уровня Фибоначчи |
| FiboLevel7 | Уровень Fibonacci 7 — Значение седьмого уровня Фибоначчи |
| ShowFiboLevel8 | Показать уровень Fibonacci 8 — Отображение восьмого уровня Фибоначчи |
| FiboLevel8 | Уровень Fibonacci 8 — Значение восьмого уровня Фибоначчи |
| ShowFiboLevel9 | Показать уровень Fibonacci 9 — Отображение девятого уровня Фибоначчи |
| FiboLevel9 | Уровень Fibonacci 9 — Значение девятого уровня Фибоначчи |
| ShowFiboLevel10 | Показать уровень Fibonacci 10 — Отображение десятого уровня Фибоначчи |
| FiboLevel10 | Уровень Fibonacci 10 — Значение десятого уровня Фибоначчи |
| FibColor1 | Цвет Fibonacci 1 — Цвет первого набора уровней Фибоначчи |
| FibColor2 | Цвет Fibonacci 2 — Цвет второго набора уровней Фибоначчи |
| FibColor3 | Цвет Fibonacci 3 — Цвет третьего набора уровней Фибоначчи |
| Show_ABCD | Показывать ABCD — Отображение маркировки ABCD на графике |
| ABCD_Color | Цвет ABCD — Цвет маркировки ABCD |
| ABCD_FontType | Шрифт ABCD — Шрифт текста ABCD |
| ABCD_FontSize | Размер шрифта ABCD — Размер шрифта текста ABCD |
| AlertMode | Режим уведомлений — Режим уведомлений об изменении направления ZigZag |
| ID | Идентификатор — Идентификатор объекта для именования элементов индикатора |
| button_note1 | Примечание кнопок 1 — Текстовое примечание для первой группы кнопок |
| chart btn_corner for anchoring (btn_corner) | Угол кнопок — Угол графика для привязки кнопок |
| btn_Subwindow | Подокно кнопок — Подокно для размещения кнопок |
| btn_Font | Шрифт кнопок — Шрифт текста кнопок |
| btn__font size (btn_FontSize) | Размер шрифта кнопок — Размер шрифта кнопок |
| btn_text_color | Цвет текста кнопок — Цвет текста кнопок |
| Horizontal location (button_x) | Позиция X кнопок — Горизонтальное расположение кнопок |
| Vertical location (button_y) | Позиция Y кнопок — Вертикальное расположение кнопок |
| button_note2 | Примечание кнопок 2 — Текстовое примечание для второй группы кнопок |
Поиск по коду файла
???//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrRed
extern int ExtDepth = 12; // *** Lookback period - for highest or lowest of last (n) bars (includes current bar)
extern double ExtDeviation = 3; // *** Pips (Points after decimal) tolerance in assigning Highs or Lows. Recommend increase value with time frame.
extern int ExtBackstep = 1; // *** How many previous highs and lows are looked at in recalculating /repainting. Recommend '1'.
double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];
int level=3; // recounting's depth
bool downloadhistory=true;
double myPoint;
extern bool ShowZigZag=false;
extern bool ShowFibo=true;
extern bool ShowFiboLevel1 = true;
extern double FiboLevel1 = 0.0;
extern bool ShowFiboLevel2=true;
extern double FiboLevel2 = 0.236;
extern bool ShowFiboLevel3=true;
extern double FiboLevel3 = 0.382;
extern bool ShowFiboLevel4=true;
extern double FiboLevel4 = 0.500;
extern bool ShowFiboLevel5=true;
extern double FiboLevel5 = 0.618;
extern bool ShowFiboLevel6=true;
extern double FiboLevel6 = 0.764;
extern bool ShowFiboLevel7=true;
extern double FiboLevel7 = 1.0;
extern bool ShowFiboLevel8=true;
extern double FiboLevel8 = 1.618;
extern bool ShowFiboLevel9=true;
extern double FiboLevel9 = 2.0;
extern bool ShowFiboLevel10=true;
extern double FiboLevel10 = 2.618;
extern color FibColor1= clrRoyalBlue;
extern color FibColor2= clrDarkGoldenrod;
extern color FibColor3= clrGreen;
extern bool Show_ABCD=true;
extern color ABCD_Color=clrSkyBlue;
input string ABCD_FontType = "Arial";
input int ABCD_FontSize = 8;
extern int AlertMode = 0;
extern string ID = "";
extern string button_note1 = "------------------------------";
extern ENUM_BASE_CORNER btn_corner = CORNER_RIGHT_UPPER; // chart btn_corner for anchoring
extern int btn_Subwindow = 0;
extern string btn_Font = "Arial";
extern int btn_FontSize = 8; //btn__font size
extern color btn_text_color = clrWhite;
extern int button_x = 2; // Horizontal location
extern int button_y = 5; // Vertical location
extern string button_note2 = "------------------------------";
int Anchor_X,Anchor_A,Anchor_B,Anchor_C,Anchor_D,Anchor_E;
double posX,posA,posB,posC,posD;
double pposA,pposB,pposC,pposD,pposX;
double topA,botA,topB,botB,topC,botC,topD,botD,topX,botX;
datetime TimeX,TimeA,TimeB,TimeC,TimeD,TS1,TS2,TS3,TT1,TT2,TT3;
double PS1,PT1,PS2,PT2,PS3,PT3;
double Fib1High,Fib1Low,Fib2High,Fib2Low,Fib3High,Fib3Low;
int level_count;
string level_name;
double text_y;
int AB_Fibo;
int BC_Fibo;
int CD_Fibo;
int AB_Zigzag;
int BC_Zigzag;
int CD_Zigzag;
int LastZigZag, PreviousZigZag,PreviousZigZag2,PreviousZigZag3,PreviousZigZag4;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
ObjectDelete(ID+"MyFibo1");
ObjectDelete(ID+"MyFibo2");
ObjectDelete(ID+"MyFibo3");
ObjectDelete(ID+"X");
ObjectDelete(ID+"B");
ObjectDelete(ID+"A");
ObjectDelete(ID+"C");
ObjectDelete(ID+"D");
ObjectDelete(ID+"ButtonAB");
ObjectDelete(ID+"ButtonBC");
ObjectDelete(ID+"ButtonCD");
return(0);}
int start()
{
// код доступен только после оплаты
}
int i, counted_bars = IndicatorCounted();
int limit,counterZ,whatlookfor;
int shift,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
if (counted_bars==0 && downloadhistory) // history was downloaded
{
ArrayInitialize(ZigzagBuffer,0.0);
ArrayInitialize(HighMapBuffer,0.0);
ArrayInitialize(LowMapBuffer,0.0);
}
if (counted_bars==0)
{
limit=Bars-ExtDepth;
downloadhistory=true;
}
if (counted_bars>0)
{
ZigzagBuffer[i] = EMPTY_VALUE;
HighMapBuffer[i] = EMPTY_VALUE;
LowMapBuffer[i] = EMPTY_VALUE;
while (counterZ<level && i<100) //needed to plot going forward
{
res=ZigzagBuffer[i];
if (res!=0) counterZ++;
i++;
}
i--;
limit=i; // limit is set here
if (LowMapBuffer[i]!=0)
{
curlow=LowMapBuffer[i];
whatlookfor=1;
}
else
{
curhigh=HighMapBuffer[i];
whatlookfor=-1;
}
for (i=limit-1;i>=0;i--)
{
ZigzagBuffer[i]=0.0;
LowMapBuffer[i]=0.0;
HighMapBuffer[i]=0.0;
}
}
for(shift=limit; shift>=0; shift--)
{
HighMapBuffer[shift] = EMPTY_VALUE;
LowMapBuffer[shift] = EMPTY_VALUE;
val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*myPoint)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=LowMapBuffer[shift+back];
if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;
}
}
}
LowMapBuffer[shift]=val; // ***
val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*myPoint)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=HighMapBuffer[shift+back];
if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;
}
}
}
HighMapBuffer[shift]=val; // ***
}
if (whatlookfor==0)
{
lastlow=0;
lasthigh=0;
}
else
{
lastlow=curlow;
lasthigh=curhigh;
}
for (shift=limit;shift>=0;shift--)
{
res=0.0;
switch(whatlookfor)
{
case 0: // look for peak or lawn
if (lastlow==0 && lasthigh==0)
{
if (HighMapBuffer[shift]!=0)
{
lasthigh=High[shift];
lasthighpos=shift;
whatlookfor=-1;
ZigzagBuffer[shift]=lasthigh;
res=1;
}
if (LowMapBuffer[shift]!=0)
{
lastlow=Low[shift];
lastlowpos=shift;
whatlookfor=1;
ZigzagBuffer[shift]=lastlow;
res=1;
}
}
break;
case 1: // look for peak
if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
{
ZigzagBuffer[lastlowpos]=0.0;
lastlowpos=shift;
lastlow=LowMapBuffer[shift];
ZigzagBuffer[shift]=lastlow;
res=1;
}
if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
{
lasthigh=HighMapBuffer[shift];
lasthighpos=shift;
ZigzagBuffer[shift]=lasthigh;
whatlookfor=-1;
res=1;
}
break;
case -1: // look for lawn
if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
{
ZigzagBuffer[lasthighpos]=0.0;
lasthighpos=shift;
lasthigh=HighMapBuffer[shift];
ZigzagBuffer[shift]=lasthigh;
}
if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
{
lastlow=LowMapBuffer[shift];
lastlowpos=shift;
ZigzagBuffer[shift]=lastlow;
whatlookfor=1;
}
break;
default: return(0);
}
} // final cutting: for (shift=
int h=0;
while (ZigzagBuffer[h]==0)
{h++;}
LastZigZag=h;
h++;
while (ZigzagBuffer[h]==0)
{h++;}
PreviousZigZag=h;
h++;
while ( ZigzagBuffer[h]==0)
{h++;}
PreviousZigZag2=h;
h++;
while ( ZigzagBuffer[h]==0)
{h++;}
PreviousZigZag3=h;
h++;
while ( ZigzagBuffer[h]==0)
{h++;}
PreviousZigZag4=h;
topD=High[LastZigZag];
botD=Low[LastZigZag];
topC=High[PreviousZigZag];
botC=Low[PreviousZigZag];
topB=High[PreviousZigZag2];
botB=Low[PreviousZigZag2];
topA=High[PreviousZigZag3];
botA=Low[PreviousZigZag3];
topX=High[PreviousZigZag4];
botX=Low[PreviousZigZag4];
TimeD=Time[LastZigZag];
TimeC=Time[PreviousZigZag];
TimeB=Time[PreviousZigZag2];
TimeA=Time[PreviousZigZag3];
TimeX=Time[PreviousZigZag4];
if(topD>topC)// D IS A PEAK
{//defining fib1 as CD retracement
TS1=TimeC;
PS1=botC;
TT1=TimeD;
PT1=topD;
if (topB<topD)
{//defining fib2 as BC retracement
TS2=TimeB;
PS2=topB;
TT2=TimeC;
PT2=botC;
}
if (topB>=topD)
{//defining fib2 as BC extension
TS2=TimeB;
PS2=topB;
TT2=TimeC;
PT2=botC;
}
{//defining fib3 as AB retracement
TS3=TimeA;
PS3=botA;
TT3=TimeB;
PT3=topB;
}
}
if(botD<botC)// D IS A TROUGH
{//defining fib1 as CD retracement
TS1=TimeC;
PS1=topC;
TT1=TimeD;
PT1=botD;
if (botB<=botD)
{//defining fib2 as BC retracement
TS2=TimeB;
PS2=botB;
TT2=TimeC;
PT2=topC;
}
if (botB>botD)
{//defining fib2 as BC extension
TS2=TimeB;
PS2=botB;
Показано первые 50% кода (символов: 15869)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.