在 TradingView 的 Pine Script 中,要定义 5分钟图表(5-min Chart) 上的脉冲波段/推动浪(Impulse Leg) 并判定系统进入就绪/激活状态(Armed),核心逻辑通常包含三个步骤:判定5分钟周期、通过 ATR 或价格动量量化脉冲波、以及通过价格回调幅度或维持在特定区间来激活 Armed 状态。 [1]
以下是为您编写的 Pine Script v5 核心代码逻辑与实现方案:
//@version=5
indicator("5分图脉冲与Armed状态定义", overlay=true)
// ==========================================
// 1. 严格限制或检测 5分钟时间周期
// ==========================================
is_5min = (timeframe.isintraday and timeframe.multiplier == 5)
// ==========================================
// 2. 定义脉冲波 (Impulse Leg)
// ==========================================
// 使用 ATR (平均真实波幅) 来量化脉冲的强度,避免死板的固定点数
atr_length = input.int(14, title="ATR 周期")
atr_multiplier = input.float(2.0, title="脉冲 ATR 倍数限制")
bars_max = input.int(5, title="脉冲形成最大 K 线数")
current_atr = ta.atr(atr_length)
// 简单的多头脉冲示例:在指定 K 线数量内,价格涨幅超过了 ATR 的特定倍数
// 寻找局部最低点到当前最高点的空间
var float leg_start_price = na
var int leg_start_bar = na
var bool is_impulse_active = false
// 检测突破:当前价格相比 X 根 K 线前大幅上涨
price_change = close - open[bars_max - 1]
is_bullish_impulse = is_5min and (price_change > current_atr * atr_multiplier)
// ==========================================
// 3. 定义就绪状态 (Armed)
// ==========================================
// 当脉冲确立后,价格进入高位震荡/蓄势阶段(Base Building),且未跌破关键支撑,则触发 Armed
var bool is_armed = false
var float impulse_high = na
var float invalidation_level = na
if is_bullish_impulse
is_impulse_active := true
is_armed := true // 脉冲确立,直接激活 Armed 状态
impulse_high := ta.highest(high, bars_max)
invalidation_level := low[bars_max - 1] // 以脉冲起点作为失效位
// Armed 状态下的维持与失效条件
max_retracement_pct = input.float(0.5, title="最大回调比例 (斐波那契 50%)")
if is_armed
// 条件 A:如果价格向下跌破了脉冲波幅的 50% 或起点,则 Armed 状态解除(Invalidated)
allowed_retracement = impulse_high - (impulse_high - invalidation_level) * max_retracement_pct
if close < allowed_retracement or close < invalidation_level
is_armed := false
is_impulse_active := false
// 条件 B:如果创了新高,更新脉冲高点
if high > impulse_high
impulse_high := high
// ==========================================
// 4. 背景与信号可视化
// ==========================================
// 当处于 5分钟图表的 Armed 状态时,背景显示浅绿色
bgcolor(is_armed ? color.new(color.green, 90) : na)
// 标记脉冲确立瞬间
plotshape(is_bullish_impulse, title="Impulse Leg Formed", style=shape.triangleup, location=location.belowbar,
// 绘制失效线
plot(is_armed ? invalidation_level : na, title="失效线", color=color.red, style=plot.style_linebr)
核心逻辑拆解
1. 周期锁定 (is_5min)
通过 timeframe.isintraday 和 timeframe.multiplier == 5 确保此脚本的逻辑只在5分钟图表上生效。如果切换到日线或1小时图,逻辑会自动关闭,防止多周期策略混乱。
2. 脉冲波定义 (Impulse Leg)
在量化交易中,不建议使用绝对点数(如“上涨50美金”)来定义脉冲。本代码采用
ATR(平均真实波幅) 作为过滤器: [
1,
2,
3]
- 当价格在短短几根 K 线内(
bars_max),其涨幅超过了 ATR * 倍数,系统就会判定这是一根强力的推动浪/脉冲波(Impulse Leg)。 [1]
3. 就绪状态判定 (Armed)
参考了主流机构及公开策略(如经典 ZigZag 架构与状态追踪系统)的工业级设计: [
1,
2]
- 激活(Armed):一旦检测到合规的 Impulse 形成,状态立即转为
Armed = true。 - 维持(Armed 保持):价格随后的回调(Base Building 蓄势期)必须保持在健康范围内(例如:不能跌破脉冲总幅度的 50% 斐波那契位)。
- 失效(Invalidated):一旦价格跌破蓄势低点或脉冲起点,
Armed 状态立刻解除。 [1, 2, 3]
如果您希望进一步完善这个脚本,请告诉我:
- 您倾向于用什么技术指标来辅助定义脉冲(例如:特定的 EMA 均线突破、Volume 交易量放大 还是单纯的 K 线实体大小)?
- 进入
Armed 状态后,您希望触发怎样的入场信号(例如:突破脉冲高点时入场,还是回踩特定均线入场)? [1]