【问题标题】:Update variables at every change, regardless of timeframe每次更改时更新变量,无论时间范围如何
【发布时间】:2021-08-20 22:04:30
【问题描述】:

我想显示一个带有当前close 的标签,该标签根据close 的最后一个(即柱内)值的变化而着色,从而复制符号值的方式在监视列表中着色(在每次价值变化时)

然而,Pine Script 似乎只会在新柱开始时更新用户/脚本变量(相对于图表的时间帧分辨率)。

虽然close 将始终返回最新值,但(我发现)无法访问最后一个 close——只有@ 987654325@,这是最后一个柱形图收盘价,而不是close 的真正先前值。我需要类似于close[0,1] 的东西,形式为source[bar_index, array_index_of_changes_within_bar_index]

我尝试了几种方法来解决这个问题:数组、var 和非 var 变量的组合、security() 1s 分辨率(这本来是一个低于标准的解决方案,但无论如何,Pine Script 不允许)。

关于这是否可以在 Pine Script 中实现的任何建议?

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    您可以像这样使用varip 声明的数组来进行密切比较intrabar

    var label close_label = label.new(x = bar_index, y = close, style = label.style_label_left, size = size.normal, textcolor = color.white)
    varip float[] intrabar_closes = array.new_float()
    
    array.unshift(intrabar_closes, close)
    if array.size(intrabar_closes) > 2
        array.pop(intrabar_closes)
    col = array.size(intrabar_closes) > 1 ? array.get(intrabar_closes, 0) >= array.get(intrabar_closes, 1) ? color.lime : color.red : na
    label.set_xy(close_label, x = bar_index, y = close)
    label.set_color(close_label, color = col)
    label.set_text(close_label, text = tostring(close))
    

    【讨论】:

    • 我正在重新考虑这个想法,并希望根据array.get(intrabar_closes, 0)array.get(intrabar_closes, 1) 进行一些计算(例如,计算它们之间的 $ 或 % 变化)。但是,我遇到了问题。我能够返回/显示array.get(intrabar_closes, 0) 的值,但如果我尝试显示/返回array.get(intrabar_closes, 1) 的值,我将破坏代码。为什么这一行不起作用,对于标签文本:label.set_text(close_label, text = tostring(array.get(intrabar_closes, 0) - array.get(intrabar_closes, 1)))?再次感谢。
    • 我猜你可能会遇到索引错误,这是由于在第一次更新时,数组中只存在一个值。就像col 变量一样,您需要先测试数组中是否有超过 1 个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多