Pine Script v5如何为每根K线存储布尔数据并访问历史?
在Pine Script v5中存储并回溯布尔数据的实现方法
当然可以,Pine Script v5的核心特性就是序列变量(Series),每根K线的计算结果会自动被存储为序列的一个元素,你可以直接通过索引回溯历史数据。以下是具体实现思路和示例:
1. 核心逻辑:用序列变量存储布尔值
不需要额外的“存储容器”,直接定义普通变量并赋值布尔条件即可。这类变量本质是序列,每根K线的计算结果会被自动保留,形成对应所有历史K线的数据集。
比如定义一个判断阴线的布尔变量:
// 判断当前K线是否为阴线 isBearish = close < open
isBearish会自动保存每根K线的判断结果,最新值对应当前K线,历史值对应过往K线。
2. 回溯查看历史布尔数据
通过**索引符号[]**可以直接访问任意历史K线的布尔值:
isBearish[1]:上一根K线的布尔结果isBearish[3]:前3根K线的布尔结果isBearish[ta.barssince(isBearish)]:最近一次满足isBearish条件的K线的结果
3. 结合OHLC数据回溯查询
如果需要获取满足布尔条件的K线对应的OHLC数据,可以用ta.valuewhen()函数,语法为:
ta.valuewhen(布尔条件, 目标数据, 偏移量)
示例:获取最近一次阴线的收盘价和开盘价
// 获取最近一次阴线的收盘价 lastBearishClose = ta.valuewhen(isBearish, close, 0) // 获取倒数第二次阴线的开盘价 prevBearishOpen = ta.valuewhen(isBearish, open, 1)
完整示例代码
//@version=5 indicator("布尔数据存储与回溯示例", overlay=true) // 1. 定义布尔变量:判断K线是否为阳线且涨幅超过1% isStrongBull = close > open and (close / open - 1) > 0.01 // 2. 回溯查看前2根K线的布尔值 prev2StrongBull = isStrongBull[2] // 3. 标记满足条件的K线:当前K线为阴线,且前2根是强势阳线 plotshape(not isStrongBull and prev2StrongBull, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) // 4. 获取最近一次强势阳线的最高价 lastStrongHigh = ta.valuewhen(isStrongBull, high, 0) label.new(bar_index, low, "最近强阳高点: " + str.tostring(lastStrongHigh), color=color.green, textcolor=color.white) // 可视化布尔序列(1表示满足条件,0表示不满足) plot(isStrongBull ? 1 : 0, title="强势阳线标记", color=color.blue, display=display.data_window)
查看历史数据的方式
- 数据窗口:添加
plot()后,在图表右侧数据窗口中可以查看每根K线对应的布尔变量数值(1/0) - 索引访问:直接在代码中通过
[n]调用历史值,用于后续逻辑计算
内容的提问来源于stack exchange,提问作者Miro Krsjak
相关产品推荐
相关产品推荐

