You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script v5技术求助:检测K线信号与通道突破

Pine Script 5 基于LuxAlgo Nadaraya-Watson Envelope的策略问题解决

前提:获取指标核心变量

首先要拿到LuxAlgo指标的上轨(绿线)、下轨(红线)、买卖信号变量。如果直接调用公开指标,可通过以下方式引用(假设指标为公开脚本):

// 引用LuxAlgo的Nadaraya-Watson Envelope指标
lwEnv = request.security("LuxAlgo/Nadaraya-Watson-Envelope", timeframe.period, [upper, lower, longSignal, shortSignal])
upper = lwEnv[0]
lower = lwEnv[1]
longSignal = lwEnv[2]  // 绿三角买入信号
shortSignal = lwEnv[3] // 红三角卖出信号

如果不想依赖外部指标,也可以用Pine原生函数实现核心逻辑:

// 自定义Nadaraya-Watson Envelope
length = 20
deviation = 1.5
nw = ta.nadarayaWatson(close, length)
upper = nw + ta.stdev(close, length) * deviation
lower = nw - ta.stdev(close, length) * deviation
// 复刻红绿三角信号(以价格穿越上下轨为例,可根据LuxAlgo实际逻辑调整)
longSignal = ta.crossover(close, lower)
shortSignal = ta.crossunder(close, upper)

问题1:检测最近X根K线内是否存在红绿三角信号

假设要检测最近5根K线内的信号,提供两种实现方式:

方法1:用ta.barssince判断信号距离

X = 5 // 自定义检测的K线数量
// 最近X根内存在绿三角买入信号
hasRecentLong = ta.barssince(longSignal) <= X and ta.barssince(longSignal) != na
// 最近X根内存在红三角卖出信号
hasRecentShort = ta.barssince(shortSignal) <= X and ta.barssince(shortSignal) != na
  • ta.barssince(signal)返回上次信号出现至今的K线数,若最近X根内出现过,该值会≤X且不为空值。

方法2:用ta.highest判断信号是否存在

X = 5
// 最近X根内有买入信号(信号为true时取1,否则0,取最大值判断是否有1)
hasRecentLong = ta.highest(longSignal ? 1 : 0, X) == 1
// 最近X根内有卖出信号
hasRecentShort = ta.highest(shortSignal ? 1 : 0, X) == 1

这种方式更简洁,适合批量判断多周期信号。


问题2:判断收盘价是否收在绿线(上轨)上方或红线(下轨)下方

直接通过价格与上下轨的比较即可实现:

// 收盘价收在绿线(上轨)上方
closeAboveUpper = close > upper
// 收盘价收在红线(下轨)下方
closeBelowLower = close < lower

如果需要确认是实体突破(而非盘中穿越),可叠加开盘价条件:

// 实体突破上轨(收盘价>上轨且开盘价<上轨)
bullishBreakout = close > upper and open < upper
// 实体突破下轨(收盘价<下轨且开盘价>下轨)
bearishBreakout = close < lower and open > lower

整合到策略的示例代码

//@version=5
strategy("NW Envelope 策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000)

// 1. 定义NW Envelope核心参数与变量
length = input.int(20, "NW长度")
deviation = input.float(1.5, "偏差值")
X = input.int(5, "检测最近X根K线的信号")

nw = ta.nadarayaWatson(close, length)
upper = nw + ta.stdev(close, length) * deviation
lower = nw - ta.stdev(close, length) * deviation

// 2. 生成红绿三角信号
longSignal = ta.crossover(close, lower)
shortSignal = ta.crossunder(close, upper)

// 3. 检测最近X根内的信号
hasRecentLong = ta.highest(longSignal ? 1 : 0, X) == 1
hasRecentShort = ta.highest(shortSignal ? 1 : 0, X) == 1

// 4. 判断收盘价位置
closeAboveUpper = close > upper
closeBelowLower = close < lower

// 5. 入场条件(结合两个问题的结果)
longCondition = hasRecentLong and closeBelowLower
shortCondition = hasRecentShort and closeAboveUpper

// 执行交易
if (longCondition)
    strategy.entry("多单", strategy.long)
if (shortCondition)
    strategy.entry("空单", strategy.short)

// 绘制指标与信号
plot(upper, color=color.new(color.green, 0), title="上轨")
plot(lower, color=color.new(color.red, 0), title="下轨")
plotshape(longSignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

内容的提问来源于stack exchange,提问作者DonBastardoFX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:46:08