如何在Pine Script中匹配布尔条件的第N次最近出现情况
Pine Script 定位布尔条件第N次出现的实现方法
Pine Script v5 原生支持你需要的功能,核心依赖内置函数ta.valuewhen(),完全匹配你提到的「0代表最近一次、1代表倒数第二次」的编号规则。
核心实现逻辑
ta.valuewhen(condition, source, occurrence) 函数的第三个参数occurrence就是你要找的第N次出现序号,我们可以基于它封装一个通用函数,直接获取某条件第N次出现距离当前K线的间隔:
// 自定义函数:返回布尔条件condition第n次出现距离当前K线的根数,n=0为最近一次 bars_since_nth(condition, n) => ta.bar_index - ta.valuewhen(condition, ta.bar_index, n)
你的场景实现示例
场景1:某事件是否在15根K线内发生了两次
对应你给出的伪代码x = conditionA and barssince(conditionA{1}) < 15,实际代码为:
x = conditionA and bars_since_nth(conditionA, 1) < 15
只有当conditionA当前触发,且上一次conditionA触发的位置距离当前不足15根K线时,x为真。
场景2:某条件是否发生在另一个条件的两次出现之间
比如判断conditionA触发时,刚好处于两次conditionB触发的区间内,代码为:
y = conditionA and bars_since_nth(conditionB, 0) < bars_since_nth(conditionB, 1)
场景3:15根K线内存在两次蓝色形态
对应你图示的需求,当绿色标记cond_green触发时,判断往回15根K线内蓝色形态cond_blue出现次数≥2:
// 统计15根K线内cond_blue的触发次数 blue_count = ta.sum(cond_blue ? 1 : 0, 15) check_result = cond_green and blue_count >= 2
注意事项
- 如果历史上
condition的触发次数不足n+1次,ta.valuewhen()会返回空值na,可以配合ta.na()函数做异常判断,避免逻辑报错 - 若需要统计任意区间内的条件触发次数,直接使用内置函数
ta.count(condition, length)即可,无需手动累加
内容的提问来源于stack exchange,提问作者Drewdavid
相关产品推荐
相关产品推荐

