n/a value when line.new with if statement in Pine Script TradingView

ぐ巨炮叔叔 提交于 2021-01-24 11:44:37

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!