如何在Pinescript中获取最近15根K线内贴近当前价的上方峰值
修正后的Pinescript代码实现需求
问题分析
原代码的核心问题在于:
- 错误使用
ta.valuewhen,无法遍历收集最近15根K线内的所有符合条件峰值; - 初始值设置不合理,导致无符合条件峰值时仍绘制收盘价;
- 循环逻辑无法正确比较所有峰值与当前收盘价的差值。
修正后的代码
//@version=5 indicator(title="Closest Higher Peak in 15 Bars", overlay = true) // 当前最新收盘价 current_close = close // 初始化数组,用于存储最近15根K线内符合条件的峰值价格 var float[] valid_peaks = array.new_float() // 每根新K线生成时,重新收集符合条件的峰值 if barstate.is_new array.clear(valid_peaks) // 遍历最近15根K线(从当前往前数第1到15根) for i = 1 to 15 // 判断第i根K线是否为局部高点(比左右相邻K线收盘价都高) is_local_peak = close[i] > close[i-1] and close[i] > close[i+1] // 仅收集高于当前收盘价的峰值 if is_local_peak and close[i] > current_close array.push(valid_peaks, close[i]) // 从符合条件的峰值中筛选出与当前收盘价最接近的价格 closest_peak = na if array.size(valid_peaks) > 0 min_price_diff = float.max // 遍历所有有效峰值,计算差值并记录最小差值对应的峰值 for peak_price in valid_peaks price_diff = peak_price - current_close if price_diff > 0 and price_diff < min_price_diff min_price_diff = price_diff closest_peak = peak_price // 绘制结果:仅在存在符合条件峰值时显示 plot(closest_peak, style = plot.style_linebr, color=color.red, title="Closest Higher Peak")
代码说明
- 峰值判断:直接在循环中检查每根过去K线是否为局部高点(
close[i] > close[i-1] and close[i] > close[i+1]),确保准确识别所有峰值。 - 有效峰值收集:使用数组存储所有高于当前收盘价的峰值,避免遗漏。
- 筛选最接近峰值:遍历数组计算每个峰值与当前收盘价的差值,找出差值最小的峰值作为目标价格。
- 无峰值处理:当没有符合条件的峰值时,返回
na,不会绘制无效数据。
内容的提问来源于stack exchange,提问作者Roboman Robo
相关产品推荐
相关产品推荐

