conversion indicateur super ichi

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #264939 quote
    stephxrstephxr
    Participant
    Junior

    bonjour

    Serait il possible de me convertir le script de cet indicateur en langage probuilder?

    merci!

    #264940 quote
    stephxrstephxr
    Participant
    Junior

    //@version=5

    indicator(“SuperIchi [LUX]”,’SuperIchi [LuxAlgo]’,overlay=true,max_lines_count=500)

    tenkan_len = input(9,’Tenkan ‘,inline=’tenkan’)

    tenkan_mult = input(2.,”,inline=’tenkan’)


    kijun_len = input(26,’Kijun ‘,inline=’kijun’)

    kijun_mult = input(4.,”,inline=’kijun’)


    spanB_len = input(52,’Senkou Span B ’,inline=’span’)

    spanB_mult = input(6.,”,inline=’span’)


    offset   = input(26,’Displacement’)

    //——————————————————————————

    avg(src,length,mult)=>

      atr = ta.atr(length)*mult

      up = hl2 + atr

      dn = hl2 – atr

      upper = 0.,lower = 0.

      upper := src[1] < upper[1] ? math.min(up,upper[1]) : up

      lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn

       

      os = 0,max = 0.,min = 0.

      os := src > upper ? 1 : src < lower ? 0 : os[1]

      spt = os == 1 ? lower : upper

      max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt

      min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt

      math.avg(max,min)

    //——————————————————————————

    tenkan = avg(close,tenkan_len,tenkan_mult)

    kijun = avg(close,kijun_len,kijun_mult)


    senkouA = math.avg(kijun,tenkan)

    senkouB = avg(close,spanB_len,spanB_mult)

    //——————————————————————————

    tenkan_css = #2157f3

    kijun_css = #ff5d00


    cloud_a = color.new(color.teal,80)

    cloud_b = color.new(color.red,80)


    chikou_css = #7b1fa2


    plot(tenkan,’Tenkan-Sen’,tenkan_css)

    plot(kijun,’Kijun-Sen’,kijun_css)


    plot(ta.crossover(tenkan,kijun) ? kijun : na,’Crossover’,#2157f3,3,plot.style_circles)

    plot(ta.crossunder(tenkan,kijun) ? kijun : na,’Crossunder’,#ff5d00,3,plot.style_circles)


    A = plot(senkouA,’Senkou Span A’,na,offset=offset-1)

    B = plot(senkouB,’Senkou Span B’,na,offset=offset-1)

    fill(A,B,senkouA > senkouB ? cloud_a : cloud_b)


    plot(close,’Chikou’,chikou_css,offset=-offset+1,display=display.none)


    #264941 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Voilà. Je déplace cette discussion vers le groupe de traduction des indicateurs TradingView vers ProBuilder.

    DEFPARAM DRAWONLASTBARONLY = TRUE
    //--------------------------------------------
    // PRC_SuperIchi (SuperIchi [LUX] by LuxAlgo)
    // version = 0
    // 04.09.2026
    // Ivan Gonzalez @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //--------------------------------------------
    // Ichimoku-style set of lines built on an ATR trailing-stop
    // engine instead of the classic Donchian midpoints.
    // Each line is the midpoint between the extreme reached by
    // price and the trailing stop of its own regime.
    //--------------------------------------------
    
    
    //=== INPUTS (declare as Variables in the editor) ===
    tenkanLen  = 9        // Tenkan ATR length
    tenkanMult = 2.0      // Tenkan ATR multiplier
    kijunLen   = 26       // Kijun ATR length
    kijunMult  = 4.0      // Kijun ATR multiplier
    spanBLen   = 52       // Senkou Span B ATR length
    spanBMult  = 6.0      // Senkou Span B ATR multiplier
    disp       = 26       // Displacement
    
    
    //=== ADAPTIVE MIDLINE ENGINE - TENKAN ===
    atrT = averagetruerange[tenkanLen](close) * tenkanMult
    upT  = (high + low) / 2 + atrT
    dnT  = (high + low) / 2 - atrT
    
    
    IF barindex <= tenkanLen THEN
       upperT = upT
       lowerT = dnT
       osT    = 0
       sptT   = close
       mxT    = close
       mnT    = close
    ELSE
       IF close[1]  lowerT[1] THEN
          lowerT = max(dnT, lowerT[1])
       ELSE
          lowerT = dnT
       ENDIF
    
    
       IF close > upperT THEN
          osT = 1
       ELSIF close < lowerT THEN
          osT = 0
       ELSE
          osT = osT[1]
       ENDIF
    
    
       IF osT = 1 THEN
          sptT = lowerT
       ELSE
          sptT = upperT
       ENDIF
    
    
       crT = 0
       IF close[1]  sptT THEN
          crT = 1
       ENDIF
       IF close[1] > sptT[1] AND close < sptT THEN
          crT = 1
       ENDIF
    
    
       IF crT = 1 OR osT = 1 THEN
          mxT = max(close, mxT[1])
       ELSE
          mxT = sptT
       ENDIF
       IF crT = 1 OR osT = 0 THEN
          mnT = min(close, mnT[1])
       ELSE
          mnT = sptT
       ENDIF
    ENDIF
    
    
    //=== ADAPTIVE MIDLINE ENGINE - KIJUN ===
    atrK = averagetruerange[kijunLen](close) * kijunMult
    upK  = (high + low) / 2 + atrK
    dnK  = (high + low) / 2 - atrK
    
    
    IF barindex <= kijunLen THEN
       upperK = upK
       lowerK = dnK
       osK    = 0
       sptK   = close
       mxK    = close
       mnK    = close
    ELSE
       IF close[1]  lowerK[1] THEN
          lowerK = max(dnK, lowerK[1])
       ELSE
          lowerK = dnK
       ENDIF
    
    
       IF close > upperK THEN
          osK = 1
       ELSIF close < lowerK THEN
          osK = 0
       ELSE
          osK = osK[1]
       ENDIF
    
    
       IF osK = 1 THEN
          sptK = lowerK
       ELSE
          sptK = upperK
       ENDIF
    
    
       crK = 0
       IF close[1]  sptK THEN
          crK = 1
       ENDIF
       IF close[1] > sptK[1] AND close < sptK THEN
          crK = 1
       ENDIF
    
    
       IF crK = 1 OR osK = 1 THEN
          mxK = max(close, mxK[1])
       ELSE
          mxK = sptK
       ENDIF
       IF crK = 1 OR osK = 0 THEN
          mnK = min(close, mnK[1])
       ELSE
          mnK = sptK
       ENDIF
    ENDIF
    
    
    //=== ADAPTIVE MIDLINE ENGINE - SENKOU SPAN B ===
    atrS = averagetruerange[spanBLen](close) * spanBMult
    upS  = (high + low) / 2 + atrS
    dnS  = (high + low) / 2 - atrS
    
    
    IF barindex <= spanBLen THEN
       upperS = upS
       lowerS = dnS
       osS    = 0
       sptS   = close
       mxS    = close
       mnS    = close
    ELSE
       IF close[1]  lowerS[1] THEN
          lowerS = max(dnS, lowerS[1])
       ELSE
          lowerS = dnS
       ENDIF
    
    
       IF close > upperS THEN
          osS = 1
       ELSIF close < lowerS THEN
          osS = 0
       ELSE
          osS = osS[1]
       ENDIF
    
    
       IF osS = 1 THEN
          sptS = lowerS
       ELSE
          sptS = upperS
       ENDIF
    
    
       crS = 0
       IF close[1]  sptS THEN
          crS = 1
       ENDIF
       IF close[1] > sptS[1] AND close < sptS THEN
          crS = 1
       ENDIF
    
    
       IF crS = 1 OR osS = 1 THEN
          mxS = max(close, mxS[1])
       ELSE
          mxS = sptS
       ENDIF
       IF crS = 1 OR osS = 0 THEN
          mnS = min(close, mnS[1])
       ELSE
          mnS = sptS
       ENDIF
    ENDIF
    
    
    //=== OUTPUT LINES (masked during the longest warm-up) ===
    IF barindex  sB THEN
       aUp = 51
       aDn = 0
    ELSE
       aUp = 0
       aDn = 51
    ENDIF
    
    
    COLORBETWEEN(sA, sB, 0, 137, 123, aUp)
    COLORBETWEEN(sA, sB, 255, 82, 82, aDn)
    
    
    //=== PROJECTED CLOUD (bars that do not exist yet) ===
    IF islastbarupdate AND barindex > spanBLen + disp THEN
       FOR j = 1 TO dispPlot DO
          xa = barindex + j - 1
          xb = barindex + j
          ya = senkouA[dispPlot - j + 1]
          yb = senkouA[dispPlot - j]
          za = senkouB[dispPlot - j + 1]
          zb = senkouB[dispPlot - j]
          ym = (ya + yb) / 2
          zm = (za + zb) / 2
          IF ym > zm THEN
             rr = 0
             gg = 137
             bb = 123
          ELSE
             rr = 255
             gg = 82
             bb = 82
          ENDIF
          DRAWRECTANGLE(xa, min(ym, zm), xb, max(ym, zm)) COLOURED(rr, gg, bb, 0) FILLCOLOR(rr, gg, bb, 51)
       NEXT
    ENDIF
    
    
    //=== TENKAN / KIJUN CROSSES ===
    dotUp  = undefined
    dotDn  = undefined
    aDotUp = 0
    aDotDn = 0
    IF tenkan > kijun AND tenkan[1] <= kijun[1] THEN
       dotUp  = kijun
       aDotUp = 255
    ENDIF
    IF tenkan = kijun[1] THEN
       dotDn  = kijun
       aDotDn = 255
    ENDIF
    
    
    RETURN tenkan COLOURED(33, 87, 243, 255) STYLE(line, 2) AS "Tenkan-Sen", kijun COLOURED(255, 93, 0, 255) STYLE(line, 2) AS "Kijun-Sen", dotUp COLOURED(33, 87, 243, aDotUp) STYLE(point, 3) AS "Crossover", dotDn COLOURED(255, 93, 0, aDotDn) STYLE(point, 3) AS "Crossunder", sA COLOURED(0, 137, 123, 0) STYLE(line, 1) AS "Senkou Span A", sB COLOURED(255, 82, 82, 0) STYLE(line, 1) AS "Senkou Span B"
    


    #264946 quote
    stephxrstephxr
    Participant
    Junior

    bonjour Ivan et merci pour ta réactivité

    le code a une erreur sur les lignes 40 42 44 et 47

    merci encore pour ton aide!

    #264974 quote
    stephxrstephxr
    Participant
    Junior

    bonjour ivan

    Je crois également que la senkou span A n’est pas défini…

    Merci et bonne journée à toi!

    #264980 quote
    Iván GonzálezIván González
    Moderator
    Legend

    I don’t know why sometimes the copy/paste doesn’t work. I’ve attached also the .itf

    DEFPARAM DRAWONLASTBARONLY = TRUE
    //--------------------------------------------
    // PRC_SuperIchi (SuperIchi [LUX] by LuxAlgo)
    // version = 0
    // 04.09.2026
    // Ivan Gonzalez @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //--------------------------------------------
    // Ichimoku-style set of lines built on an ATR trailing-stop
    // engine instead of the classic Donchian midpoints.
    // Each line is the midpoint between the extreme reached by
    // price and the trailing stop of its own regime.
    //--------------------------------------------
    
    //=== INPUTS (declare as Variables in the editor) ===
    tenkanLen  = 9        // Tenkan ATR length
    tenkanMult = 2.0      // Tenkan ATR multiplier
    kijunLen   = 26       // Kijun ATR length
    kijunMult  = 4.0      // Kijun ATR multiplier
    spanBLen   = 52       // Senkou Span B ATR length
    spanBMult  = 6.0      // Senkou Span B ATR multiplier
    disp       = 26       // Displacement
    
    //=== ADAPTIVE MIDLINE ENGINE - TENKAN ===
    atrT = averagetruerange[tenkanLen](close) * tenkanMult
    upT  = (high + low) / 2 + atrT
    dnT  = (high + low) / 2 - atrT
    
    IF barindex <= tenkanLen THEN
       upperT = upT
       lowerT = dnT
       osT    = 0
       sptT   = close
       mxT    = close
       mnT    = close
    ELSE
       IF close[1] < upperT[1] THEN
          upperT = min(upT, upperT[1])
       ELSE
          upperT = upT
       ENDIF
       IF close[1] > lowerT[1] THEN
          lowerT = max(dnT, lowerT[1])
       ELSE
          lowerT = dnT
       ENDIF
       
       IF close > upperT THEN
          osT = 1
       ELSIF close < lowerT THEN
          osT = 0
       ELSE
          osT = osT[1]
       ENDIF
       
       IF osT = 1 THEN
          sptT = lowerT
       ELSE
          sptT = upperT
       ENDIF
       
       crT = 0
       IF close[1] < sptT[1] AND close > sptT THEN
          crT = 1
       ENDIF
       IF close[1] > sptT[1] AND close < sptT THEN
          crT = 1
       ENDIF
       
       IF crT = 1 OR osT = 1 THEN
          mxT = max(close, mxT[1])
       ELSE
          mxT = sptT
       ENDIF
       IF crT = 1 OR osT = 0 THEN
          mnT = min(close, mnT[1])
       ELSE
          mnT = sptT
       ENDIF
    ENDIF
    
    //=== ADAPTIVE MIDLINE ENGINE - KIJUN ===
    atrK = averagetruerange[kijunLen](close) * kijunMult
    upK  = (high + low) / 2 + atrK
    dnK  = (high + low) / 2 - atrK
    
    IF barindex <= kijunLen THEN
       upperK = upK
       lowerK = dnK
       osK    = 0
       sptK   = close
       mxK    = close
       mnK    = close
    ELSE
       IF close[1] < upperK[1] THEN
          upperK = min(upK, upperK[1])
       ELSE
          upperK = upK
       ENDIF
       IF close[1] > lowerK[1] THEN
          lowerK = max(dnK, lowerK[1])
       ELSE
          lowerK = dnK
       ENDIF
       
       IF close > upperK THEN
          osK = 1
       ELSIF close < lowerK THEN
          osK = 0
       ELSE
          osK = osK[1]
       ENDIF
       
       IF osK = 1 THEN
          sptK = lowerK
       ELSE
          sptK = upperK
       ENDIF
       
       crK = 0
       IF close[1] < sptK[1] AND close > sptK THEN
          crK = 1
       ENDIF
       IF close[1] > sptK[1] AND close < sptK THEN
          crK = 1
       ENDIF
       
       IF crK = 1 OR osK = 1 THEN
          mxK = max(close, mxK[1])
       ELSE
          mxK = sptK
       ENDIF
       IF crK = 1 OR osK = 0 THEN
          mnK = min(close, mnK[1])
       ELSE
          mnK = sptK
       ENDIF
    ENDIF
    
    //=== ADAPTIVE MIDLINE ENGINE - SENKOU SPAN B ===
    atrS = averagetruerange[spanBLen](close) * spanBMult
    upS  = (high + low) / 2 + atrS
    dnS  = (high + low) / 2 - atrS
    
    IF barindex <= spanBLen THEN
       upperS = upS
       lowerS = dnS
       osS    = 0
       sptS   = close
       mxS    = close
       mnS    = close
    ELSE
       IF close[1] < upperS[1] THEN
          upperS = min(upS, upperS[1])
       ELSE
          upperS = upS
       ENDIF
       IF close[1] > lowerS[1] THEN
          lowerS = max(dnS, lowerS[1])
       ELSE
          lowerS = dnS
       ENDIF
       
       IF close > upperS THEN
          osS = 1
       ELSIF close < lowerS THEN
          osS = 0
       ELSE
          osS = osS[1]
       ENDIF
       
       IF osS = 1 THEN
          sptS = lowerS
       ELSE
          sptS = upperS
       ENDIF
       
       crS = 0
       IF close[1] < sptS[1] AND close > sptS THEN
          crS = 1
       ENDIF
       IF close[1] > sptS[1] AND close < sptS THEN
          crS = 1
       ENDIF
       
       IF crS = 1 OR osS = 1 THEN
          mxS = max(close, mxS[1])
       ELSE
          mxS = sptS
       ENDIF
       IF crS = 1 OR osS = 0 THEN
          mnS = min(close, mnS[1])
       ELSE
          mnS = sptS
       ENDIF
    ENDIF
    
    //=== OUTPUT LINES (masked during the longest warm-up) ===
    IF barindex <= spanBLen THEN
       tenkan  = undefined
       kijun   = undefined
       senkouA = undefined
       senkouB = undefined
    ELSE
       tenkan  = (mxT + mnT) / 2
       kijun   = (mxK + mnK) / 2
       senkouB = (mxS + mnS) / 2
       senkouA = (kijun + tenkan) / 2
    ENDIF
    
    //=== CLOUD, SHIFTED FORWARD BY disp-1 BARS ===
    // A forward plot at +N is read on the chart as the value
    // computed N bars ago, so the past half of the cloud is a
    // plain series lag. The future half has no bars yet: drawn below.
    dispPlot = disp - 1
    sA = senkouA[dispPlot]
    sB = senkouB[dispPlot]
    
    IF sA > sB THEN
       aUp = 51
       aDn = 0
    ELSE
       aUp = 0
       aDn = 51
    ENDIF
    
    COLORBETWEEN(sA, sB, 0, 137, 123, aUp)
    COLORBETWEEN(sA, sB, 255, 82, 82, aDn)
    
    //=== PROJECTED CLOUD (bars that do not exist yet) ===
    IF islastbarupdate AND barindex > spanBLen + disp THEN
       FOR j = 1 TO dispPlot DO
          xa = barindex + j - 1
          xb = barindex + j
          ya = senkouA[dispPlot - j + 1]
          yb = senkouA[dispPlot - j]
          za = senkouB[dispPlot - j + 1]
          zb = senkouB[dispPlot - j]
          ym = (ya + yb) / 2
          zm = (za + zb) / 2
          IF ym > zm THEN
             rr = 0
             gg = 137
             bb = 123
          ELSE
             rr = 255
             gg = 82
             bb = 82
          ENDIF
          DRAWRECTANGLE(xa, min(ym, zm), xb, max(ym, zm)) COLOURED(rr, gg, bb, 0) FILLCOLOR(rr, gg, bb, 51)
       NEXT
    ENDIF
    
    //=== TENKAN / KIJUN CROSSES ===
    dotUp  = undefined
    dotDn  = undefined
    aDotUp = 0
    aDotDn = 0
    IF tenkan > kijun AND tenkan[1] <= kijun[1] THEN
       dotUp  = kijun
       aDotUp = 255
    ENDIF
    IF tenkan < kijun AND tenkan[1] >= kijun[1] THEN
       dotDn  = kijun
       aDotDn = 255
    ENDIF
    
    RETURN tenkan COLOURED(33, 87, 243, 255) STYLE(line, 2) AS "Tenkan-Sen", kijun COLOURED(255, 93, 0, 255) STYLE(line, 2) AS "Kijun-Sen", dotUp COLOURED(33, 87, 243, aDotUp) STYLE(point, 3) AS "Crossover", dotDn COLOURED(255, 93, 0, aDotDn) STYLE(point, 3) AS "Crossunder", sA COLOURED(0, 137, 123, 0) STYLE(line, 1) AS "Senkou Span A", sB COLOURED(255, 82, 82, 0) STYLE(line, 1) AS "Senkou Span B"
    
    PRC_Super-Ichimoku.itf
    #265015 quote
    stephxrstephxr
    Participant
    Junior

    bonjour ivan et merci beaucoup il marche très bien

    Je souhaite augmenter la taille des points d’intersection entre la tenkan et la kijun et je n’arrive pas a monter au dessus de 5 en taille

    y a-t-il une astuce pour augmenter plus ces points?

    merci à toi!

    #265025 quote
    NicolasNicolas
    Keymaster
    Legend

    5 est la taille maximale des points avec l’instruction DRAWPOINT ou le style POINT.

    L’astuce consiste à utiliser un DRAWTEXT avec un ● , la taille est de 30 à modifier à convenance.

    Voici le code modifié: (lignes 261 et 266)

    //@ProRealCodeScript@version=0.2.0@
    //DEFPARAM DRAWONLASTBARONLY = TRUE
    //--------------------------------------------
    // PRC_SuperIchi (SuperIchi [LUX] by LuxAlgo)
    // version = 0
    // 04.09.2026
    // Ivan Gonzalez @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //--------------------------------------------
    // Ichimoku-style set of lines built on an ATR trailing-stop
    // engine instead of the classic Donchian midpoints.
    // Each line is the midpoint between the extreme reached by
    // price and the trailing stop of its own regime.
    //--------------------------------------------
    
    
    //=== INPUTS (declare as Variables in the editor) ===
    tenkanLen  = 9        // Tenkan ATR length
    tenkanMult = 2.0      // Tenkan ATR multiplier
    kijunLen   = 26       // Kijun ATR length
    kijunMult  = 4.0      // Kijun ATR multiplier
    spanBLen   = 52       // Senkou Span B ATR length
    spanBMult  = 6.0      // Senkou Span B ATR multiplier
    disp       = 26       // Displacement
    
    
    //=== ADAPTIVE MIDLINE ENGINE - TENKAN ===
    atrT = averagetruerange[tenkanLen](close) * tenkanMult
    upT  = (high + low) / 2 + atrT
    dnT  = (high + low) / 2 - atrT
    
    
    IF barindex <= tenkanLen THEN
        upperT = upT
        lowerT = dnT
        osT    = 0
        sptT   = close
        mxT    = close
        mnT    = close
    ELSE
        IF close[1] < upperT[1] THEN
            upperT = min(upT, upperT[1])
        ELSE
            upperT = upT
        ENDIF
        IF close[1] > lowerT[1] THEN
            lowerT = max(dnT, lowerT[1])
        ELSE
            lowerT = dnT
        ENDIF
    
    
        IF close > upperT THEN
            osT = 1
        ELSIF close < lowerT THEN
            osT = 0
        ELSE
            osT = osT[1]
        ENDIF
    
    
        IF osT = 1 THEN
            sptT = lowerT
        ELSE
            sptT = upperT
        ENDIF
    
    
        crT = 0
        IF close[1] < sptT[1] AND close > sptT THEN
            crT = 1
        ENDIF
        IF close[1] > sptT[1] AND close < sptT THEN
            crT = 1
        ENDIF
    
    
        IF crT = 1 OR osT = 1 THEN
            mxT = max(close, mxT[1])
        ELSE
            mxT = sptT
        ENDIF
        IF crT = 1 OR osT = 0 THEN
            mnT = min(close, mnT[1])
        ELSE
            mnT = sptT
        ENDIF
    ENDIF
    
    
    //=== ADAPTIVE MIDLINE ENGINE - KIJUN ===
    atrK = averagetruerange[kijunLen](close) * kijunMult
    upK  = (high + low) / 2 + atrK
    dnK  = (high + low) / 2 - atrK
    
    
    IF barindex <= kijunLen THEN
        upperK = upK
        lowerK = dnK
        osK    = 0
        sptK   = close
        mxK    = close
        mnK    = close
    ELSE
        IF close[1] < upperK[1] THEN
            upperK = min(upK, upperK[1])
        ELSE
            upperK = upK
        ENDIF
        IF close[1] > lowerK[1] THEN
            lowerK = max(dnK, lowerK[1])
        ELSE
            lowerK = dnK
        ENDIF
    
    
        IF close > upperK THEN
            osK = 1
        ELSIF close < lowerK THEN
            osK = 0
        ELSE
            osK = osK[1]
        ENDIF
    
    
        IF osK = 1 THEN
            sptK = lowerK
        ELSE
            sptK = upperK
        ENDIF
    
    
        crK = 0
        IF close[1] < sptK[1] AND close > sptK THEN
            crK = 1
        ENDIF
        IF close[1] > sptK[1] AND close < sptK THEN
            crK = 1
        ENDIF
    
    
        IF crK = 1 OR osK = 1 THEN
            mxK = max(close, mxK[1])
        ELSE
            mxK = sptK
        ENDIF
        IF crK = 1 OR osK = 0 THEN
            mnK = min(close, mnK[1])
        ELSE
            mnK = sptK
        ENDIF
    ENDIF
    
    
    //=== ADAPTIVE MIDLINE ENGINE - SENKOU SPAN B ===
    atrS = averagetruerange[spanBLen](close) * spanBMult
    upS  = (high + low) / 2 + atrS
    dnS  = (high + low) / 2 - atrS
    
    
    IF barindex <= spanBLen THEN
        upperS = upS
        lowerS = dnS
        osS    = 0
        sptS   = close
        mxS    = close
        mnS    = close
    ELSE
        IF close[1] < upperS[1] THEN
            upperS = min(upS, upperS[1])
        ELSE
            upperS = upS
        ENDIF
        IF close[1] > lowerS[1] THEN
            lowerS = max(dnS, lowerS[1])
        ELSE
            lowerS = dnS
        ENDIF
    
    
        IF close > upperS THEN
            osS = 1
        ELSIF close < lowerS THEN
            osS = 0
        ELSE
            osS = osS[1]
        ENDIF
    
    
        IF osS = 1 THEN
            sptS = lowerS
        ELSE
            sptS = upperS
        ENDIF
    
    
        crS = 0
        IF close[1] < sptS[1] AND close > sptS THEN
            crS = 1
        ENDIF
        IF close[1] > sptS[1] AND close < sptS THEN
            crS = 1
        ENDIF
    
    
        IF crS = 1 OR osS = 1 THEN
            mxS = max(close, mxS[1])
        ELSE
            mxS = sptS
        ENDIF
        IF crS = 1 OR osS = 0 THEN
            mnS = min(close, mnS[1])
        ELSE
            mnS = sptS
        ENDIF
    ENDIF
    
    
    //=== OUTPUT LINES (masked during the longest warm-up) ===
    IF barindex <= spanBLen THEN
        tenkan  = undefined
        kijun   = undefined
        senkouA = undefined
        senkouB = undefined
    ELSE
        tenkan  = (mxT + mnT) / 2
        kijun   = (mxK + mnK) / 2
        senkouB = (mxS + mnS) / 2
        senkouA = (kijun + tenkan) / 2
    ENDIF
    
    
    //=== CLOUD, SHIFTED FORWARD BY disp-1 BARS ===
    // A forward plot at +N is read on the chart as the value
    // computed N bars ago, so the past half of the cloud is a
    // plain series lag. The future half has no bars yet: drawn below.
    dispPlot = disp - 1
    sA = senkouA[dispPlot]
    sB = senkouB[dispPlot]
    
    
    IF sA > sB THEN
        aUp = 51
        aDn = 0
    ELSE
        aUp = 0
        aDn = 51
    ENDIF
    
    
    COLORBETWEEN(sA, sB, 0, 137, 123, aUp)
    COLORBETWEEN(sA, sB, 255, 82, 82, aDn)
    
    
    //=== PROJECTED CLOUD (bars that do not exist yet) ===
    IF islastbarupdate AND barindex > spanBLen + disp THEN
        FOR j = 1 TO dispPlot DO
            xa = barindex + j - 1
            xb = barindex + j
            ya = senkouA[dispPlot - j + 1]
            yb = senkouA[dispPlot - j]
            za = senkouB[dispPlot - j + 1]
            zb = senkouB[dispPlot - j]
            ym = (ya + yb) / 2
            zm = (za + zb) / 2
            IF ym > zm THEN
                rr = 0
                gg = 137
                bb = 123
            ELSE
                rr = 255
                gg = 82
                bb = 82
            ENDIF
            DRAWRECTANGLE(xa, min(ym, zm), xb, max(ym, zm)) COLOURED(rr, gg, bb, 0) FILLCOLOR(rr, gg, bb, 51)
        NEXT
    ENDIF
    
    
    //=== TENKAN / KIJUN CROSSES ===
    dotUp  = undefined
    dotDn  = undefined
    aDotUp = 0
    aDotDn = 0
    IF tenkan > kijun AND tenkan[1] <= kijun[1] THEN
        dotUp  = kijun
        drawtext("●", barindex,dotUp,dialog,bold,30) coloured(33, 87, 243)
        aDotUp = 255
    ENDIF
    IF tenkan < kijun AND tenkan[1] >= kijun[1] THEN
        dotDn  = kijun  
    drawtext("●", barindex,dotDn,dialog,bold,30) coloured(255, 93, 0)
        aDotDn = 255
    ENDIF
    
    
    RETURN tenkan COLOURED(33, 87, 243, 255) STYLE(line, 2) AS "Tenkan-Sen", kijun COLOURED(255, 93, 0, 255) STYLE(line, 2) AS "Kijun-Sen", dotUp COLOURED(33, 87, 243, aDotUp) STYLE(point, 3) AS "Crossover", dotDn COLOURED(255, 93, 0, aDotDn) STYLE(point, 3) AS "Crossunder", sA COLOURED(0, 137, 123, 0) STYLE(line, 1) AS "Senkou Span A", sB COLOURED(255, 82, 82, 0) STYLE(line, 1) AS "Senkou Span B"
    
    
    
    Iván González thanked this post
    eWz5Sp8jXh.png eWz5Sp8jXh.png
    #265033 quote
    stephxrstephxr
    Participant
    Junior

    encore un merci ivan je suis très très content du résultat

    J’ai testé les alertes conditionnelles, elles fonctionnent toutes sauf les croisement avec les senkou span A et B

    D’ou cela peut venir?

    #265037 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Salut ! Content que ça te serve.

    Les Span A et Span B, tu peux bien les sélectionner dans l’alerte : elles sont dans le RETURN (dernière ligne du code), même si sur le graphique elles ont une opacité de 0 et qu’on ne les voit pas. Quand tu ouvres la fenêtre d’alertes, elles apparaissent quand même dans la liste des variables.

    Ce qui n’est pas possible, c’est d’alerter sur le nuage tel que tu le vois. Le nuage est avancé de 25 périodes : la partie qui se trouve à droite du prix, ce sont des rectangles dessinés, pas une série, et une alerte ne peut pas lire un dessin. Quant aux variables Span A et Span B, elles portent la valeur du nuage déjà posée sur les barres, 25 périodes en arrière. C’est pour ça que le croisement ne se déclenche pas là où tu le regardes.

    Si ce que tu veux, c’est l’alerte contre le nuage avancé, ça se règle en ajoutant senkouA et senkouB sans décalage comme deux variables de plus dans le RETURN.

    Je ne sais pas si tu faisais référence à ça.


    #265043 quote
    stephxrstephxr
    Participant
    Junior

    Salut ivan

    J’ai bien compris et après réflexion il faudrai que je puisse créer une alerte:

    • Au croisement ssa ssb donc au changement de couleur du nuage
    • Quand la kijun devient haussière ou baissière mais je ne sais pas si c’est possible

    Merci pour tout ce travail!

    stephane

    #265045 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Bien sûr. Voici le nuage de points sans décalage. J’ai ajouté deux nouvelles variables, Span A (no shift) et Span B (no shift), à ​​la ligne de return.

    //DEFPARAM DRAWONLASTBARONLY = TRUE
    //--------------------------------------------
    // PRC_SuperIchi (SuperIchi [LUX] by LuxAlgo)
    // version = 0
    // 04.09.2026
    // Ivan Gonzalez @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //--------------------------------------------
    // Ichimoku-style set of lines built on an ATR trailing-stop
    // engine instead of the classic Donchian midpoints.
    // Each line is the midpoint between the extreme reached by
    // price and the trailing stop of its own regime.
    //--------------------------------------------
    
    
    
    
    //=== INPUTS (declare as Variables in the editor) ===
    tenkanLen  = 9        // Tenkan ATR length
    tenkanMult = 2.0      // Tenkan ATR multiplier
    kijunLen   = 26       // Kijun ATR length
    kijunMult  = 4.0      // Kijun ATR multiplier
    spanBLen   = 52       // Senkou Span B ATR length
    spanBMult  = 6.0      // Senkou Span B ATR multiplier
    disp       = 26       // Displacement
    
    
    
    
    //=== ADAPTIVE MIDLINE ENGINE - TENKAN ===
    atrT = averagetruerange[tenkanLen](close) * tenkanMult
    upT  = (high + low) / 2 + atrT
    dnT  = (high + low) / 2 - atrT
    
    
    
    
    IF barindex <= tenkanLen THEN
        upperT = upT
        lowerT = dnT
        osT    = 0
        sptT   = close
        mxT    = close
        mnT    = close
    ELSE
        IF close[1] < upperT[1] THEN
            upperT = min(upT, upperT[1])
        ELSE
            upperT = upT
        ENDIF
        IF close[1] > lowerT[1] THEN
            lowerT = max(dnT, lowerT[1])
        ELSE
            lowerT = dnT
        ENDIF
    
    
    
    
        IF close > upperT THEN
            osT = 1
        ELSIF close < lowerT THEN
            osT = 0
        ELSE
            osT = osT[1]
        ENDIF
    
    
    
    
        IF osT = 1 THEN
            sptT = lowerT
        ELSE
            sptT = upperT
        ENDIF
    
    
    
    
        crT = 0
        IF close[1] < sptT[1] AND close > sptT THEN
            crT = 1
        ENDIF
        IF close[1] > sptT[1] AND close < sptT THEN
            crT = 1
        ENDIF
    
    
    
    
        IF crT = 1 OR osT = 1 THEN
            mxT = max(close, mxT[1])
        ELSE
            mxT = sptT
        ENDIF
        IF crT = 1 OR osT = 0 THEN
            mnT = min(close, mnT[1])
        ELSE
            mnT = sptT
        ENDIF
    ENDIF
    
    
    
    
    //=== ADAPTIVE MIDLINE ENGINE - KIJUN ===
    atrK = averagetruerange[kijunLen](close) * kijunMult
    upK  = (high + low) / 2 + atrK
    dnK  = (high + low) / 2 - atrK
    
    
    
    
    IF barindex <= kijunLen THEN
        upperK = upK
        lowerK = dnK
        osK    = 0
        sptK   = close
        mxK    = close
        mnK    = close
    ELSE
        IF close[1] < upperK[1] THEN
            upperK = min(upK, upperK[1])
        ELSE
            upperK = upK
        ENDIF
        IF close[1] > lowerK[1] THEN
            lowerK = max(dnK, lowerK[1])
        ELSE
            lowerK = dnK
        ENDIF
    
    
    
    
        IF close > upperK THEN
            osK = 1
        ELSIF close < lowerK THEN
            osK = 0
        ELSE
            osK = osK[1]
        ENDIF
    
    
    
    
        IF osK = 1 THEN
            sptK = lowerK
        ELSE
            sptK = upperK
        ENDIF
    
    
    
    
        crK = 0
        IF close[1] < sptK[1] AND close > sptK THEN
            crK = 1
        ENDIF
        IF close[1] > sptK[1] AND close < sptK THEN
            crK = 1
        ENDIF
    
    
    
    
        IF crK = 1 OR osK = 1 THEN
            mxK = max(close, mxK[1])
        ELSE
            mxK = sptK
        ENDIF
        IF crK = 1 OR osK = 0 THEN
            mnK = min(close, mnK[1])
        ELSE
            mnK = sptK
        ENDIF
    ENDIF
    
    
    
    
    //=== ADAPTIVE MIDLINE ENGINE - SENKOU SPAN B ===
    atrS = averagetruerange[spanBLen](close) * spanBMult
    upS  = (high + low) / 2 + atrS
    dnS  = (high + low) / 2 - atrS
    
    
    
    
    IF barindex <= spanBLen THEN
        upperS = upS
        lowerS = dnS
        osS    = 0
        sptS   = close
        mxS    = close
        mnS    = close
    ELSE
        IF close[1] < upperS[1] THEN
            upperS = min(upS, upperS[1])
        ELSE
            upperS = upS
        ENDIF
        IF close[1] > lowerS[1] THEN
            lowerS = max(dnS, lowerS[1])
        ELSE
            lowerS = dnS
        ENDIF
    
    
    
    
        IF close > upperS THEN
            osS = 1
        ELSIF close < lowerS THEN
            osS = 0
        ELSE
            osS = osS[1]
        ENDIF
    
    
    
    
        IF osS = 1 THEN
            sptS = lowerS
        ELSE
            sptS = upperS
        ENDIF
    
    
    
    
        crS = 0
        IF close[1] < sptS[1] AND close > sptS THEN
            crS = 1
        ENDIF
        IF close[1] > sptS[1] AND close < sptS THEN
            crS = 1
        ENDIF
    
    
    
    
        IF crS = 1 OR osS = 1 THEN
            mxS = max(close, mxS[1])
        ELSE
            mxS = sptS
        ENDIF
        IF crS = 1 OR osS = 0 THEN
            mnS = min(close, mnS[1])
        ELSE
            mnS = sptS
        ENDIF
    ENDIF
    
    
    
    
    //=== OUTPUT LINES (masked during the longest warm-up) ===
    IF barindex <= spanBLen THEN
        tenkan  = undefined
        kijun   = undefined
        senkouA = undefined
        senkouB = undefined
    ELSE
        tenkan  = (mxT + mnT) / 2
        kijun   = (mxK + mnK) / 2
        senkouB = (mxS + mnS) / 2
        senkouA = (kijun + tenkan) / 2
    ENDIF
    
    
    
    
    //=== CLOUD, SHIFTED FORWARD BY disp-1 BARS ===
    // senkouA / senkouB hold the tip of the cloud, the half drawn to the
    // right of the last bar. sA / sB hold the same values read dispPlot
    // bars later, which is the half sitting on the bars themselves.
    // Both pairs are returned: the shifted one carries the fill, the
    // unshifted one is there to be picked in the alert tool.
    // A forward plot at +N is read on the chart as the value
    // computed N bars ago, so the past half of the cloud is a
    // plain series lag. The future half has no bars yet: drawn below.
    dispPlot = disp - 1
    sA = senkouA[dispPlot]
    sB = senkouB[dispPlot]
    
    
    
    
    IF sA > sB THEN
        aUp = 51
        aDn = 0
    ELSE
        aUp = 0
        aDn = 51
    ENDIF
    
    
    
    
    COLORBETWEEN(sA, sB, 0, 137, 123, aUp)
    COLORBETWEEN(sA, sB, 255, 82, 82, aDn)
    
    
    
    
    //=== PROJECTED CLOUD (bars that do not exist yet) ===
    IF islastbarupdate AND barindex > spanBLen + disp THEN
        FOR j = 1 TO dispPlot DO
            xa = barindex + j - 1
            xb = barindex + j
            ya = senkouA[dispPlot - j + 1]
            yb = senkouA[dispPlot - j]
            za = senkouB[dispPlot - j + 1]
            zb = senkouB[dispPlot - j]
            ym = (ya + yb) / 2
            zm = (za + zb) / 2
            IF ym > zm THEN
                rr = 0
                gg = 137
                bb = 123
            ELSE
                rr = 255
                gg = 82
                bb = 82
            ENDIF
            DRAWRECTANGLE(xa, min(ym, zm), xb, max(ym, zm)) COLOURED(rr, gg, bb, 0) FILLCOLOR(rr, gg, bb, 51)
        NEXT
    ENDIF
    
    
    
    
    //=== TENKAN / KIJUN CROSSES ===
    dotUp  = undefined
    dotDn  = undefined
    aDotUp = 0
    aDotDn = 0
    IF tenkan > kijun AND tenkan[1] <= kijun[1] THEN
        dotUp  = kijun
        drawtext("●", barindex,dotUp,dialog,bold,30) coloured(33, 87, 243)
        aDotUp = 255
    ENDIF
    IF tenkan < kijun AND tenkan[1] >= kijun[1] THEN
        dotDn  = kijun  
    drawtext("●", barindex,dotDn,dialog,bold,30) coloured(255, 93, 0)
        aDotDn = 255
    ENDIF
    
    
    
    
    RETURN tenkan COLOURED(33, 87, 243, 255) STYLE(line, 2) AS "Tenkan-Sen", kijun COLOURED(255, 93, 0, 255) STYLE(line, 2) AS "Kijun-Sen", dotUp COLOURED(33, 87, 243, aDotUp) STYLE(point, 3) AS "Crossover", dotDn COLOURED(255, 93, 0, aDotDn) STYLE(point, 3) AS "Crossunder", sA COLOURED(0, 137, 123, 0) STYLE(line, 1) AS "Senkou Span A", sB COLOURED(255, 82, 82, 0) STYLE(line, 1) AS "Senkou Span B", senkouA COLOURED(0, 137, 123, 0) STYLE(line, 1) AS "Span A (no shift)", senkouB COLOURED(255, 82, 82, 0) STYLE(line, 1) AS "Span B (no shift)"
    
    
    
    #265059 quote
    stephxrstephxr
    Participant
    Junior

    Salut!

    C’est exactement ça et ça fonctionne très bien!

    Pour finir est il possible de de créer une alerte quand la kijun est haussière ou baissière?

    Encore merci et bon week end Ivan

Viewing 13 posts - 1 through 13 (of 13 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

TradingView to ProRealTime Translation Center

New Reply
Author
author-avatar
stephxr @stephxr Participant
Summary

This topic contains 12 replies,
has 3 voices, and was last updated by stephxrstephxr
1 month ago.

Topic Details
Forum: TradingView to ProRealTime Translation Center Forum
Started: 09/04/2026
Status: Active
Attachments: 2 files
ProRealCode ProRealCode
Loading...