Nadaraya Watson Envelope

Forums ProRealTime foro Español Soporte ProBuilder Nadaraya Watson Envelope

Viewing 2 posts - 1 through 2 (of 2 total)
  • #239170

    Hola,

    He visto que hay un código parecido de esto en el foro en inglés, pero el resultado no es el mismo. ¿Alguien podría traducir esto a ProRealCode para poder usarlo en el ProRealTime?

    Gracias

    Un saludo

    // 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=5
    indicator(“Nadaraya-Watson Envelope [LuxAlgo]”, “LuxAlgo – Nadaraya-Watson Envelope”, overlay = true, max_lines_count = 500, max_labels_count = 500, max_bars_back=500)
    //——————————————————————————
    //Settings
    //—————————————————————————–{
    h = input.float(8.,’Bandwidth’, minval = 0)
    mult = input.float(3., minval = 0)
    src = input(close, ‘Source’)
    repaint = input(true, ‘Repainting Smoothing’, tooltip = ‘Repainting is an effect where the indicators historical output is subject to change over time. Disabling repainting will cause the indicator to output the endpoints of the calculations’)
    //Style
    upCss = input.color(color.teal, ‘Colors’, inline = ‘inline1’, group = ‘Style’)
    dnCss = input.color(color.red, ”, inline = ‘inline1’, group = ‘Style’)
    //—————————————————————————–}
    //Functions
    //—————————————————————————–{
    //Gaussian window
    gauss(x, h) => math.exp(-(math.pow(x, 2)/(h * h * 2)))
    //—————————————————————————–}
    //Append lines
    //—————————————————————————–{
    n = bar_index
    varln=array.new_line(0)
    if barstate.isfirst and repaint
    fori=0to499
    array.push(ln,line.new(na,na,na,na))
    //—————————————————————————–}
    //End point method
    //—————————————————————————–{
    var coefs = array.new_float(0)
    var den = 0.
    if barstate.isfirst and not repaint
    fori=0to499
    w=gauss(i,h)
    coefs.push(w)
    den:=coefs.sum()
    out = 0.
    if not repaint
    fori=0to499
    out+=src[i]*coefs.get(i)
    out /= den
    mae = ta.sma(math.abs(src – out), 499) * mult
    upper = out + mae
    lower = out – mae
    //—————————————————————————–}
    //Compute and display NWE
    //—————————————————————————–{
    float y2 = na
    float y1 = na
    nwe = array.new<float>(0)
    if barstate.islast and repaint
    sae=0.
    //Compute and set NWE point
    fori=0tomath.min(499,n-1)
    sum=0.
    sumw=0.
    //Compute weighted mean
    forj=0tomath.min(499,n-1)
    w=gauss(i-j,h)
    sum+=src[j]*w
    sumw+=w
    y2:=sum/sumw
    sae+=math.abs(src[i]-y2)
    nwe.push(y2)
    sae:=sae/math.min(499,n-1)*mult
    fori=0tomath.min(499,n-1)
    ifi%2
    line.new(n-i+1,y1+sae,n-i,nwe.get(i)+sae,color=upCss)
    line.new(n-i+1,y1-sae,n-i,nwe.get(i)-sae,color=dnCss)
    ifsrc[i]>nwe.get(i)+saeandsrc[i+1]<nwe.get(i)+sae
    label.new(n-i,src[i],’▼’,color=color(na),style=label.style_label_down,textcolor=dnCss,textalign=text.align_center)
    ifsrc[i]<nwe.get(i)-saeandsrc[i+1]>nwe.get(i)-sae
    label.new(n-i,src[i],’▲’,color=color(na),style=label.style_label_up,textcolor=upCss,textalign=text.align_center)
    y1:=nwe.get(i)
    //—————————————————————————–}
    //Dashboard
    //—————————————————————————–{
    var tb = table.new(position.top_right, 1, 1
    ,bgcolor=#1e222d
    ,border_color=#373a46
    ,border_width=1
    ,frame_color=#373a46
    ,frame_width=1)
    if repaint
    tb.cell(0,0,’Repainting Mode Enabled’,text_color=color.white,text_size=size.small)
    //—————————————————————————–}
    //Plot
    //—————————————————————————–}
    plot(repaint ? na : out + mae, ‘Upper’, upCss)
    plot(repaint ? na : out – mae, ‘Lower’, dnCss)
    //Crossing Arrows
    plotshape(ta.crossunder(close, out – mae) ? low : na, “Crossunder”, shape.labelup, location.absolute, color(na), 0 , text = ‘▲’, textcolor = upCss, size = size.tiny)
    plotshape(ta.crossover(close, out + mae) ? high : na, “Crossover”, shape.labeldown, location.absolute, color(na), 0 , text = ‘▼’, textcolor = dnCss, size = size.tiny)
    //—————————————————————————–}
    #239688
Viewing 2 posts - 1 through 2 (of 2 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login