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

如何在Pine Script v6中计算并显示预定义区间的单根最高/最低价

解决方案:Pine Script v6 区间/趋势段高低点计算与Supertrend集成

一、修正固定区间高低点计算(解决元组赋值错误)

Pine Script v6不支持元组解构赋值,直接用内置的ta.highest()和ta.lowest()函数计算区间高低即可,无需自定义循环函数,效率更高且避免语法错误。

完整代码(固定区间+Supertrend集成版本)

indicator("区间高低点标记 + Supertrend集成", overlay=true)

// --- 用户设置 ---
// 枢轴点参数
lb = input.int(5, title="左侧K线数")
rb = input.int(5, title="右侧K线数")
// 固定区间参数
vertical_interval = input.int(20, title="区间K线数量", minval=1)
// Supertrend参数
src = input(close, title="Supertrend数据源")
length = input.int(10, title="Supertrend周期")
multiplier = input.float(3.0, title="Supertrend乘数")

// --- 计算枢轴点(保留原逻辑)---
mb = lb + rb + 1
pivot_high = ta.highestbars(high, mb) == -lb ? high[lb] : na
pivot_low = ta.lowestbars(low, mb) == -lb ? low[lb] : na

// --- 固定区间高低点计算 ---
// 标记区间结束时机
is_interval_end = bar_index % vertical_interval == vertical_interval - 1
// 计算当前区间的最高/最低价
interval_high = ta.highest(high, vertical_interval)
interval_low = ta.lowest(low, vertical_interval)

// 仅在区间结束时保存并标记高低点(避免重复)
var float saved_interval_high = na
var float saved_interval_low = na
if is_interval_end
    saved_interval_high := interval_high
    saved_interval_low := interval_low
    label.new(bar_index, saved_interval_high, str.tostring(saved_interval_high, "#.##"), 
              style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.small)
    label.new(bar_index, saved_interval_low, str.tostring(saved_interval_low, "#.##"), 
              style=label.style_label_up, color=color.teal, textcolor=color.white, size=size.small)

// --- 绘制垂直分隔线 ---
if bar_index % vertical_interval == 0
    line.new(x1=bar_index, y1=ta.lowest(low, 50), x2=bar_index, y2=ta.highest(high, 50), 
             width=1, color=color.blue, style=line.style_dashed)

// --- 绘制枢轴点(保留原逻辑)---
plotshape(pivot_high, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, offset=-lb)
plotshape(pivot_low, style=shape.triangleup, location=location.belowbar, color=color.lime, size=size.tiny, offset=-lb)

// --- Supertrend趋势段高低点计算 ---
// 计算Supertrend核心值
atr = ta.atr(length)
up = src - multiplier * atr
dn = src + multiplier * atr
trend = 1
trend := ta.close > dn[1] ? -1 : ta.close < up[1] ? 1 : trend[1]
supertrend = trend == 1 ? up : dn

// 标记趋势方向变化点
trend_changed = trend != trend[1]
// 跟踪当前趋势段的高低点
var float trend_high = na
var float trend_low = na

if trend_changed
    // 保存上一段趋势的高低点并标记
    label.new(bar_index[1], trend_high, str.tostring(trend_high, "#.##"), 
              style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)
    label.new(bar_index[1], trend_low, str.tostring(trend_low, "#.##"), 
              style=label.style_label_up, color=color.lime, textcolor=color.white, size=size.small)
    // 重置当前趋势的高低点跟踪
    trend_high := high
    trend_low := low
else
    // 实时更新当前趋势的最高/最低价
    trend_high := math.max(trend_high, high)
    trend_low := math.min(trend_low, low)

// 绘制Supertrend线
plot(supertrend, color=trend == 1 ? color.green : color.red, linewidth=2)

二、关键修正与逻辑说明

  1. 解决元组赋值错误:放弃自定义多返回值函数,直接用ta.highest()/ta.lowest()计算区间高低,彻底规避语法报错。
  2. 区间高低点去重:通过is_interval_end判断区间结束时机,仅在此时生成标记,确保每个区间只显示一组高低点数据。
  3. Supertrend趋势段集成:
    • 通过trend变量的变化识别趋势反转点
    • 反转时保存上一段趋势的高低点并重置当前趋势的跟踪变量
    • 非反转时段实时更新当前趋势的最高/最低价

三、使用方式

  • 固定区间模式:每vertical_interval根K线结束时,自动标记该区间的最高/最低价
  • Supertrend趋势模式:每当Supertrend方向反转时,自动标记上一段趋势的最高/最低价
  • 保留原枢轴点标记,可同时对比三种高低点数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:43:09