在 TradingView 的 Pine Script 中,定义一个 5分钟图表上的脉冲波(Impulse Leg / 强劲趋势波段),通常需要结合动能(Momentum)、成交量(Volume)和K线实体大小(Body Size)。脉冲波的核心特征是:价格在短时间内朝一个方向剧烈运动,伴随大实体K线和高成交量。
以下是为您编写的 Pine Script 完整指标代码。它会自动锁定 5分钟周期(无论您当前处于什么图表周期),并利用 ATR(平均真实波幅) 和 成交量均线 来科学定义和标记脉冲波。
Pine Script V5 完整源码
pinescript
//@version=5
indicator("5分钟脉冲波检测器 (5m Impulse Leg)", overlay=true)
// --- 输入参数 ---
int atrLength = input.int(14, title="ATR 周期")
float multThresh = input.float(1.5, title="K线实体大小倍数 (相对ATR)")
int volLength = input.int(20, title="成交量均线周期")
float volThresh = input.float(1.2, title="成交量放大倍数")
// --- 核心逻辑函数 ---
// 该函数用于在指定的 5分钟周期(5m)内计算脉冲条件
calcImpulse() =>
// 计算K线实体大小(绝对值)和 ATR
bodySize = math.abs(close - open)
atrValue = ta.atr(atrLength)
// 计算成交量及其均线
volMa = ta.sma(volume, volLength)
// 脉冲波定义条件:
// 1. K线实体大于 ATR 的指定倍数(证明价格波动剧烈)
// 2. 当前成交量大于成交量均线的指定倍数(证明有资金强力推动)
isBigBody = bodySize > (atrValue * multThresh)
isHighVol = volume > (volMa * volThresh)
// 判断方向:1 为看涨脉冲,-1 为看跌脉冲,0 为无脉冲
int direction = 0
if isBigBody and isHighVol
direction := (close > open) ? 1 : -1
direction
// --- 安全跨周期调用 (确保锁定 5分钟图表) ---
// 使用 request.security 保证即使用户切换到 1分钟或15分钟图表,逻辑依然在 5分钟上执行
// barmerge.lookahead_off 确保没有未来函数
int impulseDir = request.security(syminfo.tickerid, "5", calcImpulse(), barmerge.gaps_off, barmerge.lookahead_off)
// --- 信号触发与绘图 ---
bool bullishImpulse = (impulseDir == 1)
bool bearishImpulse = (impulseDir == -1)
// 在图表上通过背景色和标签标记脉冲波
bgcolor(bullishImpulse ? color.new(color.green, 85) : na, title="看涨脉冲背景")
bgcolor(bearishImpulse ? color.new(color.red, 85) : na, title="看跌脉冲背景")
plotshape(bullishImpulse, title="看涨脉冲标记", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, text="5M 脉冲")
plotshape(bearishImpulse, title="看跌脉冲标记", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, text="5M 脉冲")
Use code with caution.
代码逻辑拆解与核心定义
在量化交易中,单根或连续几根强劲的 5分钟K线即可构成脉冲波。代码中使用了两个最客观的维度来定义它:
- 价格爆发(Price Expansion):
单纯看K线点数(Pips/Ticks)是不准确的,因为市场在不同时段的波动率不同。代码采用bodySize > (ta.atr(14) * 1.5)。这意味着,当前 5分钟 K线的实体部分(不含上下影线)必须大于过去 14根K线平均波幅的 1.5 倍。 - 成交量配合(Volume Validation):
真正的脉冲波必须有机构或大资金推波助澜。代码采用volume > (ta.sma(volume, 20) * 1.2)。这意味着当前的成交量必须超过过去 20根K线平均成交量的 1.2 倍。 - 跨周期锁定(Timeframe Lock):
通过request.security(syminfo.tickerid, "5", ...),这段脚本被强制锁死在 5分钟("5") 周期运行。
