PineScript V5:如何检测条件在特定时间范围内是否成立?
PineScript 跨时间范围条件匹配解决方案
当两个交易条件无法在同一根K线同时触发时,直接用condition1 and condition2自然不会产生任何信号。针对这个问题,你可以自定义一个函数,用来检测某个条件是否在指定的时间窗口(N根K线)内曾经成立过。
自定义检测函数
下面是一个通用的函数实现,核心逻辑是计算距离目标条件最近一次触发的K线数,判断是否在设定的窗口范围内:
// 函数功能:检测目标条件是否在最近windowLength根K线内成立 // 参数:cond - 要检测的条件;windowLength - 时间窗口(单位:K线数量) conditionWithinWindow(cond, windowLength) => barsSinceTrigger = ta.barssince(cond) // 获取距离上次条件触发的K线数,未触发过返回na not na(barsSinceTrigger) and barsSinceTrigger <= windowLength // 验证是否在窗口内
实际使用示例
假设你已经定义了condition1和condition2,现在可以这样组合信号:
// 示例1:当前condition1成立,且condition2在最近5根K线内触发过 buy_signal = condition1 and conditionWithinWindow(condition2, 5) // 示例2:当前condition2成立,且condition1在最近3根K线内触发过 // buy_signal = condition2 and conditionWithinWindow(condition1, 3)
注意事项
windowLength的数值可以根据你的策略需求调整,比如短线策略设3-5,中线策略设10-20;- 如果需要排除当前K线(只看之前的N根),可以把判断条件改成
barsSinceTrigger < windowLength; - 如果条件从未触发过,
ta.barssince会返回na,函数会自动返回false,避免错误信号。
内容的提问来源于stack exchange,提问作者Luap
相关产品推荐
相关产品推荐

