如何将TradingView多指标背离检测代码改写为函数以避免重复?
用函数重构TradingView背离指标代码,避免重复
完全可以通过自定义函数消除这段重复代码,Pine Script支持返回多个值的自定义函数,刚好适配你需要输出的牛/熊背离条件。
步骤1:封装背离判断逻辑为函数
把重复的找顶底、背离判断逻辑封装成可复用函数,参数传入震荡指标值、左右回溯周期,返回牛/熊背离条件:
// 封装背离判断逻辑的自定义函数 f_divergence(osc, lbL, lbR) => // 识别顶底 pivot plFound = not na(ta.pivotlow(osc, lbL, lbR)) phFound = not na(ta.pivothigh(osc, lbL, lbR)) // 常规牛背离条件 oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1]) priceLL = close[lbR] < ta.valuewhen(plFound, close[lbR], 1) bullCond = priceLL and oscHL and plFound // 常规熊背离条件 oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1]) priceHH = close[lbR] > ta.valuewhen(phFound, close[lbR], 1) bearCond = priceHH and oscLH and phFound // 返回两个条件值 [bullCond, bearCond]
步骤2:调用函数处理不同指标
之后只需为RSI、MACD、Stoch分别计算对应的震荡指标值,再调用该函数即可,无需重复编写判断逻辑:
// 示例:计算各指标值 rsiValue = ta.rsi(close, 14) macdLine = ta.macd(close, 12, 26, 9)[0] stochK = ta.stoch(close, high, low, 14) // 调用函数获取各指标的背离条件 rsiBull, rsiBear = f_divergence(rsiValue, lbL, lbR) macdBull, macdBear = f_divergence(macdLine, lbL, lbR) stochBull, stochBear = f_divergence(stochK, lbL, lbR)
说明
- 函数中把原代码里的
na(...) ? false : true简化为not na(...),逻辑完全一致但更简洁 - 需确保
_inRange函数已在脚本中定义(原代码中用到的范围判断逻辑) - 如果不同指标需要不同的lbL/lbR参数,调用时传入对应值即可,灵活性更高
内容的提问来源于stack exchange,提问作者zollen 123
相关产品推荐
相关产品推荐

