TradingView Pine Script:指定时间区间单一极值提取需求
解决TradingView Pine Script指定区间单一全局极值获取问题
要获取指定时间区间的单一全局最高/最低值(而非局部极值),核心是利用Pine Script的全局极值计算函数,或针对时间区间条件遍历筛选,以下分两种常见场景给出实现方案:
一、获取过去X天的全局最高/最低
如果你的需求是基于「过去N天」的区间,关键是将天数转换为对应时间周期下的K线数量,再用ta.highest()/ta.lowest()直接取全局极值:
//@version=5 indicator("过去X天全局极值", overlay=true) // 自定义参数 target_days = input.int(7, "目标天数") daily_bar_count = input.int(24, "单日K线数量", tooltip="根据当前图表周期调整:1小时周期填24,4小时填6,日线填1") // 计算回溯K线数量 lookback_bars = target_days * daily_bar_count // 获取区间全局最高/最低值 range_high = ta.highest(high, lookback_bars) range_low = ta.lowest(low, lookback_bars) // 绘制水平线 plot(range_high, color=color.red, title="区间最高", style=plot.style_linebr) plot(range_low, color=color.green, title="区间最低", style=plot.style_linebr)
说明
ta.highest()/ta.lowest()会直接返回指定长度内的全局极值,而非局部高低点,完美解决你当前的问题plot.style_linebr会让线条仅在目标区间内显示,若需要始终显示水平线,可改为plot.style_line
二、获取两个时间戳之间的全局最高/最低
如果需要精确指定起始和结束时间戳,可通过判断K线是否在目标区间内,再遍历筛选全局极值:
//@version=5 indicator("时间戳区间全局极值", overlay=true) // 自定义时间区间 start_ts = input.time(timestamp("20240101 00:00"), "起始时间") end_ts = input.time(timestamp("20240107 23:59"), "结束时间") // 判断当前K线是否在目标区间内 in_target_range = time >= start_ts and time <= end_ts // 存储全局极值(用var确保变量仅初始化一次) var float global_high = na var float global_low = na // 在最后一根K线时遍历区间内所有K线,计算极值 if barstate.islast // 初始化极值为区间内第一根K线的高低点 global_high = ta.valuewhen(in_target_range, high, 0) global_low = ta.valuewhen(in_target_range, low, 0) // 遍历所有历史K线,更新极值 for i = 1 to bar_index if in_target_range[i] if high[i] > global_high global_high = high[i] if low[i] < global_low global_low = low[i] // 绘制水平线(仅当极值有效时显示) plot(not na(global_high) ? global_high : na, color=color.red, title="区间最高") plot(not na(global_low) ? global_low : na, color=color.green, title="区间最低")
说明
- 用
barstate.islast确保仅在最后一根K线时执行遍历计算,避免重复运算 - 遍历逻辑会逐个检查区间内的K线,确保拿到的是真正的全局最高/最低值,而非局部波动的极值
内容的提问来源于stack exchange,提问作者cornisto
相关产品推荐
相关产品推荐

