问题
I wanted to create an indicator that shows when a close crossed over a trend line.
Here's the code, here "trendLineCrossover" should show 1.00 on crossover bar and 0.00 on other bars. But actually this shows me 0.00 only on the last bar (and the consecutive area) and on other bars it shows n/a .
lineObj = if (syminfo.tickerid == "BINANCE:SRMUSDT")
if (barstate.islast)
line.new(x1=3380-89, y1=0.9609, x2=3380 , y2=1.0216)
line.set_extend(id=lineObj, extend=extend.right)
trendLine = line.get_price(lineObj, 0)
trendLineCrossover = crossover(close, trendLine)
plotshape(trendLineCrossover, title="trendLineCrossover", color=color.purple, style=shape.xcross)
How can I fix the code to show the expected result? Thanks.
回答1:
Here we draw your line on the x2
bar no 3380 and include barstate.islast
in conditions evaluated on every bar, as enclosing your line drawing call inside the if
block will not make the detection of crossovers possible:
Version 1
//@version=4
study("", "", true, max_bars_back = 5000)
var line lineObj = na
trendLineCrossover = false
if (syminfo.tickerid == "BINANCE:SRMUSDT") and bar_index == 3380
lineObj := line.new(x1=bar_index-89, y1=0.9609, x2=bar_index , y2=1.0216, extend=extend.right)
trendLine = line.get_price(lineObj, bar_index)
trendLineCrossover := barstate.islast and crossover(close, trendLine)
plotshape(trendLineCrossover, title="trendLineCrossover", color=color.purple, style=shape.xcross)
// For validation only.
c = close < trendLine
plotchar(c, "c", "•", location.top, size = size.tiny)
// Show bg starting at the bar where we draw our line.
bgcolor(bar_index > 3380-89 ? color.silver : na)
Version 2
//@version=4
study("", "", true)
var line lineObj = na
if (syminfo.tickerid == "BINANCE:SRMUSDT") and bar_index == 3380
lineObj := line.new(x1=bar_index-89, y1=0.9609, x2=bar_index , y2=1.0216, extend=extend.right)
trendLine = line.get_price(lineObj, bar_index)
trendLineCrossover = crossover(close, trendLine)
plotshape(trendLineCrossover, title="trendLineCrossover", color=color.purple, style=shape.xcross)
// —————— For validation only.
// Bar no.
plotchar(bar_index, "bar_index", "", location.top, size = size.tiny)
// Plots the value returned by line.get_price() so you can see when it becomes available.
plot(trendLine, "trendLine", color.blue, 6, transp = 60)
// Show bg starting at the bar where where the line is drawn.
bgcolor(bar_index > 3380 ? color.silver : na)
来源:https://stackoverflow.com/questions/65510011/n-a-value-when-line-new-with-if-statement-in-pine-script-tradingview