What will happen to src [1] if it is already the first in the pine

41 Views Asked by At
//@version=4
study(title="UT Bot Alerts", overlay = true)

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

> xATRTrailingStop = 0.0
> xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=  iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

alertcondition(buy,  "UT Long",  "UT Long")
alertcondition(sell, "UT Short", "UT Short")

I encountered an issue while trying to translate the above code into Python code in this section<>xATRTrailingStop=0.0

XATRTrailingStop:=iff (src>nz (xATRTrailingStop [1, 0) and src [1]>nz (xATRTrailingStop [1, 0),> My question is: If src is already the initial value, what would I get by accessing src [1]? Isn't that an error?

1

There are 1 best solutions below

0
vitruvius On

If it is the initial value, then referencing its historical value will return NaN.

You can use fixnan() to replace NaN values with previous nearest non-NaN value, or nz() to replace NaN values with zeros (or given value) in a series.

Here is a demonstration:

//@version=5
indicator("My script", overlay=true)

src_1 = close[1]
src_2 = fixnan(close[1])
src_3 = nz(close[1])

plot(src_1, "src_1", color=color.green)
plot(src_2, "src_2", color=color.yellow)
plot(src_3, "src_3", color=color.red)

enter image description here