Traduzione Codice “Market Structure Algo” da TV

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #252684 quote
    roccafragiusroccafragius
    Participant
    Average
    Buongiorno, ho notato su TV questo indicatore che trovo fantastico, si potrebbe avere la traduzione in PRT?
    Grazie in anticipo!
    Franco
    // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
    // © OmegaTools
    //@version=5
    indicator(“Market Structure Algo”, “MS Algo”, true)
    left = input.int(5, “Internal MS”, minval = 2)
    left1 = input.int(30, “External MS”, minval = 7)
    dist = input.float(2.00, “Zone Distance”, minval = 1, step = 0.1, inline = “zone”)
    zone = input.bool(true, “”, inline = “zone”)
    right = left
    right1 = left1
    upcolor = input.color(#2962ff, “Positive color”, group = “Appearence”)
    downcolor = input.color(#e91e63, “Negative color”, group = “Appearence”)
    // Internal
    pvh = ta.pivothigh(left, right)
    pvl = ta.pivotlow(left, right)
    var float ph = na
    var float pl = na
    ph := pvh != 0 ? pvh : ph[1]
    pl := pvl != 0 ? pvl : pl[1]
    currenth = ta.valuewhen(pvh != 0, high[right], 0)
    lasth = ta.valuewhen(pvh != 0, high[right], 1)
    currentl = ta.valuewhen(pvl != 0, low[right], 0)
    lastl = ta.valuewhen(pvl != 0, low[right], 1)
    var int ms = na
    ms := if currenth > lasth and currentl > lastl and close > ph
        ms := 2
    else if close > ph
        ms := 1
    else if currenth < lasth and currentl < lastl and close < pl
        ms := -2
    else if close < pl
        ms := -1
    else
        ms[1]
    var int last = na
    longsig = close > ph and ms[1] < 0
    shortsig = close < pl and ms[1] > 0
    longsig1 = close > ph and ms[1] > 0
    shortsig1 = close < pl and ms[1] < 0
    longsig2 = longsig1 and longsig1[1] == false and longsig[1] == false
    shortsig2 = shortsig1 and shortsig1[1] == false and shortsig[1] == false
    longexit = high > ph and close < ph
    shortexit = low < pl and close > pl
    // External
    pvh1 = ta.pivothigh(left1, right1)
    pvl1 = ta.pivotlow(left1, right1)
    var float ph1 = na
    var float pl1 = na
    ph1 := pvh1 != 0 ? pvh1 : ph1[1]
    pl1 := pvl1 != 0 ? pvl1 : pl1[1]
    // Zone
    ma = ta.sma(close, left1)
    atr = ta.atr(left1)
    ma2 = ms > 0 and ms[1] > 0 ? ma – atr * dist : ms < 0 and ms[1] < 0 ? ma + atr*dist : na
    ma3 = ms > 0 and ms[1] > 0 ? ma2 + atr : ms < 0 and ms[1] < 0 ? ma2 – atr : na
    // Plot
    if pvh != 0
        l1 = line.new(x1 = bar_index – right, y1 = ph, x2 = bar_index + math.round(right/2), y2 = ph, color = color.new(upcolor, 50), style = line.style_dashed)
    if pvl != 0
        l2 = line.new(x1 = bar_index – right, y1 = pl, x2 = bar_index + math.round(right/2), y2 = pl, color = color.new(downcolor, 50), style = line.style_dashed)
    if pvh1 != 0
        l3 = line.new(x1 = bar_index – right1, y1 = ph1, x2 = bar_index + math.round(right1/2), y2 = ph1, color = upcolor, width = 2)
    if pvl1 != 0
        l4 = line.new(x1 = bar_index – right1, y1 = pl1, x2 = bar_index + math.round(right1/2), y2 = pl1, color = downcolor, width = 2)
    barcolor(ms >= 2 ? upcolor : ms == 1 ? color.new(upcolor, 50) : ms <= -2 ? downcolor : ms == -1 ? color.new(downcolor, 50) : na)
    plotshape(longsig, “Long Signal”, shape.labelup, location.belowbar, upcolor, 0, “↑”, textcolor = color.new(color.white, 50))
    plotshape(longsig2, “Buy Signal”, shape.triangleup, location.belowbar, upcolor)
    plotshape(shortsig, “Short Signal”, shape.labeldown, location.abovebar, downcolor, 0, “↓”, textcolor = color.new(color.white, 50))
    plotshape(shortsig2, “Sell Signal”, shape.triangledown, location.abovebar, downcolor)
    plotshape(longexit, “Long Exit”, shape.triangledown, location.abovebar, color.gray)
    plotshape(shortexit, “Short Exit”, shape.triangleup, location.belowbar, color.gray)
    p1 = plot(zone ? ma2 : na, “External Zone”, close > ma2 ? upcolor : close < ma2 ? downcolor : na, 1, plot.style_linebr)
    p2 = plot(zone ? ma3 : na, “Internal Zone”, close > ma2 ? color.new(upcolor, 80) : close < ma2 ? color.new(downcolor, 80) : na, 1, plot.style_linebr)
    fill(p1, p2, color = close > ma2 ? color.new(upcolor, 80) : color.new(downcolor, 80), title = “Zone fill”)
    alertcondition(longsig, “Long CHoCH”)
    alertcondition(shortsig, “Short CHoCH”)
    alertcondition(longsig2, “Long BOS”)
    alertcondition(shortsig2, “Short BOS”)
    #252698 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Ecco:

    //---------------------------------------------
    // PRC_Market Structure Algo by OmegaTools
    //version = 0
    //17.10.2025
    //Iván González @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    //---------------------------------------------
    // --- User Inputs ---
    //---------------------------------------------
    // Internal Market Structure period
    prdleftInt = 5
    // External Market Structure period
    prdleftExt = 30
    // Zone Distance multiplier for ATR
    dist = 2.0
    // Show volatility zones (1 = yes, 0 = no)
    showZone = 1
    // --- Appearance ---
    // Positive color (R, G, B)
    upcolorR = 41
    upcolorG = 98
    upcolorB = 255
    // Negative color (R, G, B)
    downcolorR = 233
    downcolorG = 30
    downcolorB = 99
    // Exit signal color (Gray)
    graycolorR = 128
    graycolorG = 128
    graycolorB = 128
    alpha = 50
    //---------------------------------------------
    // --- Internal Market Structure Calculation
    //---------------------------------------------
    pvh = 0
    pvl = 0
    // Pivot High Detection: checks if the high 'left' bars ago is the highest in a window of 'left*2+1' bars
    IF high[prdleftInt] = highest[prdleftInt*2+1](high) THEN
       pvh = high[prdleftInt]
       pvhx = barindex[prdleftInt]
       drawpoint(pvhx,pvh,1)coloured("blue",150)
    ENDIF
    // Pivot Low Detection: checks if the low 'left' bars ago is the lowest in a window of 'left*2+1' bars
    IF low[prdleftInt] = lowest[prdleftInt*2+1](low) THEN
       pvl = low[prdleftInt]
       pvlx = barindex[prdleftInt]
       drawpoint(pvlx,pvl,1)coloured("blue",150)
    ENDIF
    // Store the last valid pivot levels
    IF pvh > 0 THEN
       ph = pvh
    ENDIF
    IF pvl > 0 THEN
       pl = pvl
    ENDIF
    // Store current and last pivot high/low values (valuewhen logic)
    IF pvh <> 0 THEN
       lasth = currenth
       lasthx = currenthx
       currenth = high[prdleftInt]
       currenthx = barindex[prdleftInt]
       drawsegment(lasthx,lasth,currenthx,lasth)COLOURED(upcolorR, upcolorG, upcolorB)style(dottedline)
    ENDIF
    
    IF pvl <> 0 THEN
       lastl = currentl
       lastlx = currentlx
       currentl = low[prdleftInt]
       currentlx = barindex[prdleftInt]
       drawsegment(lastlx,lastl,currentlx,lastl)COLOURED(downcolorR, downcolorG, downcolorB)style(dottedline)
    ENDIF
    //---------------------------------------------
    // Determine Market Structure (ms) state
    //---------------------------------------------
    IF currenth > lasth AND currentl > lastl AND close > ph THEN
       ms = 2 // Bullish Strong
    ELSIF close > ph THEN
       ms = 1 // Bullish
    ELSIF currenth < lasth AND currentl < lastl AND close < pl THEN
       ms = -2 // Bearish Strong
    ELSIF close < pl THEN
       ms = -1 // Bearish
    ENDIF
    //---------------------------------------------
    // --- Signal Conditions ---
    //---------------------------------------------
    // Long CHoCH Signal (Change of Character)
    longsig = close > ph AND ms[1] < 0
    // Short CHoCH Signal
    shortsig = close < pl AND ms[1] > 0
    // Long BOS Signal (Break of Structure)
    longsig1 = close > ph AND ms[1] > 0
    shortsig1 = close < pl AND ms[1] < 0
    longsig2 = longsig1 AND NOT longsig1[1] AND NOT longsig[1]
    shortsig2 = shortsig1 AND NOT shortsig1[1] AND NOT shortsig[1]
    // Exit Signals
    longexit = high > ph AND close < ph
    shortexit = low < pl AND close > pl
    //---------------------------------------------
    // --- External Market Structure Calculation
    //---------------------------------------------
    once pvhExt = high
    once pvlExt = low
    IF high[prdleftExt] = highest[prdleftExt*2+1](high) THEN
       pvhExt = high[prdleftExt]
       pvhxExt = barindex[prdleftExt]
       drawpoint(pvhxExt,pvhExt,5)coloured("orange",50)
       drawsegment(pvhxExt,pvhExt,barindex,pvhExt)COLOURED(upcolorR, upcolorG, upcolorB)style(line,2)
    ENDIF
    IF low[prdleftExt] = lowest[prdleftExt*2+1](low) THEN
       pvlExt = low[prdleftExt]
       pvlxExt = barindex[prdleftExt]
       drawpoint(pvlxExt,pvlExt,5)coloured("orange",50)
       drawsegment(pvlxExt,pvlExt,barindex,pvlExt)COLOURED(downcolorR, downcolorG, downcolorB)style(line,2)
    ENDIF
    
    IF pvhExt > 0 THEN
       phExt = pvhExt
    ENDIF
    IF pvlExt > 0 THEN
       plExt = pvlExt
    ENDIF
    //---------------------------------------------
    // --- Zone Calculation ---
    //---------------------------------------------
    ma = average[prdleftExt](close)
    atr = averagetruerange[prdleftExt]
    
    ma2 = undefined
    ma3 = undefined
    
    IF ms > 0 AND ms[1] > 0 THEN
       ma2 = ma - atr * dist
       ma3 = ma2 + atr
       r=upcolorR
       g=upcolorG
       b=upcolorB
    elsif ms < 0 AND ms[1] < 0 THEN
       ma2 = ma + atr * dist
       ma3 = ma2 - atr
       r=downcolorR
       g=downcolorG
       b=downcolorB
    else
       ma2 = undefined
       ma3 = undefined
    ENDIF
    //---------------------------------------------
    // --- Visual Outputs ---
    //---------------------------------------------
    // 1. Plot Signals on Price Chart
    atrOffset = atr * 0.5
    IF longsig THEN
       DRAWARROWUP(barindex, low - atrOffset) COLOURED(upcolorR, upcolorG, upcolorB)
    ENDIF
    IF longsig2 THEN
       drawtext("▲",barindex, low-0.15*atr)COLOURED(upcolorR, upcolorG, upcolorB)
    ENDIF
    IF shortsig THEN
       DRAWARROWDOWN(barindex, high + atrOffset) COLOURED(downcolorR, downcolorG, downcolorB)
    ENDIF
    IF shortsig2 THEN
       drawtext("▼",barindex, high+0.15*atr) COLOURED(downcolorR, downcolorG, downcolorB)
    ENDIF
    IF longexit THEN
       drawtext("▼",barindex, high+0.15*atr)COLOURED(graycolorR, graycolorG, graycolorB)
    ENDIF
    IF shortexit THEN
       drawtext("▲",barindex, low-0.15*atr)COLOURED(graycolorR, graycolorG, graycolorB)
    ENDIF
    // 2. Conditional Zone Plots
    zoneMa2 = undefined
    zoneMa3 = undefined
    IF showZone = 1 THEN
       zoneMa2 = ma2
       zoneMa3 = ma3
    ENDIF
    
    if islastbarupdate then
       drawsegment(currentlx,currentl,barindex+5,currentl)COLOURED(downcolorR, downcolorG, downcolorB)style(dottedline)
       drawsegment(currenthx,currenth,barindex+5,currenth)COLOURED(upcolorR, upcolorG, upcolorB)style(dottedline)
       drawsegment(pvlxExt,pvlExt,barindex+5,pvlExt)COLOURED(downcolorR, downcolorG, downcolorB)style(line,2)
       drawsegment(pvhxExt,pvhExt,barindex+5,pvhExt)COLOURED(upcolorR, upcolorG, upcolorB)style(line,2)
    endif
    //---------------------------------------------
    RETURN zoneMa2 AS "External Zone"coloured(r,g,b)style(line,2), zoneMa3 AS "Internal Zone"coloured(r,g,b,100)style(line,1)
    
    #252706 quote
    roccafragiusroccafragius
    Participant
    Average

    Grazieeee Ivan lo provo buon weekend!

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

Traduzione Codice “Market Structure Algo” da TV


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by roccafragiusroccafragius
11 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 10/16/2025
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...