【问题标题】:Plotting previous day high/low/close using pine script使用松脚本绘制前一天的高/低/收盘价
【发布时间】:2022-12-03 13:01:48
【问题描述】:

我有一个 pine 脚本来绘制前一天的高点/开盘价/低点,如下所示:

//@version=4
strategy("Plot Lines", overlay=true)

PDH = security(syminfo.tickerid,"D",high)
PDO = security(syminfo.tickerid,"D",open)
PDL = security(syminfo.tickerid,"D",low)

plot(PDH, title="High",color=color.red,linewidth=2,trackprice=true)
plot(PDO, title="Open",color=color.yellow,linewidth=2,trackprice=true)
plot(PDL, title="Low",color=color.green,linewidth=2,trackprice=true)

该脚本运行良好,但我只想显示前一天并忽略前一天的其他日子,这样图表就不会那么混乱。

这是我从上面的脚本中得到的:

如您所见,它绘制了前一天的 PDH/PDO/PDL,但我只想要前一天(一天)。任何帮助或建议将不胜感激!

新编辑

应用脚本后的结果

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    @vitruvius 的回答很好,但我想补充一点。
    无需画线和删除旧线。您可以只定义一次,然后将它们移动到最后一根柱线上。此外,可以在一个security() 调用中请求这些值。

    //@version=5
    indicator("Plot Lines", overlay=true)
    
    f_newLine(_color) => line.new(na, na, na, na, xloc.bar_time, extend.right, _color)
    
    f_moveLine(_line, _x, _y) =>
        line.set_xy1(_line, _x,   _y)
        line.set_xy2(_line, _x+1, _y)
    
    var line    line_open = f_newLine(color.yellow)
    var line    line_high = f_newLine(color.red)
    var line    line_low  = f_newLine(color.green)
    
    [pdo,pdh,pdl] = request.security(syminfo.tickerid,"D", [open,high,low])
    
    if barstate.islast
        f_moveLine(line_open, time, pdo)
        f_moveLine(line_high, time, pdh)
        f_moveLine(line_low , time, pdl)
    

    编辑 1

    //@version=5
    indicator("Plot Lines", overlay=true)
    
    f_newLine(_color) => line.new(na, na, na, na, xloc.bar_time, extend.right, _color)
    
    f_moveLine(_line, _x, _y) =>
        line.set_xy1(_line, _x,   _y)
        line.set_xy2(_line, _x+1, _y)
    
    var line    line_open = f_newLine(color.yellow)
    var line    line_high = f_newLine(color.red)
    var line    line_low  = f_newLine(color.green)
    
    [pdo,pdh,pdl,pdt] = request.security(syminfo.tickerid,"D", [open[1],high[1],low[1],time[1]])
    
    if barstate.islast
        f_moveLine(line_open, pdt, pdo)
        f_moveLine(line_high, pdt, pdh)
        f_moveLine(line_low , pdt, pdl)
    

    【讨论】:

    • 嗨 Bjorn,感谢您的回复,我在 New Blank Strategy 上使用您的脚本进行了测试,但出现此错误:Add to Chart operation failed, reason: error 知道我哪里做错了吗?
    • 我的脚本不是策略,而是指标。只需用我的代码替换你的 Pine 编辑器窗口中的所有代码,它就会工作。
    • 是的,我也尝试使用指示器,但还是一样,我在问题的编辑下附上了截图
    • 这很奇怪。一切看起来都是正确的。它对我有用。您是否尝试关闭浏览器/电视桌面(不确定您使用的是哪个)并再次尝试将其添加到图表中?
    • 仍然不能:(,不知道为什么
    【解决方案2】:

    您可以使用 line() 函数代替 plot()

    如果是最后一根柱线,则绘制线条,并沿途删除之前的柱线。

    //@version=4
    study("Plot Lines", overlay=true)
    
    PDH = security(syminfo.tickerid,"D",high)
    PDO = security(syminfo.tickerid,"D",open)
    PDL = security(syminfo.tickerid,"D",low)
    
    var line l_pdh = na, var line l_pdo = na, var line l_pdl = na
    
    if barstate.islast
        l_pdh := line.new(bar_index-1, PDH, bar_index, PDH, extend=extend.both, color=color.green)
        l_pdo := line.new(bar_index-1, PDO, bar_index, PDO, extend=extend.both, color=color.blue)
        l_pdl := line.new(bar_index-1, PDL, bar_index, PDL, extend=extend.both, color=color.red)
    
    line.delete(l_pdh[1])
    line.delete(l_pdo[1])
    line.delete(l_pdl[1])
    

    【讨论】:

    • 嗨 Vitruvius,我用 New Blank Strategy/New Blank Indicator 试过你的代码,都显示错误:Add to Chart operation failed, reason: error。你知道我哪里做错了吗?
    • 不,应该是一些服务器问题。我自己测试过,没有问题。给它一些时间再试一次,也许重新启动你的浏览器。
    【解决方案3】:

    不完全是你问的,但它可以引导你朝着正确的方向前进:

    //@version=5
    indicator("My script", overlay = true)
    
    resolution = 'D'
    var float highSecurityValue   = na
    var float lowSecurityValue    = na
    var float closeSecurityValue  = na
    
    fNoRepainting(timeframe, expression) =>
        request.security(symbol = syminfo.tickerid, timeframe = timeframe, expression = expression[barstate.isrealtime ? 1 : 0], gaps = barmerge.gaps_off)[barstate.isrealtime ? 0 : 1] // PineCoders best practice.
    
    trimLineAtRange = '0000-0001'
    trimLinePlot = time('1', trimLineAtRange)
    plottingCondition = not trimLinePlot
    
    
    highRequest  = fNoRepainting(resolution, high)
    lowRequest   = fNoRepainting(resolution, low)
    closeRequest = fNoRepainting(resolution, close)
    if trimLinePlot[1]
        highSecurityValue := highRequest
        lowSecurityValue := lowRequest
        closeSecurityValue := closeRequest
    
    plot(plottingCondition ? highSecurityValue : na, title = 'H', style = plot.style_linebr, linewidth = 1, color = color.new(color.red, 0))
    plot(plottingCondition ? lowSecurityValue : na, title = 'L', style = plot.style_linebr, linewidth = 1, color = color.new(color.lime, 0))
    plot(plottingCondition ? closeSecurityValue : na, title = 'C', style = plot.style_linebr, linewidth = 1, color = color.new(color.orange, 0))
    

    结果是(可能比你问的多一点):

    我放置垂直线只是为了加强天的划分。

    请注意,每一天的水平线属于前一天的值。绿色是lowest,红色是highest,橙色是close(你可以换成open,但我建议你使用收盘价)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多