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

如何修改TradingView ATH指标脚本以新增周期最低值及高低区间展示功能

支持周期高低区间标注的Pine Script实现
  • 保留原脚本所有原有功能(ATH标注、突破信号、高低位画线)
  • 新增同统计周期的*历史最低价位(ATL)*追踪逻辑,统计周期和设定的回溯年数完全一致
  • 标注标签同步展示周期最高值、周期最低值、高低区间差值,以及对应价位的出现日期、距当前K线的天数
indicator("回溯周期高低区间标注", overlay = true)

num_years = input.int(1, title = "回溯年数", minval = 1)

// 追踪历史最高ATH
var float ATH = high
var int ATH_time = time
var float[] ATH_vals = array.new_float()
var int[] ATH_time_vals = array.new_int()
var int[] ATH_time_change_vals = array.new_int()

ATH := math.max(ATH, high)
if ta.change(ATH) != 0
    ATH_time := time
    
array.unshift(ATH_vals, ATH)
array.unshift(ATH_time_vals, time)
array.unshift(ATH_time_change_vals, ATH_time)

// 新增追踪历史最低ATL
var float ATL = low
var int ATL_time = time
var float[] ATL_vals = array.new_float()
var int[] ATL_time_vals = array.new_int()
var int[] ATL_time_change_vals = array.new_int()

ATL := math.min(ATL, low)
if ta.change(ATL) != 0
    ATL_time := time
    
array.unshift(ATL_vals, ATL)
array.unshift(ATL_time_vals, time)
array.unshift(ATL_time_change_vals, ATL_time)

var float ATH1Y = na
var float ATL1Y = na

if barstate.isconfirmed
    search_time = time - 31536000000 * num_years
    // 查找周期内最高值
    for i = 0 to array.size(ATH_time_vals) - 1
        if array.get(ATH_time_vals, i) < search_time
            ATH1Y := array.get(ATH_vals, i)
            ATH1Y_time = array.get(ATH_time_change_vals, i)
            break
    // 查找周期内最低值
    for i = 0 to array.size(ATL_time_vals) - 1
        if array.get(ATL_time_vals, i) < search_time
            ATL1Y := array.get(ATL_vals, i)
            ATL1Y_time = array.get(ATL_time_change_vals, i)
            break
    // 拼接标签文本
    if not na(ATH1Y) and not na(ATL1Y)
        // ATH相关文本
        ay = year(ATH1Y_time)
        am = month(ATH1Y_time)
        ad = dayofmonth(ATH1Y_time)
        adays_ago = (time - ATH1Y_time) / 86400000
        // ATL相关文本
        iy = year(ATL1Y_time)
        im = month(ATL1Y_time)
        id = dayofmonth(ATL1Y_time)
        idays_ago = (time - ATL1Y_time) / 86400000
        // 区间值
        range_val = ATH1Y - ATL1Y
        date_text = str.tostring(ay) + "/" + str.tostring(am) + "/" + str.tostring(ad) + " 周期最高 : " + str.tostring(ATH1Y) + "\n距今天数 : " + str.tostring(math.round(adays_ago, 2)) + "\n" + str.tostring(iy) + "/" + str.tostring(im) + "/" + str.tostring(id) + " 周期最低 : " + str.tostring(ATL1Y) + "\n距今天数 : " + str.tostring(math.round(idays_ago, 2)) + "\n高低区间值 : " + str.tostring(math.round(range_val, 2))

        if ATH > ATH1Y and ATH[3] <= ATH1Y[3]
            label.new(x = bar_index[3], y = ATH[3], text = date_text, style = label.style_label_lower_right)

ATH_val = ATH > ATH1Y ? na : ATH1Y
ATL_val = ATL < ATL1Y ? na : ATL1Y

buy_signal = ATH > ATH1Y and ATH[3] <= ATH1Y[3]

plotshape(buy_signal, color = color.green, location = location.belowbar, size = size.small, style = shape.triangleup)

plot(ATH_val, title = "周期最高", style = plot.style_linebr, color = color.new(color.green, 0))
plot(ATL_val, title = "周期最低", style = plot.style_linebr, color = color.new(color.red, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:01