Traduzione Codice “Market Structure Algo” da TV

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #252684 quote
    roccafragius
    Participant
    Junior
    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ález
    Moderator
    Master

    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
    roccafragius
    Participant
    Junior

    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.

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 roccafragius
3 months, 2 weeks ago.

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