Pine Script基于barssince的4根K线冷却期买入信号逻辑优化
Pine Script 4根K线冷却期买入信号正确实现
原代码的问题是ta.barssince(buySignal[1])基于未过滤的原始买入信号计算间隔,没有以上一次生效的买入信号为计数起点,因此无法满足1、6、11根K线依次触发的需求。
以下是两种正确实现方式:
方案1:用全局变量记录上一次有效信号位置
这是逻辑最清晰、兼容性最好的写法:
// 此处替换为你自己的原始买入信号逻辑 buySignal = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) var int lastValidBuyBar = na validBuy = na if buySignal // 首次触发或者距离上一次有效信号满4根K线则生效 if na(lastValidBuyBar) or bar_index - lastValidBuyBar >= 4 validBuy := buySignal lastValidBuyBar := bar_index // 绘制买入信号 plotshape(validBuy, location=location.belowbar, color=color.lime, style=shape.triangleup, text="YEY")
方案2:用ta.barssince简化实现
直接基于过滤后的有效信号计算间隔,写法更简洁:
// 此处替换为你自己的原始买入信号逻辑 buySignal = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) validBuy = buySignal and ta.barssince(validBuy[1]) >= 4 // 绘制买入信号 plotshape(validBuy, location=location.belowbar, color=color.lime, style=shape.triangleup, text="YEY")
两种写法都会以上一次生效的买入信号为起点,间隔4根K线后才允许触发下一次信号,完全符合1、6、11根K线依次触发的需求。
内容的提问来源于stack exchange,提问作者meltinsands
相关产品推荐
相关产品推荐

