!!!zigzag corrected fibo button.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!!!zigzag corrected fibo button.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор рассчитывает и отображает на графике паттерн ZigZag с коррекцией по допуску, используя заданные периоды обзора и допустимое отклонение для определения значимых максимумов и минимумов цены. На основе найденных точек перегибов строятся уровни Фибоначчи ретрейсмента и экстеншена между ключевыми свингами, а также метки ABCD-паттерна (X, A, B, C, D).
Индикатор предоставляет интерактивные кнопки на графике для включения и отключения сегментов Фибоначчи (AB, BC, CD) по клику. Поддерживается до 12 настраиваемых уровней Фибоначчи с индивидуальными цветами и подписями. При изменении направления ZigZag возможна отправка уведомлений-алертов.
Обновление данных происходит через таймер и обработку событий графика. Параметры точек привязки, шрифта, цвета и расположения элементов интерфейса настраиваются пользователем. Индикатор работает в терминале MetaTrader 5 на платформе MQL5.
Настройки программы
| Настройка | Описание |
|---|---|
| ExtDepth | Период обзора — количество последних баров (включая текущий), среди которых ищутся наивысшие или наинизшие значения для построения ZigZag. |
| ExtDeviation | Допуск в пунктах (точках после десятичной точки) для присвоения максимумам и минимумам. Рекомендуется увеличивать значение при работе с большими таймфреймами. |
| ExtBackstep | Количество предыдущих максимумов и минимумов, учитываемых при пересчёте и перерисовке ZigZag. Рекомендуется значение 1. |
| ShowZigZag | Включает или отключает отображение линий ZigZag на графике. |
| ShowFibo | Включает или отключает отображение кнопок переключения сегментов Фибоначчи (AB, BC, CD) на графике. |
| ShowFiboLevel1 | Включает или отключает отображение первого уровня Фибоначчи. |
| FiboLevel1 | Значение первого уровня Фибоначчи (по умолчанию 0.0). |
| ShowFiboLevel2 | Включает или отключает отображение второго уровня Фибоначчи. |
| FiboLevel2 | Значение второго уровня Фибоначчи (по умолчанию 0.236). |
| ShowFiboLevel3 | Включает или отключает отображение третьего уровня Фибоначчи. |
| FiboLevel3 | Значение третьего уровня Фибоначчи (по умолчанию 0.382). |
| ShowFiboLevel4 | Включает или отключает отображение четвёртого уровня Фибоначчи. |
| FiboLevel4 | Значение четвёртого уровня Фибоначчи (по умолчанию 0.500). |
| ShowFiboLevel5 | Включает или отключает отображение пятого уровня Фибоначчи. |
| FiboLevel5 | Значение пятого уровня Фибоначчи (по умолчанию 0.618). |
| ShowFiboLevel6 | Включает или отключает отображение шестого уровня Фибоначчи. |
| FiboLevel6 | Значение шестого уровня Фибоначчи (по умолчанию 0.764). |
| ShowFiboLevel7 | Включает или отключает отображение седьмого уровня Фибоначчи. |
| FiboLevel7 | Значение седьмого уровня Фибоначчи (по умолчанию 1.0). |
| ShowFiboLevel8 | Включает или отключает отображение восьмого уровня Фибоначчи. |
| FiboLevel8 | Значение восьмого уровня Фибоначчи (по умолчанию 1.618). |
| ShowFiboLevel9 | Включает или отключает отображение девятого уровня Фибоначчи. |
| FiboLevel9 | Значение девятого уровня Фибоначчи (по умолчанию 2.0). |
| ShowFiboLevel10 | Включает или отключает отображение десятого уровня Фибоначчи. |
| FiboLevel10 | Значение десятого уровня Фибоначчи (по умолчанию 2.618). |
| ShowFiboLevel11 | Включает или отключает отображение одиннадцатого уровня Фибоначчи. |
| FiboLevel11 | Значение одиннадцатого уровня Фибоначчи (по умолчанию 3.618). |
| ShowFiboLevel12 | Включает или отключает отображение двенадцатого уровня Фибоначчи. |
| FiboLevel12 | Значение двенадцатого уровня Фибоначчи (по умолчанию 4.618). |
| FibColor1 | Цвет уровней Фибоначчи для первого сегмента (CD). |
| FibColor2 | Цвет уровней Фибоначчи для второго сегмента (BC). |
| FibColor3 | Цвет уровней Фибоначчи для третьего сегмента (AB). |
| Show_ABCD | Включает или отключает отображение меток ABCD-паттерна (X, A, B, C, D) на графике. |
| ABCD_Color | Цвет текста и элементов ABCD-паттерна (метки X, A, B, C, D). |
| ABCD_Width | Размер (толщина) шрифта текста меток ABCD-паттерна. |
| AlertMode | Режим отправки уведомлений при смене направления ZigZag (0 — без алертов, положительные значения — отправлять алерты). |
| ID | Идентификатор (префикс) для именования объектов индикатора на графике. |
| button_note1 | Текстовый параметр — заметка/разделитель для первой группы кнопок. |
| btn_corner | Угол графика для привязки положения кнопок переключения. |
| btn_Font | Шрифт текста на кнопках переключения сегментов Фибоначчи. |
| btn_FontSize | Размер шрифта текста на кнопках переключения сегментов Фибоначчи. |
| btn_text_color | Цвет текста на кнопках переключения сегментов Фибоначчи. |
| ButtonPos | Горизонтальное смещение кнопок переключения сегментов Фибоначчи на графике. |
| button_note2 | Текстовый параметр — заметка/разделитель для второй группы кнопок. |
Поиск по коду файла
#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=false;
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=false;
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 bool ShowFiboLevel11=true;
extern double FiboLevel11 = 3.618;
extern bool ShowFiboLevel12=true;
extern double FiboLevel12 = 4.618;
extern color FibColor1= clrRoyalBlue;
extern color FibColor2= clrDarkGoldenrod;
extern color FibColor3= clrGreen;
extern bool Show_ABCD=true;
extern color ABCD_Color=clrSkyBlue;
extern double ABCD_Width=12;
extern int AlertMode = 0;
extern string ID = "";
extern string button_note1 = "------------------------------";
extern ENUM_BASE_CORNER btn_corner = CORNER_RIGHT_LOWER; // chart btn_corner for anchoring
extern string btn_Font = "Arial";
extern int btn_FontSize = 8; //btn__font size
extern color btn_text_color = clrWhite;
extern int ButtonPos = 0;
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;
TT2=TimeC;
PT2=topC;
}
TS3=TimeA;
PS3=topA;
TT3=TimeB;
PT3=botB;
}
if(botD<botC && topD<topC)// D IS A TROUGH
{//Alert("cas 1");
posD =botD; Anchor_D = ANCHOR_UPPER;
posC =topC; Показано первые 50% кода (символов: 16035)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.