search_patterns.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «search_patterns.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Парсер паттернов — пользовательский индикатор для MetaTrader 4, который строит ZigZag и анализирует гармонические графические паттерны на ценовых графиках. Поддерживается поиск фигур Гартли, Бабочка, Краб, Летучая мышь, паттерна 5-0, AB=CD и Волчьих волн.
Индикатор отрисовывает на графике треугольники, трендовые линии, уровни Фибоначчи и текстовые метки для обнаруженных паттернов. Имеется режим отображения будущих (прогнозных) паттернов, позволяющий видеть потенциальные зоны развития цены.
Настройки позволяют включать и отключать отдельные типы паттернов, задавать глубину ZigZag, допуски по ценовым и временным соотношениям, а также настраивать цвета отображения. Информация о найденных паттернах выводится в комментарий графика.
Настройки программы
| Настройка | Описание |
|---|---|
| FuturePattern | Будущие паттерны — Включает режим отображения будущих (прогнозных) паттернов |
| ExtSave | Сохранять время — При значении true сохраняет время последнего обновления паттернов для имен объектов |
| ExtDepth | Глубина ZigZag — Глубина ZigZag; при значении 0 используется стандартная глубина, при ненулевом значении minDepth и maxDepth устанавливаются равными этому параметру |
| ExtPoint | Количество экстремумов — Количество экстремумов ZigZag, используемых для поиска паттернов |
| minDepth | Минимальная глубина — Минимальная глубина ZigZag для поиска экстремумов |
| maxDepth | Максимальная глубина — Максимальная глубина ZigZag для поиска экстремумов |
| ExtDopusk | Допуск по ценовым соотношениям — Допуск по ценовым соотношениям ретрейсмента при проверке паттернов |
| TimeDopusk | Допуск по временным соотношениям — Допуск по временным соотношениям при проверке паттернов |
| Gartley | Гартли — Включает или отключает поиск паттерна Гартли и связанных фигур (Бабочка, Краб, Летучая мышь) |
| Pattern_50 | Паттерн 5-0 — Включает или отключает поиск паттерна 5-0 |
| ABCD | AB=CD — Включает или отключает поиск паттерна AB=CD |
| WolfWaves | Волчьи волны — Включает или отключает поиск Волчьих волн |
| SweetZoneStart | Зона начала WW — Включает или отключает отображение зоны начала для Волчьих волн |
| SweetZoneEnd | Зона окончания WW — Включает или отключает отображение зоны окончания для Волчьих волн |
| SZScolor | Цвет зоны начала WW — Цвет объектов зоны начала Волчьих волн |
| SZEcolor | Цвет зоны окончания WW — Цвет объектов зоны окончания Волчьих волн |
| ExtColorGartley | Цвет паттернов — Цвет объектов обнаруженных паттернов |
| ExtColorRet | Цвет ретрейсмента — Цвет линий ретрейсмента и текстовых меток |
Поиск по коду файла
#property stacksize 16384
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 CLR_NONE
#import "user32.dll"
int GetClientRect(int hWnd,int lpRect[]);
#import
extern bool FuturePattern =false; /* true - ???? ????????????? ????????, ?.?. ????? ?????????? ??????? ?? ???????? ?? ?????????? ????????, ??? "???????????" ????????????? ????????? ;) */
extern bool ExtSave=false; /* ???? true, ?? ?????????? ????? ????????? ?? ??????? */
extern int ExtDepth=0; /* ???????? ??? ZZ,???? 0, ?? ????? ???? ????? ?????????, ????? ????????? ???????(???? ?? ????) ? ????????? ?????????? Depth */
extern int ExtPoint=5; /* ?????????? ????? ???????, ???? ?????? ?????? 5, ?? ????? ???????????? ???????? ?? ??????? (???? ??? ????) */
extern int minDepth=3; /* ???????? ??? ?????? ????????? */
extern int maxDepth=50;/* ???????? ??? ?????? ????????? */
/*extern*/ int ExtIndicator=0; /* ?????????? ????????, ??????? ????? ?????? ????? ??? ?????????? ???????? */
extern double ExtDopusk=0.05; /* ????????? ???????? ????? ?????????? ?? ????? ??? ???????? ExtDopusk */
extern double TimeDopusk=0.2; /*????????? ???????? ?? ??????? ????? ?????????? ?? ????? ??? ???????? TimeDopusk */
extern bool Gartley=true; /* true - ???? ???????? ??????, false - ??? */
extern bool Pattern_50=true; /* true - ???? ??????? 5-0, false - ??? */
extern bool ABCD=true; /* true - ???? ??????? AB=CD, false - ??? */
extern bool WolfWaves=false; /* true - ???? ??????? WW, false - ??? */
extern bool SweetZoneStart=true; /* true - ?????????? ???????? ?????? ????????? WW ? ??????? ?????? ??????? ?.5, false - ??? */
extern bool SweetZoneEnd=true; /* true - ?????????? ???????? ????????? WW ? ??????? ?????? ??????? ?.6, false - ??? */
extern color SZScolor=Blue; /* ???? ??? SweetZoneStart */
extern color SZEcolor=DarkGreen; /* ???? ??? SweetZoneEnd */
extern color ExtColorGartley=White; /* ???? ??? ????????? ?????? */
extern color ExtColorRet=Black; /* ???? ????? ????????????? */
static int endbar=0;
static double endpr=0;
static bool fl;
string com1="",com2="",com3="",com4="",com5="",com6="",com7="",com8="",com9="";
string save="";
static int GPixels,VPixels;
int rect[4],hwnd;
double zz[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
string NamePattern[7]={"Gartley","Butterfly","Crab","Bat","Pattern_5-0","AB=CD","WolfeWaves"};
Comment("");
for(int b=0;b<7;b++)
{
for(int k=0;k<=maxDepth;k++)
{
ObjectDelete("RealTargetD_"+NamePattern[b]+k);
ObjectDelete("RealTextTargetD_"+NamePattern[b]+k);
ObjectDelete("RealFiboTarget_"+NamePattern[b]+k);
ObjectDelete("Real1_"+NamePattern[b]+k);
ObjectDelete("Real2_"+NamePattern[b]+k);
ObjectDelete("Real3_"+NamePattern[b]+k);
ObjectDelete("RealRetXB_"+NamePattern[b]+k);
ObjectDelete("RealRetAC_"+NamePattern[b]+k);
ObjectDelete("RealRetBD_"+NamePattern[b]+k);
ObjectDelete("RealRetXD_"+NamePattern[b]+k);
ObjectDelete("RealTextRetXB_"+NamePattern[b]+k);
ObjectDelete("RealTextRetAC_"+NamePattern[b]+k);
ObjectDelete("RealTextRetBD_"+NamePattern[b]+k);
ObjectDelete("RealTextRetXD_"+NamePattern[b]+k);
ObjectDelete("RealLineXA_"+NamePattern[b]+k);
ObjectDelete("RealLineAB_"+NamePattern[b]+k);
ObjectDelete("RealLineBC_"+NamePattern[b]+k);
ObjectDelete("RealLineCD_"+NamePattern[b]+k);
ObjectDelete("Future1_"+NamePattern[b]+k);
ObjectDelete("Future2_"+NamePattern[b]+k);
ObjectDelete("Future3_"+NamePattern[b]+k);
ObjectDelete("FutureTargetC_"+NamePattern[b]+k);
ObjectDelete("FutureTextTargetC_"+NamePattern[b]+k);
ObjectDelete("FutureMinTargetD_"+NamePattern[b]+k);
ObjectDelete("FutureTextMinTargetD_"+NamePattern[b]+k);
ObjectDelete("FutureMaxTargetD_"+NamePattern[b]+k);
ObjectDelete("FutureTextMaxTargetD_"+NamePattern[b]+k);
ObjectDelete("FutureRetXB_"+NamePattern[b]+k);
ObjectDelete("FutureTextRetXB_"+NamePattern[b]+k);
ObjectDelete("FutureRetAC_"+NamePattern[b]+k);
ObjectDelete("FutureTextRetAC_"+NamePattern[b]+k);
}
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
/*------------------------------------------------------------------+
| ZigZag_Talex, ???? ????? ???????? ?? ???????. ?????????? ????? |
| ???????? ??????? ?????????? ExtPoint. |
+------------------------------------------------------------------*/
void ZZTalex(int n)
{
/*??????????*/
int i,j,k,zzbarlow,zzbarhigh,curbar,curbar1,curbar2,EP,Mbar[];
double curpr,Mprice[];
bool flag,fd;
/*??????*/
for(i=0;i<=Bars-1;i++)
{zz[i]=0.0;}
EP=ExtPoint;
zzbarlow=iLowest(NULL,0,MODE_LOW,n,0);
zzbarhigh=iHighest(NULL,0,MODE_HIGH,n,0);
if(zzbarlow<zzbarhigh) {curbar=zzbarlow; curpr=Low[zzbarlow];}
if(zzbarlow>zzbarhigh) {curbar=zzbarhigh; curpr=High[zzbarhigh];}
if(zzbarlow==zzbarhigh){curbar=zzbarlow;curpr=funk1(zzbarlow, n);}
ArrayResize(Mbar,ExtPoint);
ArrayResize(Mprice,ExtPoint);
j=0;
endpr=curpr;
endbar=curbar;
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
if(curpr==Low[curbar]) flag=true;
else flag=false;
fl=flag;
i=curbar+1;
while(EP>0)
{
if(flag)
{
while(i<=Bars-1)
{
curbar1=iHighest(NULL,0,MODE_HIGH,n,i);
curbar2=iHighest(NULL,0,MODE_HIGH,n,curbar1);
if(curbar1==curbar2){curbar=curbar1;curpr=High[curbar];flag=false;i=curbar+1;j++;break;}
else i=curbar2;
}
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
}
if(EP==0) break;
if(!flag)
{
while(i<=Bars-1)
{
curbar1=iLowest(NULL,0,MODE_LOW,n,i);
curbar2=iLowest(NULL,0,MODE_LOW,n,curbar1);
if(curbar1==curbar2){curbar=curbar1;curpr=Low[curbar];flag=true;i=curbar+1;j++;break;}
else i=curbar2;
}
Mbar[j]=curbar;
Mprice[j]=curpr;
EP--;
}
}
/* ??????????? ?????? */
if(Mprice[0]==Low[Mbar[0]])fd=true; else fd=false;
for(k=0;k<=ExtPoint-1;k++)
{
if(k==0)
{
if(fd==true)
{
Mbar[k]=iLowest(NULL,0,MODE_LOW,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=Low[Mbar[k]];endbar=ExtDepth;
}
if(fd==false)
{
Mbar[k]=iHighest(NULL,0,MODE_HIGH,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=High[Mbar[k]];endbar=ExtDepth;
}
}
if(k<ExtPoint-2)
{
if(fd==true)
{
Mbar[k+1]=iHighest(NULL,0,MODE_HIGH,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=High[Mbar[k+1]];
}
if(fd==false)
{
Mbar[k+1]=iLowest(NULL,0,MODE_LOW,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=Low[Mbar[k+1]];
}
}
if(fd==true)fd=false;else fd=true;
/* ????????? ZigZag'a */
zz[Mbar[k]]=Mprice[k];
}
}
/*-------------------------------------------------------------------+
/ ZigZag_Talex ????? |
/-------------------------------------------------------------------*/
/*-------------------------------------------------------------------+
/ ?????? ??? ?????? ? ??????? ???? (???? ?? ???????) ????? ????????? |
/ ????? ???????????? ? ???????? ???????. |
/-------------------------------------------------------------------*/
double funk1(int zzbarlow, int ExtDepth)
{
double pr;
int fbarlow,fbarhigh;
fbarlow=iLowest(NULL,0,MODE_LOW,ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
if(fbarlow==fbarhigh)
{
fbarlow=iLowest(NULL,0,MODE_LOW,2*ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,2*ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
if(fbarlow==fbarhigh)
{
fbarlow=iLowest(NULL,0,MODE_LOW,3*ExtDepth,zzbarlow);
fbarhigh=iHighest(NULL,0,MODE_HIGH,3*ExtDepth,zzbarlow);
if(fbarlow>fbarhigh) pr=High[zzbarlow];
if(fbarlow<fbarhigh) pr=Low[zzbarlow];
}
}
return(pr);
}
string TimeFrame()
{
string TF;
switch(Period())
{
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("MN1");
}
}
void GartleyPatternsSearch(int X,int A,int B,int C,int D,int Depth)
{
/* ?????????? ?????????? */
double R0382=0.382,
R0500=0.500,
R0618=0.618,
R0786=0.786,
R0886=0.886,
R1128=1.128,
R1236=1.236,
R1272=1.272,
R1618=1.618,
R2236=2.236,
R2618=2.618,
R3618=3.618;
int XB,AC,BD,XD;
double retXD, retXB, retBD, retAC, minret, maxret;
string BullBear="", NamePattern="",MinMax="";
static int varX,varA,varB,varC,varD;
double PriceD_XD,PriceD_BD;
if(varX==X && varA==A && varB==B && varC==C && varD==D)return;
else {varX=X; varA=A; varB=B; varC=C; varD=D;}
minret=1-ExtDopusk; maxret=1+ExtDopusk;
/* ???? ???????? ?? 5-?? ?????? */
if(FuturePattern==false)
{
if(zz[D]<zz[B] && zz[C]>zz[B] && zz[C]<zz[A] && zz[B]>zz[X])
{
BullBear="Bullish";
MinMax="Min";
}
if(zz[D]>zz[B] && zz[C]<zz[B] && zz[C]>zz[A] && zz[B]<zz[X])
{
BullBear="Bearish";
MinMax="Max";
}
/* ??????? ???????????? */
if(BullBear!="")
{
retXB=(zz[A]-zz[B])/(zz[A]-zz[X]+0.000001);
retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
retXD=(zz[A]-zz[D])/(zz[A]-zz[X]+0.000001);
/* ????? ?????????? ???????????? */
if((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1128*minret) && (retBD<=R2236*maxret) && (retXD>=R0618*minret) && (retXD<=R0786*maxret))
{
NamePattern="Gartley";
}
else if ((retXB>=R0618*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1272*minret) && (retBD<=R2618*maxret) && (retXD>=R1272*minret) && (retXD<=R1618*maxret))
{
NamePattern="Butterfly";
}
else if ((retXB>=R0382*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1618*minret) && (retBD<=R3618*maxret) && (retXD>=R1618*minret) && (retXD<=R1618*maxret))
{
NamePattern="Crab";
}
else if ((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1272*minret) && (retBD<=R2618*maxret) && (retXD>=R0886*minret) && (retXD<=R0886*maxret))
{ // ??? ???????????? ????? ?? ?????? ?????????? ? ????? ? ????? ?????? TSD ? ????? ????? ?????????? (??????? Nen'? ?? ??????)
NamePattern="Bat";
}
}
if (NamePattern!="")
{
CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
}
}
if(FuturePattern==true)
{
int X4,A4,B4,C4;
double retBDminD,retBDmaxD,retXDminD,retXDmaxD,minD,maxD,maxAC;
X4=A;A4=B;B4=C;C4=D;
if(zz[B4]<zz[A4] && zz[B4]>zz[X4] && zz[C4]<zz[A4] && zz[C4]>zz[B4])
{
BullBear="Bullish";
MinMax="Max";
}
if(zz[B4]>zz[A4] && zz[B4]<zz[X4] && zz[C4]>zz[A4] && zz[C4]<zz[B4])
{
BullBear="Bearish";
MinMax="Min";
}
/* ??????? ???????????? */
/* ??? ???????????? ????? ?? ?????? ?????????? ? ????? ? ????? ?????? TSD ? ????? ????? ?????????? (??????? Nen'? ?? ??????)*/
if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
/* ????? ?????????? ???????????? */
if((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
{
NamePattern="Gartley";
retBDminD=zz[C4]-R1128*minret*(zz[C4]-zz[B4]);
retBDmaxD=zz[C4]-R2236*maxret*(zz[C4]-zz[B4]);
retXDminD=zz[A4]-R0618*minret*(zz[A4]-zz[X4]);
retXDmaxD=zz[A4]-R0786*maxret*(zz[A4]-zz[X4]);
maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bullish")
{
if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
if(BullBear=="Bearish")
{
if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
else if ((retXB>=R0618*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
{
NamePattern="Butterfly";
retBDminD=zz[C4]-R1272*minret*(zz[C4]-zz[B4]);
retBDmaxD=zz[C4]-R2618*maxret*(zz[C4]-zz[B4]);
retXDminD=zz[A4]-R1272*minret*(zz[A4]-zz[X4]);
retXDmaxD=zz[A4]-R1618*maxret*(zz[A4]-zz[X4]);
maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bullish")
{
if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
if(BullBear=="Bearish")
{
if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
else if ((retXB>=R0382*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
{
NamePattern="Crab";
retBDminD=zz[C4]-R1618*minret*(zz[C4]-zz[B4]);
retBDmaxD=zz[C4]-R3618*maxret*(zz[C4]-zz[B4]);
retXDminD=zz[A4]-R1618*minret*(zz[A4]-zz[X4]);
retXDmaxD=zz[A4]-R1618*maxret*(zz[A4]-zz[X4]);
maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bullish")
{
if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
if(BullBear=="Bearish")
{
if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
else if ((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
{
NamePattern="Bat";
retBDminD=zz[C4]-R1272*minret*(zz[C4]-zz[B4]);
retBDmaxD=zz[C4]-R2618*maxret*(zz[C4]-zz[B4]);
retXDminD=zz[A4]-R0886*minret*(zz[A4]-zz[X4]);
retXDmaxD=zz[A4]-R0886*maxret*(zz[A4]-zz[X4]);
maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bullish")
{
if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
if(BullBear=="Bearish")
{
if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
}
}
}
void Patterns50Search(int X,int A,int B,int C,int D,int Depth)
{
double R0500=0.500,
R1128=1.128,
R1236=1.236,
R1272=1.272,
R1618=1.618,
R2236=2.236;
int XB,AC,BD;
double retXD, retXB, retBD, retAC, minret, maxret;
string BullBear="", NamePattern="", MinMax="";
static int var50X,var50A,var50B,var50C,var50D;
if(var50X==X && var50A==A && var50B==B && var50C==C && var50D==D)return;
else {var50X=X; var50A=A; var50B=B; var50C=C; var50D=D;}
minret=1-ExtDopusk; maxret=1+ExtDopusk;
/* ???? ???????? ?? 5-?? ?????? */
if(FuturePattern==false)
{
if(zz[X]>zz[B] && zz[X]<zz[A] && zz[D]>zz[B] && zz[D]<zz[C] && zz[A]<zz[C])
{
BullBear="Bullish";
MinMax="Min";
}
if(zz[X]<zz[B] && zz[X]>zz[A] && zz[D]<zz[B] && zz[D]>zz[C] && zz[A]>zz[C])
{
BullBear="Bearish";
MinMax="Max";
}
/* ??????? ???????????? ??? ??????? ???????? */
if(BullBear!="")
{
retXB=(zz[A]-zz[B])/(zz[A]-zz[X]+0.000001);
retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
/* ????? ?????????? ???????????? */
if((retXB>=R1128*minret) && (retXB<=R1618*maxret) && (retAC>=R1618*minret) && (retAC<=R2236*maxret) && (retBD>=R0500*minret) && (retBD<=R0500*maxret))
{
NamePattern="Pattern_5-0";
}
}
if (NamePattern !="")
{
CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
}
}
if(FuturePattern==true)
{
int X4,A4,B4,C4;
double retBDminD,retBDmaxD,minD,maxD,maxAC;
X4=A;A4=B;B4=C;C4=D;
if(zz[X4]<zz[A4] && zz[X4]>zz[B4] && zz[A4]<zz[C4])
{
BullBear="Bullish";
MinMax="Max";
}
if(zz[X4]>zz[A4] && zz[X4]<zz[B4] && zz[A4]>zz[C4])
{
BullBear="Bearish";
MinMax="Min";
}
/* ??????? ???????????? */
/* ??? ???????????? ????? ?? ?????? ?????????? ? ????? ? ????? ?????? TSD ? ????? ????? ?????????? (??????? Nen'? ?? ??????)*/
if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
/* ????? ?????????? ???????????? */
if((retXB>=R1128*minret) && (retXB<=R1618*maxret) && (retAC>=R1618*minret) && (retAC<=R2236*maxret))
{
NamePattern="Pattern_5-0";
retBDminD=zz[C4]-R0500*minret*(zz[C4]-zz[B4]);
retBDmaxD=zz[C4]-R0500*maxret*(zz[C4]-zz[B4]);
maxAC=2.236*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bearish")
{
minD=retBDmaxD;maxD=retBDminD;
}
if(BullBear=="Bullish")
{
minD=retBDminD;maxD=retBDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
}
}
}
void ABCDSearch(int A,int B,int C,int D,int Depth)
{
double R0618=0.618,
R0786=0.786,
R1272=1.272,
R1618=1.618;
int AC,BD,X;
double retBD,retAC,retXB,retXD,minret,maxret;
string BullBear="", NamePattern="",MinMax="";
static int varabcdA,varabcdB,varabcdC,varabcdD;
if(varabcdA==A && varabcdB==B && varabcdC==C && varabcdD==D)return;
else {varabcdA=A; varabcdB=B; varabcdC=C; varabcdD=D;}
minret=1-ExtDopusk; maxret=1+ExtDopusk;
/* ???? ???????? ?? 5-?? ?????? */
if(FuturePattern ==false)
{
if(MathAbs(zz[A]-zz[B])/MathAbs(zz[C]-zz[D])<=maxret && MathAbs(zz[A]-zz[B])/MathAbs(zz[C]-zz[D])>=minret && (A-C)/(1.0*(B-D))<=1+TimeDopusk && (A-C)/(1.0*(B-D))>=1-TimeDopusk)
{
if(zz[A]>zz[C] && zz[B]<zz[C] && zz[B]>zz[D])
{
BullBear="Bullish";
MinMax="Min";
}
if(zz[A]<zz[C] && zz[B]>zz[C] && zz[B]<zz[D])
{
BullBear="Bearish";
MinMax="Max";
}
/* ??????? ???????????? ??? ??????? ???????? */
if(BullBear!="")
{
retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
/* ????? ?????????? ???????????? */
if((retAC>=R0618*minret) && (retAC<=R0786*maxret) && (retBD>=R1272*minret) && (retBD<=R1618*maxret))
{
NamePattern="AB=CD";
}
}
if (NamePattern!="")
{
CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
}
}
}
if(FuturePattern==true)
{
int X4,A4,B4,C4;
double retBDminD,retBDmaxD,minD,maxD,maxAC;
A4=B;B4=C;C4=D;
if(zz[A4]>zz[C4] && zz[C4]>zz[B4])
{
BullBear="Bullish";
MinMax="Max";
}
if(zz[A4]<zz[C4] && zz[C4]<zz[B4])
{
BullBear="Bearish";
MinMax="Min";
}
if(BullBear!="")
{
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
/* ????? ?????????? ???????????? */
if((retAC>=R0618*minret) && (retAC<=R0786*maxret))
{
NamePattern="AB=CD";
retBDminD=zz[C4]-minret*(zz[A4]-zz[B4]);
retBDmaxD=zz[C4]-maxret*(zz[A4]-zz[B4]);
maxAC=0.786*maxret*(zz[A4]-zz[B4])+zz[B4];
if(BullBear=="Bearish")
{
minD=retBDmaxD;maxD=retBDminD;
}
if(BullBear=="Bullish")
{
minD=retBDminD;maxD=retBDmaxD;
}
CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
}
}
}
}
void WolfWavesSearch(int P1,int P2,int P3,int P4,int P5,int Depth)
{
datetime t1,t2,t3,t4,t5,t6,t7,t8,t9;
double p1,p2,p3,p4,p5,p6,p7,p8,p9;
double condition1,condition2;
string BullBear="", NamePattern="";
static int varP1,varP2,varP3,varP4,varP5;
if(varP1==P1 && varP2==P2 && varP3==P3 && varP4==P4 && varP5==P5)return;
else {varP1=P1; varP2=P2; varP3=P3; varP4=P4; varP5=P5;}
if(FuturePattern==false)
{
if(zz[P1]<zz[P2] && zz[P1]>zz[P3] && zz[P4]<zz[P2] && zz[P4]>zz[P1] && zz[P5]<zz[P3] && (P1-P3)/(1.0*(P3-P5))<=1+TimeDopusk && (P1-P3)/(1.0*(P3-P5))>=1-TimeDopusk && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk && (P2-P4)/(1.0*(P3-P5))<=1+TimeDopusk && (P2-P4)/(1.0*(P3-P5))>=1-TimeDopusk)
{
BullBear="Bullish";
}
if(zz[P1]>zz[P2] && zz[P1]<zz[P3] && zz[P4]>zz[P2] && zz[P4]<zz[P1] && zz[P5]>zz[P3] && (P1-P3)/(1.0*(P3-P5))<=1+TimeDopusk && (P1-P3)/(1.0*(P3-P5))>=1-TimeDopusk && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk && (P2-P4)/(1.0*(P3-P5))<=1+TimeDopusk && (P2-P4)/(1.0*(P3-P5))>=1-TimeDopusk)
{
BullBear="Bearish";
}
if(BullBear!="")
{
t1=Time[P1];p1=zz[P1]; /* ????????? ?.1 */
t2=Time[P2];p2=zz[P2]; /* ????????? ?.2 */
t3=Time[P3];p3=zz[P3]; /* ????????? ?.3 */
t4=Time[P4];p4=zz[P4]; /* ????????? ?.4 */
t5=Time[P5];p5=zz[P5]; /* ????????? ?.5 */
t6=Time[P5];p6=zz[P3]-NormalizeDouble(((zz[P1]-zz[P3])/(P1-P3))*(P3-P5),Digits); /* ????????? ?.6 - ?? ????? 1-3 */
t7=Time[P5];p7=zz[P3]-NormalizeDouble(((zz[P2]-zz[P4])/(P2-P4))*(P3-P5),Digits); /* ????????? ?.7 - ?? ?.3 ????? ??????????? 2-4*/
t8=Time[0]-(2*P4-P1)*Period()*60;p8=2*zz[P4]-zz[P1]; /* ????????? ?.8 - ?? ????? 1-4 */
t9=t8+(P1-P3)*Period()*60;p9=p8-(zz[P1]-zz[P3]); /* ????????? ?.9 - ?? ?.3 ????? ??????????? 1-4*/
if(p7<p6){condition1=p6;condition2=p7;}
else {condition2=p6; condition1=p7;}
if (zz[P5]<=condition1 && zz[P5]>=condition2)
{
NamePattern="WolfeWaves";
WolfWavesDraw(NamePattern,BullBear,Depth,t1,t2,t3,t4,t5,t6,t7,t8,t9,p1,p2,p3,p4,p5,p6,p7,p8,p9);
}
}
}
if(FuturePattern==true)
{
P1=P2;P2=P3;P3=P4;P4=P5;P5=0;
Print("P1=",zz[P1],"; P2=",zz[P2],"; P3=",zz[P3],"; P4=",zz[P4]);
if(zz[P1]<zz[P2] && zz[P1]>zz[P3] && zz[P4]<zz[P2] && zz[P4]>zz[P1] && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk)
{
BullBear="Bull";
}
if(zz[P1]>zz[P2] && zz[P1]<zz[P3] && zz[P4]>zz[P2] && zz[P4]<zz[P1] && (P1-P3)/(1.0*(P2-P4))<=1+TimeDoПоказано первые 50% кода (символов: 44800)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.