ProRealCode - Trading & Coding with ProRealTime™
Can I have the code for the screener that detects ABCD according to below link’s code in 2 timeframes? I mean, if there is in 2 timeframe red-red or green-green ABCD pattern.
https://www.prorealcode.com/prorealtime-market-screeners/abcd-pattern-screener/TIMEFRAME(1 hour)
//
//------------------------------------------------------------------------------------
// Bullish pattern
//------------------------------------------------------------------------------------
IF BarIndex = 0 THEN
LmaxBars = 100
LminBars = 5
//Ldistance = 15 * pipsize
LpointA = high
LbarA = BarIndex
LpointB = low
LbarB = BarIndex
LpointC = 0
LbarC = 0
LpointD = 0
//LbarD = 0
Lcount = 0
//XLpointA = 0
//XLbarA = 0
//XLpointB = 0
//XLbarB = 0
//XLpointC = 0
//XLbarC = 0
//XLpointD = 0
//XLbarD = 0
ENDIF
//
IF Lcount > LmaxBars THEN
//XLpointA = LpointA
//XLbarA = LbarA
//XLpointB = LpointB
//XLbarB = LbarB
//XLpointC = LpointC
//XLbarC = LbarC
//XLpointD = LpointD
//XLbarD = LbarD
LpointA = high
LbarA = BarIndex
LpointB = low
LbarB = BarIndex
LpointC = 0
LbarC = 0
LpointD = 0
//LbarD = 0
Lcount = 0
ENDIF
Lcount = Lcount + 1 //incrementare il passare delle Bars per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
LpointA = max(LpointA,high)
IF LpointA > LpointA[1] THEN
LbarA = BarIndex
Lcount = 0
LpointB = low
LbarB = BarIndex
LpointC = 0
LbarC = 0
LpointD = 0
//LbarD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
IF LpointC = 0 THEN
LpointB = min(LpointB,low)
IF LpointB < LpointB[1] THEN
LbarB = BarIndex
ENDIF
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
LdiffAB = LpointA - LpointB
LfibC1 = LdiffAB * 0.618
LfibC2 = LdiffAB * 0.786
LfibD1 = LpointC - (LfibC1 * 1.270)
LfibD2 = LpointC - (LfibC2 * 1.618)
IF high >= (LpointB + LfibC1) AND high <= (LpointB + LfibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il Lpoint C....
LpointC = high
LbarC = BarIndex
IF LpointC < LpointC[1] THEN
LpointC = LpointC[1]
LbarC = LbarC[1]
ENDIF
ELSIF close > (LpointB + LfibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo Lpoint A ed un nuovo Lpoint B
LpointA = high
LbarA = BarIndex
LpointB = low
LbarB = BarIndex
LpointC = 0
LbarC = 0
//LbarD = 0
LpointD = 0
Lcount = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close < LfibD2 AND LpointD > 0 THEN
//XLpointA= LpointA
//XLbarA = LbarA
//XLpointB= LpointB
//XLbarB = LbarB
//XLpointC= LpointC
//XLbarC = LbarC
//XLpointD= LpointD
//XLbarD = LbarD
LpointA = high
LbarA = BarIndex
LpointB = low
LbarB = BarIndex
LpointC = 0
LbarC = 0
LpointD = 0
//LbarD = 0
Lcount = 0
ENDIF
IF LpointC > 0 THEN
IF LpointD = 0 THEN
IF close <= LfibD1 AND close >= LfibD2 THEN
LpointD = close
//LbarD = BarIndex
ELSIF close < LfibD2 THEN
LpointD = LfibD2
//LbarD = BarIndex
ENDIF
ELSE
IF close <= LfibD1 AND close >= LfibD2 THEN
LpointD = close
IF LpointD < LpointD[1] THEN
//LbarD = BarIndex
ELSE
LpointD = LpointD[1]
ENDIF
ELSE
//XLpointA= LpointA
//XLbarA = LbarA
//XLpointB= LpointB
//XLbarB = LbarB
//XLpointC= LpointC
//XLbarC = LbarC
//XLpointD= LpointD
//XLbarD = LbarD
LpointA = high
LbarA = BarIndex
Lcount = 0
LpointB = 0
LbarB = 0
LpointC = 0
LbarC = 0
LpointD = 0
//LbarD = 0
ENDIF
ENDIF
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF LpointC > 0 THEN
IF ((LbarC - LbarA) < LminBars ) THEN
LpointC = 0
x = BarIndex - LbarB
FOR i = x DOWNTO 0
IF low[i] < LpointB THEN
LpointB = low[i]
LbarB = BarIndex[i]
ENDIF
NEXT
ENDIF
ENDIF
//IF LpointD > 0 THEN
//IF ((LbarC - LbarA) < LminBars ) OR ((LbarD - LbarC) < LminBars ) THEN
//LpointD = 0
//ENDIF
//ENDIF
IF LpointA > 0 THEN
IF LpointB > 0 THEN
IF LpointC > 0 THEN
IF LpointD > 0 THEN
//IF LpointD[1] = 0 THEN
//XLpointA = LpointA
//XLbarA = LbarA
//XLpointB = LpointB
//XLbarB = LbarB
//XLpointC = LpointC
//XLbarC = LbarC
//XLpointD = LpointD
//XLbarD = LbarD
//ENDIF
//DRAWTEXT("A",LbarA,LpointA - Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",LbarB,LpointB + Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",LbarC,LpointC - Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",LbarD,LpointD + Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(LbarA,LpointA,LbarB,LpointB,LbarC,LpointC)coloured(50,205,50,255)
//DRAWTRIANGLE(LbarC,LpointC,LbarD,LpointC,LbarD,LpointD)coloured(50,205,50,255)
ENDIF
ENDIF
ENDIF
ENDIF
//IF LpointD = 0 AND XLpointD > 0 THEN
//DRAWTEXT("A",XLbarA,XLpointA - Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",XLbarB,XLpointB + Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",XLbarC,XLpointC - Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",XLbarD,XLpointD + Ldistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(XLbarA,XLpointA,XLbarB,XLpointB,XLbarC,XLpointC)coloured(50,205,50,255)
//DRAWTRIANGLE(XLbarC,XLpointC,XLbarD,XLpointC,XLbarD,XLpointD)coloured(50,205,50,255)
//ENDIF
//------------------------------------------------------------------------------------
// Bearish pattern
//------------------------------------------------------------------------------------
IF BarIndex = 0 THEN
SmaxBars = 100
SminBars = 5
//Sdistance = 10 * pipsize
SpointA = low
SbarA = BarIndex
SpointB = high
SbarB = BarIndex
SpointC = 0
SbarC = 0
SpointD = 0
SbarD = 0
Scount = 0
//XSpointA = low
//XSbarA = BarIndex
//XSpointB = high
//XSbarB = BarIndex
//XSpointC = 0
//XSbarC = 0
//XSpointD = 0
//XSbarD = 0
ENDIF
//
IF Scount > SmaxBars THEN
//XSpointA = SpointA
//XSbarA = SbarA
//XSpointB = SpointB
//XSbarB = SbarB
//XSpointC = SpointC
//XSbarC = SbarC
//XSpointD = SpointD
//XSbarD = SbarD
SpointA = low
SbarA = BarIndex
SpointB = high
SbarB = BarIndex
SpointC = 0
SbarC = 0
SpointD = 0
SbarD = 0
Scount = 0
ENDIF
Scount = Scount + 1 //incrementare il passare delle Bars per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
SpointA = min(SpointA,low)
IF SpointA < SpointA[1] THEN
SbarA = BarIndex
Scount = 0
SpointB = high
SbarB = BarIndex
SpointC = 0
SbarC = 0
SpointD = 0
SbarD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
IF SpointC = 0 THEN
SpointB = max(SpointB,high)
IF SpointB > SpointB[1] THEN
SbarB = BarIndex
ENDIF
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
SdiffAB = SpointB - SpointA
SfibC1 = SdiffAB * 0.618
SfibC2 = SdiffAB * 0.786
SfibD1 = SpointC + (SfibC1 * 1.270)
SfibD2 = SpointC + (SfibC2 * 1.618)
IF low <= (SpointB - SfibC1) AND low >= (SpointB - SfibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il Spoint C....
SpointC = low
SbarC = BarIndex
IF SpointC < SpointC[1] THEN
SpointC = SpointC[1]
SbarC = SbarC[1]
ENDIF
ELSIF close < (SpointB - SfibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo Spoint A ed un nuovo Spoint B
SpointA = low
SbarA = BarIndex
SpointB = high
SbarB = BarIndex
SpointC = 0
SbarC = 0
SbarD = 0
SpointD = 0
Scount = 0
ELSIF close > SpointB THEN
//SpointB = high
//SbarB = BarIndex
//SpointC = 0
//SbarC = 0
//SbarD = 0
//SpointD = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close > SfibD2 AND SpointD > 0 THEN
//XSpointA= SpointA
//XSbarA = SbarA
//XSpointB= SpointB
//XSbarB = SbarB
//XSpointC= SpointC
//XSbarC = SbarC
//XSpointD= SpointD
//XSbarD = SbarD
SpointA = low
SpointA = low
SbarA = BarIndex
SpointB = high
SbarB = BarIndex
SpointC = 0
SbarC = 0
SpointD = 0
SbarD = 0
Scount = 0
ENDIF
IF SpointC > 0 THEN
IF SpointD = 0 THEN
IF close >= SfibD1 AND close <= SfibD2 THEN
SpointD = close
SbarD = BarIndex
ELSIF close > SfibD2 THEN
SpointD = SfibD2
SbarD = BarIndex
ENDIF
ELSE
IF close >= SfibD1 AND close <= SfibD2 THEN
SpointD = close
IF SpointD > SpointD[1] THEN
SbarD = BarIndex
ELSE
SpointD = SpointD[1]
ENDIF
ELSE
//XSpointA= SpointA
//XSbarA = SbarA
//XSpointB= SpointB
//XSbarB = SbarB
//XSpointC= SpointC
//XSbarC = SbarC
//XSpointD= SpointD
//XSbarD = SbarD
SpointA = low
SbarA = BarIndex
Scount = 0
SpointB = 0
SbarB = 0
SpointC = 0
SbarC = 0
SpointD = 0
SbarD = 0
ENDIF
ENDIF
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF SpointC > 0 THEN
IF ((SbarC - SbarA) < SminBars ) THEN
SpointC = 0
x = BarIndex - SbarB
FOR i = x DOWNTO 0
IF high[i] > SpointB THEN
SpointB = high[i]
SbarB = BarIndex[i]
ENDIF
NEXT
ENDIF
ENDIF
IF SpointD > 0 THEN
IF ((SbarD - SbarC) < SminBars ) THEN
//IF SpointD > 0 THEN
//IF ((SbarC - SbarA) < SminBars ) OR ((SbarD - SbarC) < SminBars ) THEN
//SpointD = 0
//ENDIF
//ENDIF
SpointD = 0
SbarD = 0
ENDIF
ENDIF
IF SpointA > 0 THEN
IF SpointB > 0 THEN
IF SpointC > 0 THEN
IF SpointD > 0 THEN
//XSpointA = SpointA
//XSbarA = SbarA
//XSpointB = SpointB
//XSbarB = SbarB
//XSpointC = SpointC
//XSbarC = SbarC
//XSpointD = SpointD
//XSbarD = SbarD
//DRAWTEXT("A",SbarA,SpointA - Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",SbarB,SpointB + Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",SbarC,SpointC - Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",SbarD,SpointD + Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(SbarA,SpointA,SbarB,SpointB,SbarC,SpointC)coloured(200,120,120,255)
//DRAWTRIANGLE(SbarC,SpointC,SbarD,SpointC,SbarD,SpointD)coloured(200,120,120,255)
ENDIF
ENDIF
ENDIF
ENDIF
//IF SpointD = 0 AND XSpointD > 0 THEN
//DRAWTEXT("A",XSbarA,XSpointA - Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",XSbarB,XSpointB + Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",XSbarC,XSpointC - Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",XSbarD,XSpointD + Sdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(XSbarA,XSpointA,XSbarB,XSpointB,XSbarC,XSpointC)coloured(200,120,120,255)
//DRAWTRIANGLE(XSbarC,XSpointC,XSbarD,XSpointC,XSbarD,XSpointD)coloured(200,120,120,255)
//ENDIF
x = 0
IF LpointD > 0 THEN
x = 1
ELSIF SpointD > 0 THEN
x = 2
ENDIF
//
TIMEFRAME(15 Minute)
//
//------------------------------------------------------------------------------------
// Bullish pattern
//------------------------------------------------------------------------------------
IF BarIndex = 0 THEN
yLmaxBars = 100
yLminBars = 5
//yLdistance = 15 * pipsize
yLpointA = high
yLbarA = BarIndex
yLpointB = low
yLbarB = BarIndex
yLpointC = 0
yLbarC = 0
yLpointD = 0
//yLbarD = 0
yLcount = 0
//XyLpointA = 0
//XyLbarA = 0
//XyLpointB = 0
//XyLbarB = 0
//XyLpointC = 0
//XyLbarC = 0
//XyLpointD = 0
//XyLbarD = 0
ENDIF
//
IF yLcount > yLmaxBars THEN
//XyLpointA = yLpointA
//XyLbarA = yLbarA
//XyLpointB = yLpointB
//XyLbarB = yLbarB
//XyLpointC = yLpointC
//XyLbarC = yLbarC
//XyLpointD = yLpointD
//XyLbarD = yLbarD
yLpointA = high
yLbarA = BarIndex
yLpointB = low
yLbarB = BarIndex
yLpointC = 0
yLbarC = 0
yLpointD = 0
//yLbarD = 0
yLcount = 0
ENDIF
yLcount = yLcount + 1 //incrementare il passare delle Bars per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
yLpointA = max(yLpointA,high)
IF yLpointA > yLpointA[1] THEN
yLbarA = BarIndex
yLcount = 0
yLpointB = low
yLbarB = BarIndex
yLpointC = 0
yLbarC = 0
yLpointD = 0
//yLbarD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
IF yLpointC = 0 THEN
yLpointB = min(yLpointB,low)
IF yLpointB < yLpointB[1] THEN
yLbarB = BarIndex
ENDIF
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
yLdiffAB = yLpointA - yLpointB
yLfibC1 = yLdiffAB * 0.618
yLfibC2 = yLdiffAB * 0.786
yLfibD1 = yLpointC - (yLfibC1 * 1.270)
yLfibD2 = yLpointC - (yLfibC2 * 1.618)
IF high >= (yLpointB + yLfibC1) AND high <= (yLpointB + yLfibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il Lpoint C....
yLpointC = high
yLbarC = BarIndex
IF yLpointC < yLpointC[1] THEN
yLpointC = yLpointC[1]
yLbarC = yLbarC[1]
ENDIF
ELSIF close > (yLpointB + yLfibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo Lpoint A ed un nuovo Lpoint B
yLpointA = high
yLbarA = BarIndex
yLpointB = low
yLbarB = BarIndex
yLpointC = 0
yLbarC = 0
//yLbarD = 0
yLpointD = 0
yLcount = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close < yLfibD2 AND yLpointD > 0 THEN
//XyLpointA= yLpointA
//XyLbarA = yLbarA
//XyLpointB= yLpointB
//XyLbarB = yLbarB
//XyLpointC= yLpointC
//XyLbarC = yLbarC
//XyLpointD= yLpointD
//XyLbarD = yLbarD
yLpointA = high
yLbarA = BarIndex
yLpointB = low
yLbarB = BarIndex
yLpointC = 0
yLbarC = 0
yLpointD = 0
//yLbarD = 0
yLcount = 0
ENDIF
IF yLpointC > 0 THEN
IF yLpointD = 0 THEN
IF close <= yLfibD1 AND close >= yLfibD2 THEN
yLpointD = close
//yLbarD = BarIndex
ELSIF close < yLfibD2 THEN
yLpointD = yLfibD2
//yLbarD = BarIndex
ENDIF
ELSE
IF close <= yLfibD1 AND close >= yLfibD2 THEN
yLpointD = close
IF yLpointD < yLpointD[1] THEN
//yLbarD = BarIndex
ELSE
yLpointD = yLpointD[1]
ENDIF
ELSE
//XyLpointA= yLpointA
//XyLbarA = yLbarA
//XyLpointB= yLpointB
//XyLbarB = yLbarB
//XyLpointC= yLpointC
//XyLbarC = yLbarC
//XyLpointD= yLpointD
//XyLbarD = yLbarD
yLpointA = high
yLbarA = BarIndex
yLcount = 0
yLpointB = 0
yLbarB = 0
yLpointC = 0
yLbarC = 0
yLpointD = 0
//yLbarD = 0
ENDIF
ENDIF
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF yLpointC > 0 THEN
IF ((yLbarC - yLbarA) < yLminBars ) THEN
yLpointC = 0
yx = BarIndex - yLbarB
FOR yi = yx DOWNTO 0
IF low[yi] < yLpointB THEN
yLpointB = low[yi]
yLbarB = BarIndex[yi]
ENDIF
NEXT
ENDIF
ENDIF
//IF yLpointD > 0 THEN
//IF ((yLbarC - yLbarA) < yLminBars ) OR ((yLbarD - yLbarC) < yLminBars ) THEN
//yLpointD = 0
//ENDIF
//ENDIF
IF yLpointA > 0 THEN
IF yLpointB > 0 THEN
IF yLpointC > 0 THEN
IF yLpointD > 0 THEN
//IF yLpointD[1] = 0 THEN
//XyLpointA = yLpointA
//XyLbarA = yLbarA
//XyLpointB = yLpointB
//XyLbarB = yLbarB
//XyLpointC = yLpointC
//XyLbarC = yLbarC
//XyLpointD = yLpointD
//XyLbarD = yLbarD
//ENDIF
//DRAWTEXT("A",yLbarA,yLpointA - yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",yLbarB,yLpointB + yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",yLbarC,yLpointC - yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",yLbarD,yLpointD + yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(yLbarA,yLpointA,yLbarB,yLpointB,yLbarC,yLpointC)coloured(50,205,50,255)
//DRAWTRIANGLE(yLbarC,yLpointC,yLbarD,yLpointC,yLbarD,yLpointD)coloured(50,205,50,255)
ENDIF
ENDIF
ENDIF
ENDIF
//IF yLpointD = 0 AND XyLpointD > 0 THEN
//DRAWTEXT("A",XyLbarA,XyLpointA - yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",XyLbarB,XyLpointB + yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",XyLbarC,XyLpointC - yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",XyLbarD,XyLpointD + yLdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(XyLbarA,XyLpointA,XyLbarB,XyLpointB,XyLbarC,XyLpointC)coloured(50,205,50,255)
//DRAWTRIANGLE(XyLbarC,XyLpointC,XyLbarD,XyLpointC,XyLbarD,XyLpointD)coloured(50,205,50,255)
//ENDIF
//------------------------------------------------------------------------------------
// Bearish pattern
//------------------------------------------------------------------------------------
IF BarIndex = 0 THEN
ySmaxBars = 100
ySminBars = 5
//ySdistance = 10 * pipsize
ySpointA = low
ySbarA = BarIndex
ySpointB = high
ySbarB = BarIndex
ySpointC = 0
ySbarC = 0
ySpointD = 0
ySbarD = 0
yScount = 0
//XySpointA = low
//XySbarA = BarIndex
//XySpointB = high
//XySbarB = BarIndex
//XySpointC = 0
//XySbarC = 0
//XySpointD = 0
//XySbarD = 0
ENDIF
//
IF yScount > ySmaxBars THEN
//XySpointA = ySpointA
//XySbarA = ySbarA
//XySpointB = ySpointB
//XySbarB = ySbarB
//XySpointC = ySpointC
//XySbarC = ySbarC
//XySpointD = ySpointD
//XySbarD = ySbarD
ySpointA = low
ySbarA = BarIndex
ySpointB = high
ySbarB = BarIndex
ySpointC = 0
ySbarC = 0
ySpointD = 0
ySbarD = 0
yScount = 0
ENDIF
yScount = yScount + 1 //incrementare il passare delle Bars per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
ySpointA = min(ySpointA,low)
IF ySpointA < ySpointA[1] THEN
ySbarA = BarIndex
yScount = 0
ySpointB = high
ySbarB = BarIndex
ySpointC = 0
ySbarC = 0
ySpointD = 0
ySbarD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
IF ySpointC = 0 THEN
ySpointB = max(ySpointB,high)
IF ySpointB > ySpointB[1] THEN
ySbarB = BarIndex
ENDIF
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
ySdiffAB = ySpointB - ySpointA
ySfibC1 = ySdiffAB * 0.618
ySfibC2 = ySdiffAB * 0.786
ySfibD1 = ySpointC + (ySfibC1 * 1.270)
ySfibD2 = ySpointC + (ySfibC2 * 1.618)
IF low <= (ySpointB - ySfibC1) AND low >= (ySpointB - ySfibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il Spoint C....
ySpointC = low
ySbarC = BarIndex
IF ySpointC < ySpointC[1] THEN
ySpointC = ySpointC[1]
ySbarC = ySbarC[1]
ENDIF
ELSIF close < (ySpointB - ySfibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo Spoint A ed un nuovo Spoint B
ySpointA = low
ySbarA = BarIndex
ySpointB = high
ySbarB = BarIndex
ySpointC = 0
ySbarC = 0
ySbarD = 0
ySpointD = 0
yScount = 0
ELSIF close > ySpointB THEN
//ySpointB = high
//ySbarB = BarIndex
//ySpointC = 0
//ySbarC = 0
//ySbarD = 0
//ySpointD = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close > ySfibD2 AND ySpointD > 0 THEN
//XySpointA= ySpointA
//XySbarA = ySbarA
//XySpointB= ySpointB
//XySbarB = ySbarB
//XySpointC= ySpointC
//XySbarC = ySbarC
//XySpointD= ySpointD
//XySbarD = ySbarD
ySpointA = low
ySpointA = low
ySbarA = BarIndex
ySpointB = high
ySbarB = BarIndex
ySpointC = 0
ySbarC = 0
ySpointD = 0
ySbarD = 0
yScount = 0
ENDIF
IF ySpointC > 0 THEN
IF ySpointD = 0 THEN
IF close >= ySfibD1 AND close <= ySfibD2 THEN
ySpointD = close
ySbarD = BarIndex
ELSIF close > ySfibD2 THEN
ySpointD = ySfibD2
ySbarD = BarIndex
ENDIF
ELSE
IF close >= ySfibD1 AND close <= ySfibD2 THEN
ySpointD = close
IF ySpointD > ySpointD[1] THEN
ySbarD = BarIndex
ELSE
ySpointD = ySpointD[1]
ENDIF
ELSE
//XySpointA= ySpointA
//XySbarA = ySbarA
//XySpointB= ySpointB
//XySbarB = ySbarB
//XySpointC= ySpointC
//XySbarC = ySbarC
//XySpointD= ySpointD
//XySbarD = ySbarD
ySpointA = low
ySbarA = BarIndex
yScount = 0
ySpointB = 0
ySbarB = 0
ySpointC = 0
ySbarC = 0
ySpointD = 0
ySbarD = 0
ENDIF
ENDIF
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF ySpointC > 0 THEN
IF ((ySbarC - ySbarA) < ySminBars ) THEN
ySpointC = 0
kx = BarIndex - ySbarB
FOR ki = kx DOWNTO 0
IF high[ki] > ySpointB THEN
ySpointB = high[ki]
ySbarB = BarIndex[ki]
ENDIF
NEXT
ENDIF
ENDIF
IF ySpointD > 0 THEN
IF ((ySbarD - ySbarC) < ySminBars ) THEN
//IF ySpointD > 0 THEN
//IF ((ySbarC - ySbarA) < ySminBars ) OR ((ySbarD - ySbarC) < ySminBars ) THEN
//ySpointD = 0
//ENDIF
//ENDIF
ySpointD = 0
ySbarD = 0
ENDIF
ENDIF
IF ySpointA > 0 THEN
IF ySpointB > 0 THEN
IF ySpointC > 0 THEN
IF ySpointD > 0 THEN
//XySpointA = ySpointA
//XySbarA = ySbarA
//XySpointB = ySpointB
//XySbarB = ySbarB
//XySpointC = ySpointC
//XySbarC = ySbarC
//XySpointD = ySpointD
//XySbarD = ySbarD
//DRAWTEXT("A",ySbarA,ySpointA - ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",ySbarB,ySpointB + ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",ySbarC,ySpointC - ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",ySbarD,ySpointD + ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(ySbarA,ySpointA,ySbarB,ySpointB,ySbarC,ySpointC)coloured(200,120,120,255)
//DRAWTRIANGLE(ySbarC,ySpointC,ySbarD,ySpointC,ySbarD,ySpointD)coloured(200,120,120,255)
ENDIF
ENDIF
ENDIF
ENDIF
//IF ySpointD = 0 AND XySpointD > 0 THEN
//DRAWTEXT("A",XySbarA,XySpointA - ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("B",XySbarB,XySpointB + ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("C",XySbarC,XySpointC - ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTEXT("D",XySbarD,XySpointD + ySdistance,Dialog,Bold,14) coloured(205,0,205,255)
//DRAWTRIANGLE(XySbarA,XySpointA,XySbarB,XySpointB,XySbarC,XySpointC)coloured(200,120,120,255)
//DRAWTRIANGLE(XySbarC,XySpointC,XySbarD,XySpointC,XySbarD,XySpointD)coloured(200,120,120,255)
//ENDIF
y = 0
IF yLpointD > 0 THEN
y = 1
ELSIF ySpointD > 0 THEN
y = 2
ENDIF
//
TIMEFRAME(default)
//
z = 0
IF x = 1 AND y = 1 THEN
z = 1
ELSIF x = 2 AND y = 2 THEN
z = 2
ENDIF
SCREENER[z](z AS "1=↑, 2=↓")
x = 0
IF summation[10](LpointD > 0) THEN
x = 1
ELSIF summation[10](SpointD > 0) THEN
x = 2
ENDIF
ABCD Pattern in 2 timeframes
This topic contains 7 replies,
has 3 voices, and was last updated by
robertogozzi
6 years, 1 month ago.
| Forum: | ProScreener: Market Scanners & Detection |
| Language: | English |
| Started: | 01/24/2020 |
| Status: | Active |
| Attachments: | 2 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.