Pine Script如何基于布林带交叉信号实现flip/flop触发型信号数组
Pine Script实现类AmiBroker Flip功能的方法
实现逻辑
你需要的状态翻转功能可以通过var关键字声明持久化变量实现,var声明的变量只会在指标首次加载时初始化一次,后续K线计算时会保留上一根K线的取值,刚好匹配你需要的保持状态直到触发反向信号的需求。
完整实现代码
你可以在原有布林带代码基础上新增如下逻辑:
// 原有布林带计算逻辑保留 smaValue = ta.sma(close, 20) stdDev = ta.stdev(close, 20) upperBand = smaValue + (stdDev * 2) lowerBand = smaValue - (stdDev * 2) buy = ta.crossover(close, upperBand) sell = ta.crossunder(close, lowerBand) // 新增Flip状态变量 var int flipStatus = 0 flipStatus := buy ? 1 : sell ? 0 : flipStatus
以上代码基于Pine Script v5编写,如果你使用v4版本,去掉所有ta.前缀即可正常运行
代码说明
var int flipStatus = 0:初始化状态变量,首次加载时默认取值为0- 赋值逻辑优先级:
- 当前K线触发
buy信号,直接将状态设为1 - 未触发
buy但触发sell信号,将状态设为0 - 两个信号都未触发,直接沿用前一根K线的状态值,实现保持效果
- 当前K线触发
扩展封装
如果你需要在多场景复用该功能,可以将逻辑封装成自定义函数:
flip(buySignal, sellSignal, initialValue = 0) => var status = initialValue status := buySignal ? 1 : sellSignal ? 0 : status
调用时直接传入你的买卖信号即可:
flipStatus = flip(buy, sell)
内容的提问来源于stack exchange,提问作者Sylv99
相关产品推荐
相关产品推荐

