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

如何在TradingView年最高K线上仅绘制单个❄并动态更新

年度高点单标记解决方案(TradingView Pine Script)

需求

在TradingView的年度最高K线上绘制字符'❄',新年度高点产生时自动删除旧标记,始终仅显示一个'❄'。

现有代码

study("High Yearly", overlay=true)

hyl = input(true, title="High Yearly Line")
yhigh = security(tickerid, '12M', high) 
//plot(hyl and yhigh ? yhigh :na , title="Yearly_High",style=circles, color=yellow, linewidth=3) 
plotchar(hyl and yhigh ? yhigh :na , char='❄')

问题

运行上述代码后,图表上出现多个'❄'标记,旧标记未被自动删除。

问题原因

原代码通过security函数获取年度高点时,会为当前年度内所有等于年度高点的K线返回该数值,导致每根符合条件的K线都会绘制标记,最终出现重复标记。

修正代码

//@version=5
indicator("年度高点标记", overlay=true)

// 开关:控制是否显示标记
show_mark = input(true, title="显示年度高点标记")

// 检测年度时间框架的切换(每年第一个K线触发)
year_changed = ta.change(time("12M"))

// 用var变量持久化当前年度高点,年度切换时重置
var float current_year_high = na
if year_changed
    current_year_high := high
else
    current_year_high := ta.max(current_year_high, high)

// 判断当前K线是否是年度新高点
is_new_high = high == current_year_high and high > ta.valuewhen(year_changed, high, 0)

// 仅在新高K线显示标记,其他情况返回na自动隐藏旧标记
plotchar(show_mark and is_new_high ? high : na, char='❄', location=location.belowbar, color=color.yellow, size=size.small)

代码说明

  • var float current_year_high: 用var声明的变量会保留跨K线的状态,年度切换时重置为当前K线高点,后续不断更新为年度内的最高值。
  • year_changed: 检测年度时间框架的变更,用于触发高点重置逻辑。
  • is_new_high: 仅当当前K线高点等于年度高点,且高于年度初始高点时,判定为新的年度高点,确保只在新高产生的K线绘制标记。
  • plotchar: 仅在满足新高条件时输出标记位置,其他K线返回na,旧的标记会自动消失,始终只显示最新的年度高点标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:02:13