如何在单个指标中生成两组参数的Nadaraya-Watson包络线?
解决TradingView中双参数Nadaraya-Watson Envelope仅显示一组线条的问题
核心问题排查
- 变量命名重复:如果第二组计算的变量名和第一组重叠,会直接覆盖第一组的结果,导致最终只显示一组线条
- Plot语句缺失:没有为第二组的上、下边界单独编写
plot()输出语句 - 参数复用错误:第二组计算时误用了第一组的参数变量,导致两组计算结果完全一致
修正后的代码示例
以下是基于LuxAlgo原版逻辑改造的双参数集成代码,确保两组线条独立显示:
//@version=5 indicator("双参数Nadaraya-Watson Envelope", overlay=true) // 第一组参数配置 len1 = input.int(20, title="第一组周期") dev1 = input.float(1.5, title="第一组偏差值") bw1 = input.float(0.3, title="第一组带宽") // 第二组参数配置(完全独立) len2 = input.int(50, title="第二组周期") dev2 = input.float(2.0, title="第二组偏差值") bw2 = input.float(0.5, title="第二组带宽") // 第一组Nadaraya-Watson Envelope计算 kernel1 = ta.sma(close, len1) upper1 = kernel1 + dev1 * ta.stdev(close, len1) * bw1 lower1 = kernel1 - dev1 * ta.stdev(close, len1) * bw1 // 第二组Nadaraya-Watson Envelope计算(变量全独立命名) kernel2 = ta.sma(close, len2) upper2 = kernel2 + dev2 * ta.stdev(close, len2) * bw2 lower2 = kernel2 - dev2 * ta.stdev(close, len2) * bw2 // 绘制第一组边界线 plot(upper1, color=color.green, title="第一组上边界", linewidth=2) plot(lower1, color=color.red, title="第一组下边界", linewidth=2) // 绘制第二组边界线(单独编写plot语句) plot(upper2, color=color.new(color.green, 30), title="第二组上边界", linewidth=2, style=plot.style_dashed) plot(lower2, color=color.new(color.red, 30), title="第二组下边界", linewidth=2, style=plot.style_dashed)
关键注意事项
- 所有第二组相关的变量(包括参数、内核计算、上下边界)必须使用独立命名,比如用
_2后缀区分 - 每组的上、下边界都需要单独调用
plot()函数,不能省略 - 如果原版指标使用了
var/varip声明变量,第二组也要用相同方式声明独立变量,避免数据污染 - 检查TradingView指标的「可见性」设置,确保第二组的plot系列没有被隐藏
内容的提问来源于stack exchange,提问作者Mikail Qaed
相关产品推荐
相关产品推荐

