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

如何在Pine Script中获取全序列最高价用于Min-Max归一化?

在Pine Script中实现全局最高价序列与Min-Max归一化

问题核心

ta.highest()默认仅计算当前K线及之前的区间最高价,无法直接获取整个序列的全局极值。要实现所有元素替换为全局最高价,并完成0-1区间的Min-Max归一化,需要利用Pine Script的变量持久化特性或数组来存储全局极值。

解决方案1:利用var变量与最后一根K线计算全局极值

这种方法通过在最后一根K线时计算整个历史序列的长度,进而获取全局最高/最低价,再将该值广播到所有K线:

//@version=5
indicator("Global High Series & Normalization", overlay=false)

// 获取全局最高价的函数
get_global_highest(data) =>
    var float global_high = na
    // 仅在最后一根K线时计算整个序列的最高价
    if barstate.islast
        // ta.barssince(barstate.isfirst) + 1 得到历史总K线数
        global_high := ta.highest(data, ta.barssince(barstate.isfirst) + 1)
    global_high

// 获取全局最低价的函数
get_global_lowest(data) =>
    var float global_low = na
    if barstate.islast
        global_low := ta.lowest(data, ta.barssince(barstate.isfirst) + 1)
    global_low

// 计算全局极值
global_high = get_global_highest(close)
global_low = get_global_lowest(close)

// 生成全为全局最高价的序列
all_global_high_series = global_high

// Min-Max归一化计算
normalized_price = (close - global_low) / (global_high - global_low)

// 可视化输出
plot(all_global_high_series, color=color.red, title="All Global High")
plot(normalized_price, color=color.blue, title="Normalized (0-1)", display=display.data_window)

解决方案2:使用数组存储全序列数据计算极值

如果需要更灵活地处理数据(比如自定义时间范围),可以用数组存储所有K线数据,再计算数组的最大/最小值:

//@version=5
indicator("Global Extremes with Arrays", overlay=false)

// 获取全局最高/最低价的函数
get_global_extremes(data) =>
    var array<float> data_array = array.new_float()
    // 每根K线将数据加入数组
    array.push(data_array, data)
    
    global_high = na
    global_low = na
    // 最后一根K线时计算数组极值
    if barstate.islast
        global_high := array.max(data_array)
        global_low := array.min(data_array)
    [global_high, global_low]

// 获取全局极值
[global_high, global_low] = get_global_extremes(close)

// 将最后一根K线计算出的极值广播到所有K线
global_high_all = valuewhen(barstate.islast, global_high, 0)
global_low_all = valuewhen(barstate.islast, global_low, 0)

// 生成全最高价序列
all_high_series = global_high_all

// 归一化计算
normalized = (close - global_low_all) / (global_high_all - global_low_all)

// 输出
plot(all_high_series, color=color.red, title="All Global High")
plot(normalized, color=color.blue, title="Normalized Price")

关键说明

  • barstate.islast:标记当前是否为最后一根K线,此时可以获取完整的历史序列长度
  • var变量:用于持久化存储全局极值,确保所有K线都能访问到最后计算出的结果
  • Min-Max归一化公式:(当前值 - 全局最小值) / (全局最大值 - 全局最小值),将数值线性映射到0-1区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:56:05