ABCD Pattern in 2 timeframes

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #117766 quote
    PEDRAM.JOKARPEDRAM.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.JOKARPEDRAM.JOKAR
    Participant
    Average
    lets say in 15 Min and 1 H timeframes
    #117774 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    Ok, I’ll make it soon.
    #117800 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    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.JOKARPEDRAM.JOKAR
    Participant
    Average
    Thank you so much.
    #118229 quote
    JMat45JMat45
    Participant
    Senior
    Amazing job, Roberto.
    robertogozzi thanked this post
    #118514 quote
    PEDRAM.JOKARPEDRAM.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
    robertogozzirobertogozzi
    Moderator
    Legend
    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.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

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 robertogozzirobertogozzi
6 years, 8 months ago.

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