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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:02