You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义Zigzag指标的绘图数据用于后续计算?

Pine Script 类Zigzag线数据存储与历史访问问题

你编写的类Zigzag线Pine Script代码如下:

indicator("Custom zigzag", overlay=true)
bullish(at) => open[at] < close[at]
bearish(at) => open[at] > close[at]
break_up() => 
    if close != open
        at = 1
        while close[at] == open[at]
            at += 1
        if bearish(at) and bullish(0)
            true
        else
            false
    else
        false
break_down() => 
    if close != open
        at = 1
        while close[at] == open[at]
            at += 1
        if bearish(0) and bullish(at)
            true
        else
            false
    else
        false
u = break_up()
d = break_down()

plot(u?open[0] : d?open[0] : na, color = color.fuchsia, linewidth = 1, style = plot.style_line, offset=0)

1. 将绘图值存入数组并避免逐K线重算

要把u?open[0] : d?open[0] : na的结果存入数组且防止逐K线重复计算,核心是用var关键字声明数组(确保数组只初始化一次),仅在信号触发(u或d为true)时向数组添加数据:

// 初始化仅执行一次的数组
var float[] zigzagValues = array.new_float()

// 计算绘图用的目标值
zigzagPlotValue = u ? open[0] : d ? open[0] : na

// 仅当有有效信号时推送值到数组
if u or d
    array.push(zigzagValues, zigzagPlotValue)

// 后续计算可直接使用数组,例如获取最后一个值
lastZigzagValue = array.size(zigzagValues) > 0 ? array.get(zigzagValues, array.size(zigzagValues)-1) : na

这样数组只会在出现反转信号时更新,不会逐K线重复推送无效的na值,也避免了数组的重复初始化。

2. 能否访问自身的历史绘图数据?

不行。Pine Script的plot()函数仅负责可视化输出,其生成的绘图数据属于前端渲染层,脚本本身无法直接读取自身的历史绘图结果。

你需要将绘图逻辑封装为独立变量(比如上面的zigzagPlotValue),直接使用这个变量进行后续计算,而不是尝试读取plot的输出数据。

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:18:33