如何在Pine Script中结合RSI与LuxAlgo的Nadaraya-Watson Envelope
Pine Script:RSI与Nadaraya-Watson Envelope策略整合方案
核心问题拆解
你遇到的本质问题是变量作用域隔离:生成箭头信号的局部代码块无法访问外部声明的rsiBuy/rsiSell变量,导致无法合并RSI与通道的触发条件。解决思路是将所有条件逻辑移至全局作用域,让变量互相可见,再合并生成最终的交易/预警信号。
完整实现代码
//@version=5 indicator("RSI + Nadaraya-Watson Envelope Strategy", overlay=true) // 1. RSI参数与计算 rsi_len = input.int(14, "RSI周期") rsi_overbought = input.int(70, "RSI超买阈值") rsi_oversold = input.int(30, "RSI超卖阈值") rsi_val = ta.rsi(close, rsi_len) // 2. Nadaraya-Watson Envelope参数与计算(兼容LuxAlgo逻辑) nw_len = input.int(20, "NW平滑周期") nw_dev = input.float(1.5, "通道偏差") // 核平滑中轨(还原LuxAlgo的核心逻辑,替代简单SMA) nw_mid = ta.sma(close * ta.wma(1, nw_len), nw_len) / ta.sma(ta.wma(1, nw_len), nw_len) nw_upper = nw_mid + nw_dev * ta.stdev(close, nw_len) nw_lower = nw_mid - nw_dev * ta.stdev(close, nw_len) // 3. 基础条件判断 price_cross_upper = ta.crossover(close, nw_upper) // 价格上穿通道上轨 price_cross_lower = ta.crossunder(close, nw_lower) // 价格下穿通道下轨 rsi_is_overbought = rsi_val > rsi_overbought // RSI处于超买区间 rsi_is_oversold = rsi_val < rsi_oversold // RSI处于超卖区间 // 4. 合并策略条件 buy_signal = price_cross_lower and rsi_is_oversold sell_signal = price_cross_upper and rsi_is_overbought // 5. 绘制信号箭头 plotshape(buy_signal, title="买入信号", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.small) plotshape(sell_signal, title="卖出信号", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small) // 6. 设置预警条件 alertcondition(buy_signal, title="买入预警", message="价格下穿NW通道下轨 + RSI超卖") alertcondition(sell_signal, title="卖出预警", message="价格上穿NW通道上轨 + RSI超买")
关键解决细节
- 作用域统一:所有变量(RSI值、通道上下轨、条件判断)都在全局作用域声明,避免局部块的访问限制,确保条件可以自由合并。
- 逻辑精准匹配:严格对应你的策略要求:
- 买入:价格下穿通道下轨 同时 RSI处于超卖区间(若需要RSI交叉触发,可将
rsi_is_oversold替换为ta.crossover(rsi_val, rsi_oversold)) - 卖出:价格上穿通道上轨 同时 RSI处于超买区间
- 买入:价格下穿通道下轨 同时 RSI处于超卖区间(若需要RSI交叉触发,可将
- 兼容LuxAlgo逻辑:代码中用核平滑计算中轨,还原了LuxAlgo Nadaraya-Watson Envelope的核心平滑方式,保证通道形态与原指标一致。
如果你用的是LuxAlgo官方脚本
若直接调用LuxAlgo的Nadaraya-Watson Envelope指标,只需替换通道上下轨的计算部分:
// 调用LuxAlgo的NW Envelope(假设该指标输出upper/lower变量) [upper, mid, lower] = luxalgo_nadaraya_watson_envelope(nw_len, nw_dev) price_cross_upper = ta.crossover(close, upper) price_cross_lower = ta.crossunder(close, lower)
其余RSI计算、条件合并逻辑保持不变即可。
内容的提问来源于stack exchange,提问作者Leandro Martin Bado
相关产品推荐
相关产品推荐

