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?
// © 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)
//—————————————————————————–}