ABCD Pattern in 2 timeframes

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #117766 quote
    PEDRAM.JOKAR
    Participant
    Average

    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/
    #117767 quote
    PEDRAM.JOKAR
    Participant
    Average
    lets say in 15 Min and 1 H timeframes
    #117774 quote
    robertogozzi
    Moderator
    Master
    Ok, I’ll make it soon.
    #117800 quote
    robertogozzi
    Moderator
    Master
    There you go (I also attach the .ITF file), you can change TFs as you wish:
    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=↓")
    PEDRAM.JOKAR, JMat45 and Andyswede thanked this post
    y-1.jpg y-1.jpg ABCD-screener-MTF.itf
    #117819 quote
    PEDRAM.JOKAR
    Participant
    Average
    Thank you so much.
    #118229 quote
    JMat45
    Participant
    Senior
    Amazing job, Roberto.
    robertogozzi thanked this post
    #118514 quote
    PEDRAM.JOKAR
    Participant
    Average
    Can you please update the code for when there is either Red/Green ABCD pattern in 15 Min TF and there is same color pattern in one of the last ten bars in 1 Hour TF including current TF.
    #118525 quote
    robertogozzi
    Moderator
    Master
    Replace lines 421-426 with:
    x = 0
    IF summation[10](LpointD > 0) THEN
       x = 1
    ELSIF summation[10](SpointD > 0) THEN
       x = 2
    ENDIF
    PEDRAM.JOKAR thanked this post
Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.

ABCD Pattern in 2 timeframes


ProScreener: Market Scanners & Detection

New Reply
Author
Summary

This topic contains 7 replies,
has 3 voices, and was last updated by robertogozzi
6 years, 1 month ago.

Topic Details
Forum: ProScreener: Market Scanners & Detection
Language: English
Started: 01/24/2020
Status: Active
Attachments: 2 files
Logo Logo
Loading...