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

Pine Script中如何获取average指标的绝对最大与最小值?

解决Pine Script中基于整个周期绝对极值的归一化问题

编写的Pine Script指标中,average_normalized本应基于显示周期内average的绝对最大、最小值归一化,使2014年的局部最大值对应1,但当前代码中ta.max()/ta.min()取的是截至当前K线的历史极值,导致初始值即为1且多次触发,不符合预期。

问题根源

ta.max(average)和ta.min(average)默认仅计算从第一根K线到当前K线的历史极值,而非整个显示周期的绝对极值。第一根K线因只有单个值,归一化结果必然为1,后续每根K线都会更新极值,导致归一化值频繁波动。

解决方案

利用Pine Script的var关键字定义全局持久化变量,累积整个周期的绝对极值:

  • 用var初始化全局最大/最小值为极端值(负无穷/正无穷),确保所有average值都能参与对比
  • 每根K线执行时,对比当前average与全局极值,更新全局变量
  • 基于全局绝对极值完成归一化计算

修改后的代码

indicator("Risk", overlay = false)

fiftyD = ta.sma(close, 50)
fiftyW = ta.sma(close, 350)
average = fiftyD/fiftyW * math.pow(bar_index, 0.350) 

// 初始化全局极值:var确保仅在第一根K线执行初始化
var float global_max = float(-math.inf)
var float global_min = float(math.inf)

// 逐K线更新全局极值,累积整个周期的绝对最大/最小值
global_max := math.max(global_max, average)
global_min := math.min(global_min, average)

// 归一化计算,加1e-10避免分母为0的极端情况
average_normalized = (average - global_min) / (global_max - global_min + 1e-10)

plot(average_normalized)

关键说明

  • var变量在脚本加载时仅初始化一次,后续K线执行时保留之前的数值,因此能持续累积整个周期的极值
  • 分母添加1e-10是为了处理所有average值相等的极端情况,避免触发除以0的错误
  • 当图表加载新的历史K线时,全局极值会自动更新,始终覆盖当前显示的全部周期数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:55:16