如何在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
相关产品推荐
相关产品推荐

