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

Pine Script实现仅标记当前绝对历史高低点 隐藏被突破旧极值

问题根因

原代码采用逐bar判断逻辑,会给每一根创下「截止到该bar位置历史新高/新低」的K线都打上标记,未判断该极值是否为全数据集范围内的最终极值,因此旧标记不会被自动清除。

修正方案

先在图表最后一根K线位置计算全加载范围内的全局最高、最低值及对应的K线位置,仅在匹配全局最终极值的K线上打标记即可,旧极值被突破后标记会自动移除。

修正后的完整代码:

//@version=5
indicator(title="全局历史高低点标记", shorttitle="全局高低点", overlay=true)

// 定义变量存储全局极值和对应K线索引
var float finalHigh = na
var int finalHighBar = na
var float finalLow = na
var int finalLowBar = na

// 运行到最后一根K线时,计算全数据集的极值和对应位置
if barstate.islast
    finalHigh := ta.highest(high, bar_index + 1)
    finalHighBar := ta.highestbars(high, bar_index + 1) + bar_index
    finalLow := ta.lowest(low, bar_index + 1)
    finalLowBar := ta.lowestbars(low, bar_index + 1) + bar_index

// 仅在全局极值对应的K线位置显示标记
plotchar(bar_index == finalHighBar, title="历史最高点", char="*", location=location.abovebar, size=size.normal, color=color.lime)
plotchar(bar_index == finalLowBar, title="历史最低点", char="*", location=location.belowbar, size=size.normal, color=color.red)

逻辑说明

  • ta.highest()/ta.lowest()传入长度参数bar_index + 1,代表统计范围覆盖从图表第一根K线到当前最后一根K线的全部行情数据
  • ta.highestbars()/ta.lowestbars()会返回极值距离当前K线的偏移量,加上当前K线的绝对索引bar_index,就能得到极值所在K线的准确位置
  • 仅当K线索引完全匹配全局极值位置时才会渲染标记,不会给中途创新高、后续被突破的K线保留标记
  • 缩放、平移图表加载更多历史/最新K线时,脚本会自动重新计算全局极值位置,旧标记自动清除,新极值点自动显示
  • 如果需要标记所有价格和全局极值相等的K线(比如多个平头顶/平脚底的情况),将判断条件替换为high == finalHigh、low == finalLow即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:54:17