在 Pine Script TradingView 中带有 if 语句的 line.new 时的值 [英] n/a value when line.new with if statement in Pine Script TradingView

查看:131
本文介绍了在 Pine Script TradingView 中带有 if 语句的 line.new 时的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个指标,显示收盘价何时越过趋势线.

I wanted to create an indicator that shows when a close crossed over a trend line.

这是代码,这里是趋势线交叉"应该在交叉条上显示 1.00,在其他条上显示 0.00.但实际上这仅在最后一个条形(和连续区域)上显示 0.00,而在其他条形上显示 n/a .

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.

推荐答案

这里我们在 x2 条 3380 上画线,并在评估的条件中包含 barstate.islast在每个条形上,因为在 if 块内封闭您的画线调用不会使检测交叉成为可能:

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=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=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)

这篇关于在 Pine Script TradingView 中带有 if 语句的 line.new 时的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆