Traduzione codice TW Expanded cloud

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #251240 quote
    Msport71Msport71
    Participant
    Senior

    Buongiorno,

    chiedo cortese traduzione di questo indicatore, che trovo interessante in quanto evoluzione del noto donchian channel.

    Grazie

    https://www.tradingview.com/script/eUTSLFqz-Expanded-Cloud-LuxAlgo/

    // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
    // © LuxAlgo

    //@version=6
    indicator(‘Expanded Cloud [LuxAlgo]’, ‘LuxAlgo – Expanded Cloud’, overlay = true)
    //———————————————————————————————————————}
    //CONSTANTS & STRINGS & INPUTS
    //———————————————————————————————————————{
    GREEN = #089981
    RED = #F23645

    TOP_RIGHT = ‘Top Right’
    BOTTOM_RIGHT = ‘Bottom Right’
    BOTTOM_LEFT = ‘Bottom Left’

    TINY = ‘Tiny’
    SMALL = ‘Small’
    NORMAL = ‘Normal’
    LARGE = ‘Large’
    HUGE = ‘Huge’

    DASHBOARD_GROUP = ‘DASHBOARD’

    lengthInput = input.int( 20, ‘Length’, minval = 1)
    reactivityInput = input.float( 50, ‘Expansion %’, minval = 0, maxval = 100) / 100
    sourceInput = input.source( close, ‘Source’)

    showStatisticsInput = input.bool( false, ‘Show Statistics’, group = DASHBOARD_GROUP)
    dashboardPositionInput = input.string( TOP_RIGHT, ‘Position’, group = DASHBOARD_GROUP, options = [TOP_RIGHT,BOTTOM_RIGHT,BOTTOM_LEFT])
    dashboardSizeInput = input.string( NORMAL, ‘Size’, group = DASHBOARD_GROUP, options = [TINY,SMALL,NORMAL,LARGE,HUGE])

    //———————————————————————————————————————}
    //DATA STRUCTURES & VARIABLES
    //———————————————————————————————————————{
    type stats
    float pnl = 0
    float profit = 0
    float loss = 0
    int trades = 0
    int winners = 0
    int losers = 0
    int winnerBars = 0
    int loserBars = 0
    int firstTouch = 0

    type trade
    int bias = na
    int bar = na
    float price = na
    bool touched = false
    int firstTouch = na

    var stats longs = stats.new()
    var stats shorts = stats.new()
    var trade currentTrade = trade.new()
    var float max = sourceInput
    var float min = sourceInput
    var int trend = 0

    var parsedDashboardPosition = switch dashboardPositionInput
    TOP_RIGHT => position.top_right
    BOTTOM_RIGHT => position.bottom_right
    BOTTOM_LEFT => position.bottom_left

    var parsedDashboardSize = switch dashboardSizeInput
    TINY => size.tiny
    SMALL => size.small
    NORMAL => size.normal
    LARGE => size.large
    HUGE => size.huge

    //———————————————————————————————————————}
    //USER-DEFINED FUNCTIONS
    //———————————————————————————————————————{
    gatherStats(int bias, float top, float bottom) =>
    log.info(‘gatherStats’)
    bool long = bias > bias[1]
    bool short = bias < bias[1]
    var int BULLISH = 1
    var int BEARISH = 0
    var int currentBias = 0
    currentBias := long ? BULLISH : short ? BEARISH : currentBias
    bool newTrade = currentBias != currentBias[1]

    if newTrade
    float priceDelta = currentBias == BULLISH ? currentTrade.price – close : close – currentTrade.price
    stats s_tats = currentBias == BULLISH ? shorts : longs

    if not na(priceDelta)
    s_tats.trades += 1
    s_tats.pnl += priceDelta

    if currentTrade.touched
    s_tats.firstTouch += currentTrade.firstTouch

    if priceDelta > 0
    s_tats.winners += 1
    s_tats.winnerBars += bar_index – currentTrade.bar
    s_tats.profit += priceDelta
    else
    s_tats.losers += 1
    s_tats.loserBars += bar_index – currentTrade.bar
    s_tats.loss += priceDelta

    currentTrade.bar := bar_index
    currentTrade.price := close
    currentTrade.touched := false
    currentTrade.bias := currentBias

    else if not currentTrade.touched
    if (currentTrade.bias == BULLISH and low <= bottom) or (currentTrade.bias == BEARISH and high >= top)
    currentTrade.touched := true
    currentTrade.firstTouch := bar_index – currentTrade.bar

    plotHeader(table t_able, int col, int row, string data, color textColor = #FFFFFF) => t_able.cell(col,row,data,text_color = textColor,text_size = parsedDashboardSize)

    plotCell(table t_able, int col, int row, string data, color textColor = #FFFFFF, bool noBackground = true) => t_able.cell(col,row,data,text_color = noBackground ? textColor : color.new(str.tonumber(data) > 0 ? GREEN : RED,0),text_size = parsedDashboardSize, bgcolor = noBackground ? #1e222d : color.new(str.tonumber(data) > 0 ? GREEN : RED,75))

    plotHeaders(table t_able) =>
    plotHeader(t_able,1,0,’LONGS’)
    plotHeader(t_able,2,0,’SHORTS’)
    plotHeader(t_able,3,0,’TOTAL’)

    plotHeader(t_able,0,1,’PNL’)
    plotHeader(t_able,0,2,’GROSS PROFIT’)
    plotHeader(t_able,0,3,’GROSS LOSS’)
    plotHeader(t_able,0,4,’TRADES’)
    plotHeader(t_able,0,5,’WINNERS’)
    plotHeader(t_able,0,6,’LOSERS’)
    plotHeader(t_able,0,7,’AVG. WINNER’)
    plotHeader(t_able,0,8,’AVG. LOSER’)
    plotHeader(t_able,0,9,’WIN RATE’)
    plotHeader(t_able,0,10,’R/R’)
    plotHeader(t_able,0,11,’EXPECT.’)
    plotHeader(t_able,0,12,’AVG. BARS’)
    plotHeader(t_able,0,13,’AVG. WIN. BARS’)
    plotHeader(t_able,0,14,’AVG. LOS. BARS’)
    plotHeader(t_able,0,15,’AVG. 1st TOUCH’)

    plotData(table t_able, stats s_tats, int col) =>
    pnl = col == 3 ? longs.pnl + shorts.pnl : s_tats.pnl
    profit = col == 3 ? longs.profit + shorts.profit : s_tats.profit
    loss = col == 3 ? longs.loss + shorts.loss : s_tats.loss
    trades = col == 3 ? longs.trades + shorts.trades : s_tats.trades
    winners = col == 3 ? longs.winners + shorts.winners : s_tats.winners
    losers = col == 3 ? longs.losers + shorts.losers : s_tats.losers
    avgWinner = col == 3 ? (longs.profit + shorts.profit)/(longs.winners + shorts.winners) : s_tats.profit / s_tats.winners
    avgLoser = col == 3 ? (longs.loss + shorts.loss)/(longs.losers + shorts.losers) : s_tats.loss / s_tats.losers
    winRate = col == 3 ? (longs.winners + shorts.winners)/(longs.trades + shorts.trades) : s_tats.winners / s_tats.trades
    risk2reward = math.abs(avgWinner / avgLoser)
    expectacy = (winRate * avgWinner) – (1 – winRate) * math.abs(avgLoser)
    winnerBars = col == 3 ? longs.winnerBars + shorts.winnerBars : s_tats.winnerBars
    loserBars = col == 3 ? longs.loserBars + shorts.loserBars : s_tats.loserBars
    bars = math.round((winnerBars + loserBars)/trades)
    firstTouch = (col == 3 ? longs.firstTouch + shorts.firstTouch : s_tats.firstTouch) / trades

    plotCell(t_able,col,1,str.tostring(pnl,format.mintick),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,2,str.tostring(profit,format.mintick),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,3,str.tostring(loss,format.mintick),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,4,str.tostring(trades),color.new(chart.fg_color,25))
    plotCell(t_able,col,5,str.tostring(winners),color.new(chart.fg_color,25))
    plotCell(t_able,col,6,str.tostring(losers),color.new(chart.fg_color,25))
    plotCell(t_able,col,7,str.tostring(avgWinner,format.mintick),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,8,str.tostring(avgLoser,format.mintick),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,9,str.tostring(100*winRate,format.percent),color.new(chart.fg_color,25))
    plotCell(t_able,col,10,str.tostring(risk2reward,’0.00′),color.new(chart.fg_color,25))
    plotCell(t_able,col,11,str.tostring(expectacy,’0.00′),color.new(chart.fg_color,25),false)
    plotCell(t_able,col,12,str.tostring(bars),color.new(chart.fg_color,25))
    plotCell(t_able,col,13,str.tostring(math.round(winnerBars/winners)),color.new(chart.fg_color,25))
    plotCell(t_able,col,14,str.tostring(math.round(loserBars/losers)),color.new(chart.fg_color,25))
    plotCell(t_able,col,15,str.tostring(math.round(firstTouch)),color.new(chart.fg_color,25))

    statsDashboard() =>
    var table t_able = table.new(parsedDashboardPosition,4,16
    , bgcolor = #1e222d
    , border_color = #373a46
    , border_width = 1
    , frame_color = #373a46
    , frame_width = 1)

    plotHeaders(t_able)
    plotData(t_able,longs,1)
    plotData(t_able,shorts,2)
    plotData(t_able,na,3)

    //———————————————————————————————————————}
    //MUTABLE VARIABLES & EXECUTION
    //———————————————————————————————————————{
    // Rolling Max/Min
    float upper = ta.highest(sourceInput, lengthInput)
    float lower = ta.lowest(sourceInput, lengthInput)

    // Expansion operation
    max := math.max(sourceInput, max + nz(upper – upper[1]) – nz(math.max(lower[1] – lower, 0)) * reactivityInput)
    min := math.min(sourceInput, min + nz(lower – lower[1]) + nz(math.max(upper – upper[1], 0)) * reactivityInput)
    trend := min != lower and min[1] == lower[1] ? 1 : max != upper and max[1] == upper[1] ? -1 : trend

    float expansionSource = trend == 1 ? upper : lower

    if barstate.isconfirmed
    gatherStats(trend,max,min)

    if barstate.islast and showStatisticsInput
    statsDashboard()

    plot_max1 = plot(upper, display = display.none, editable = false)
    plot_min1 = plot(lower, display = display.none, editable = false)
    plot_max2 = plot(max, ‘Upper Expansion’, color = RED, display = display.none)
    plot_min2 = plot(min, ‘Lower Expansion’, color = GREEN, display = display.none)

    plot(expansionSource, ‘Expansion Source’,
    color = trend != trend[1] ? na : trend == 1 ? color.new(GREEN, 50) : color.new(RED, 50),
    style = plot.style_cross
    )

    plot(trend > trend[1] ? lower : trend < trend[1] ? upper : na,
    ‘Trend Dot’,
    trend == 1 ? GREEN : RED,
    2,
    style = plot.style_circles,
    offset = -1
    )

    // Area fills
    fill(plot_max1, plot_max2, upper, max, color.new(RED, 70), color.new(RED, 50), title = ‘Bearish Cloud Gradient’)
    fill(plot_min1, plot_min2, min, lower, color.new(GREEN, 50), color.new(GREEN, 70), title = ‘Bullish Cloud Gradient’)

    //———————————————————————————————————————}

    Screenshot-2025-09-22-at-10-33-52-Expanded-Cloud-LuxAlgo-—-Indicator-by-LuxAlgo-—-TradingView.png Screenshot-2025-09-22-at-10-33-52-Expanded-Cloud-LuxAlgo-—-Indicator-by-LuxAlgo-—-TradingView.png
    #251687 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Ecco:

    //---------------------------------------------------//
    //PRC_Expanded Cloud by LuxAlgo
    //version = 0
    //24.09.2025
    //Iván González @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    //---------------------------------------------------//
    // ----------- Parámetros configurables -------------//
    //---------------------------------------------------//
    lengthInput     = 20           // Periodo de cálculo (Highest/Lowest)
    reactivityInput = 50           // Porcentaje de expansión (0-100)
    source          = close        // Precio de referencia
    // Convertir reactividad a factor
    reactivity = reactivityInput / 100
    //---------------------------------------------------//
    // ---------- Cálculo de máximos y mínimos ----------//
    //---------------------------------------------------//
    upper = HIGHEST[lengthInput](source)
    lower = LOWEST[lengthInput](source)
    //---------------------------------------------------//
    // ---------------- Cálculo de la nube --------------//
    //---------------------------------------------------//
    // ----- Inicialización de variables dinámicas
    ONCE maxExp = source
    ONCE minExp = source
    ONCE trend  = 0
    if barindex>lengthInput then
       // ----- Actualización de expansión
       maxExp = MAX(source, maxExp[1] + (upper - upper[1]) - (MAX(lower[1] - lower, 0) * reactivity))
       minExp = MIN(source, minExp[1] + (lower - lower[1]) + (MAX(upper - upper[1], 0) * reactivity))
       // ----- Detección de tendencia
       IF minExp <> lower AND minExp[1] = lower[1] THEN
          trend = 1 // alcista
       ELSIF maxExp <> upper AND maxExp[1] = upper[1] THEN
          trend = -1 // bajista
       ELSE
          trend = trend[1]
       ENDIF
    endif
    //---------------------------------------------------//
    // ------------------ Pintar nube -------------------//
    //---------------------------------------------------//
    IF trend = 1 THEN
       rup=100
       gup=255
       bup=100
       rlw=100
       glw=200
       blw=100
       alphaup=100
       alphalw=0
    ELSIF trend = -1 THEN
       rup=255
       gup=100
       bup=100
       rlw=200
       glw=100
       blw=100
       alphaup=0
       alphalw=100
    ENDIF
    COLORBETWEEN(upper, maxExp, rup,gup,bup,alphalw)
    COLORBETWEEN(minExp, lower, rlw,glw,blw,alphaup)
    //---------------------------------------------------//
    RETURN maxExp COLOURED(255,100,100,alphaup*2) AS "Expanded Upper" style(point), minExp COLOURED(100,255,100,alphalw*2) AS "Expanded Lower" style(point)
    
    Msport71 thanked this post
    #251693 quote
    Msport71Msport71
    Participant
    Senior

    Grazie!

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 TW Expanded cloud


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Msport71 @carlo-pasca Participant
Summary

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

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/22/2025
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...