Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
I didn't see your last post
=======================
let's make a fresh start
select pattern =8 if we use Dragon,4PointPattern, 5-0,ABCD
select pattern =7 if we use 1,2,3 - or all 27 patterns
It should be Ok now
zup_v134rev02.mq4
I didn't see your last post
=======================
let's make a fresh start
select pattern =8 if we use Dragon,4PointPattern, 5-0,ABCD
select pattern =7 if we use 1,2,3 - or all 27 patternsSorry, I forgot to say. Now you can't use select pattern in this modified version . Instead you can use
section 3 gartley
----------------------
extern bool SearchSharkPatterns = true;
extern bool SearchCypherPatterns = true;
extern bool Search5_0Patterns = true;
extern bool SearchABCDPatterns = true;
In order to make it user friendly I had to rewrite the void _Gartley(string _Depth, int Depth) function from the beginning.
This the function that performs pattern search.
ok see tomorrow
Tomorrow, at 7 pm , (gmt+2 ) I'll show how to add your patterns to the code.
Minsk now 22.43
This is a couple of lines from the original code (void _Gartley function)
while (k < maxPeak-5 && (aXABCD[D] < bartoD+2 || patternInfluence==2))
{
aXABCD[X] = aNumBarPeak[k + 4];
aXABCD[A] = aNumBarPeak[k + 3];
aXABCD = aNumBarPeak[k + 2];
aXABCD[C] = aNumBarPeak[k + 1];
aXABCD[D] = aNumBarPeak[k];
vBullBear = "";
vNamePattern = "";
if (CustomPattern<2)
{
tangensXB=(zz[aXABCD]-zz[aXABCD[X]])/(aXABCD[X]-aXABCD);
if (zz[aXABCD[C]]>zz[aXABCD[D]] && (zz[aXABCD]+(aXABCD-aXABCD[D])*tangensXB)>zz[aXABCD[D]])
{
vBullBear = vBull;
}
else if (zz[aXABCD[C]]<zz[aXABCD[D]] && (zz[aXABCD]+(aXABCD-aXABCD[D])*tangensXB)<zz[aXABCD[D]])
{
vBullBear = vBear;
}
if (StringLen(vBullBear)>0)
{
// îïðåäåëÿåì ðåòðåñìåíòû
retXB = (zz[aXABCD[A]] - zz[aXABCD]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0);
retAC = (zz[aXABCD[C]] - zz[aXABCD]) / (zz[aXABCD[A]] - zz[aXABCD] + vDelta0);
retBD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD] + vDelta0);
if ((zz[aXABCD[A]]>zz[aXABCD[C]] && vBullBear == vBull) || (zz[aXABCD[A]]<zz[aXABCD[C]] && vBullBear == vBear)) retXD = (zz[aXABCD[A]] - zz[aXABCD[D]]) / (zz[aXABCD[A]] - zz[aXABCD[X]] + vDelta0);
else retXD = (zz[aXABCD[C]] - zz[aXABCD[D]]) / (zz[aXABCD[C]] - zz[aXABCD[X]] + vDelta0);
And this is my modified code
while (k < maxPeak-5 && (aXABCD[D] < bartoD+2 || patternInfluence==2))
{
aXABCD[X] = aNumBarPeak[k + 4];
aXABCD[A] = aNumBarPeak[k + 3];
aXABCD = aNumBarPeak[k + 2];
aXABCD[C] = aNumBarPeak[k + 1];
aXABCD[D] = aNumBarPeak[k];
vBullBear = "";
vNamePattern = "";
dotX=zz[aXABCD[X]];
dotA=zz[aXABCD[A]];
dotB=zz[aXABCD];
dotC=zz[aXABCD[C]];
dotD=zz[aXABCD[D]];
retXB=(dotA - dotB) / (dotA - dotX + vDelta0);
retAC=(dotC - dotB) / (dotA - dotB + vDelta0);
retBD=(dotC - dotD) / (dotC - dotB + vDelta0);
retXD=(dotA - dotD) / (dotA - dotX + vDelta0);
retXC=(dotA - dotC) / (dotA - dotX + vDelta0); //Cypher Patterns
AB=MathAbs(dotA-dotB);
CD=MathAbs(dotC-dotD);
AC=MathAbs(dotA-dotC);
BD=MathAbs(dotB-dotD);
if(currentDTime==0) currentDTime=Time[aXABCD[D]];
foundPatternDTime=Time[aXABCD[D]];
patternDotC=dotC;
searchClassicalPatterns=false;
searchSharkPatterns=false;
searchCypherPatterns=false;
search5_0Patterns=false;
searchABCDPatterns=false;
if((dotA > dotX && dotB > dotX && dotB dotB && dotC < dotA && dotD < dotB)|| (dotA < dotX && dotB dotA && dotC dotA && dotD > dotB))searchClassicalPatterns=true;
else if((dotA > dotX && dotB > dotX && dotB dotB && dotC > dotA && dotD < dotB)|| (dotA < dotX && dotB dotA && dotC < dotB && dotC dotB)){searchSharkPatterns=true; searchCypherPatterns=true;}
else if((dotA > dotX && dotB < dotX && dotB dotB && dotC > dotA && dotD > dotB)|| (dotA dotX && dotB > dotA && dotC < dotB && dotC < dotA && dotD < dotB))search5_0Patterns=true;
else if((dotB dotB && dotC < dotA && dotD dotA && dotC dotA && dotD > dotB))searchABCDPatterns=true;
//SEARCH FOR CLASSICAL GARTLEY PATTERNS
if(searchClassicalPatterns==true)
{
if(dotA > dotX && dotB > dotX && dotB dotB && dotC < dotA && dotD < dotB)
{
vBullBear="Bullish";
}
if(dotA < dotX && dotB dotA && dotC dotA && dotD > dotB)
{
vBullBear="Bearish";
}
// Gartley Search Start
if (retAC >= 0.382*min_DeltaGartley && retAC <= 0.886*max_DeltaGartley && retXD < 1.000 && retXD = 1.270*min_DeltaGartley && retBD =0.618*min_DeltaGartley && retXB <= 0.618*max_DeltaGartley)
{
vNamePattern="Gartley";
PriceD_XD=dotA-0.786*(dotA-dotX);
PriceD_BD=dotC-1.618*(dotC-dotB);
if (vBullBear=="Bullish")
{
if(MathMax(PriceD_XD,PriceD_BD)==PriceD_XD)
{
LevelForDmin = dotA-0.786*min_DeltaGartley*(dotA-dotX);
LevelForDmax = dotA-0.786*max_DeltaGartley*(dotA-dotX);
}
else if(MathMax(PriceD_XD,PriceD_BD)==PriceD_BD)
{
LevelForDmin = dotC-1.618*min_DeltaGartley*(dotC-dotB);
LevelForDmax = dotC-1.618*max_DeltaGartley*(dotC-dotB);
}
}
if (vBullBear=="Bearish")
{
if(MathMin(PriceD_XD,PriceD_BD)==PriceD_XD)
{
LevelForDmin = dotA-0.786*min_DeltaGartley*(dotA-dotX);
LevelForDmax = dotA-0.786*max_DeltaGartley*(dotA-dotX);
}
else if(MathMin(PriceD_XD,PriceD_BD)==PriceD_BD)
{
LevelForDmin = dotC-1.618*min_DeltaGartley*(dotC-dotB);
LevelForDmax = dotC-1.618*max_DeltaGartley*(dotC-dotB);
}
}
}// Gartley Search End
Minsk now 22.43
21.:47 here
dotX=zz[aXABCD[X]];
dotA=zz[aXABCD[A]];
dotB=zz[aXABCD];
dotC=zz[aXABCD[C]];
dotD=zz[aXABCD[D]];
are X, A, B, C & D points
retXB=(dotA - dotB) / (dotA - dotX + vDelta0);
retAC=(dotC - dotB) / (dotA - dotB + vDelta0);
retBD=(dotC - dotD) / (dotC - dotB + vDelta0);
retXD=(dotA - dotD) / (dotA - dotX + vDelta0);
retXB, retAC, retBD, retXD are fib retracements