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

在Pine脚本中识别条件触发后8个符合要求的前期高点

解决Pine脚本中捕获特定历史高点的问题

核心思路

  1. 锁定触发信号发生时的参考高点(即触发信号前一根K线的high[1])
  2. 从信号位置向前遍历历史K线,筛选出所有高点高于参考值的K线,收集最近的8个目标高点
  3. 仅在最近一次触发条件为真时,保留并引用这些高点

代码实现

//@version=5
indicator("捕获目标历史高点", overlay=true)

// 1. 定义触发条件(替换成你实际的触发逻辑)
triggerCondition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))

// 2. 存储参考高点和符合条件的高点数组
var float refHigh = na
var array<float> targetHighs = array.new_float()

// 3. 触发时重置并收集目标高点
if (triggerCondition)
    refHigh := high[1] // 记录触发前一根K线的高点
    array.clear(targetHighs) // 清空旧数据
    
    // 向前遍历历史K线,收集符合条件的高点(最多遍历200根,可按需调整)
    for i = 1 to 200
        currentHigh = high[i]
        if currentHigh > refHigh
            array.unshift(targetHighs, currentHigh) // 将符合条件的高点插入数组头部(保证顺序是从近到远)
            if array.size(targetHighs) >= 8 // 收集够8个就停止遍历
                break

// 4. 可视化输出示例(在图表上标记收集到的高点)
if array.size(targetHighs) > 0
    for i = 0 to array.size(targetHighs) - 1
        var label[] highLabels = array.new_label()
        targetBarIndex = bar_index - ta.barssince(triggerCondition) - (i + 1)
        if i < array.size(highLabels)
            label.set_xy(array.get(highLabels, i), targetBarIndex, array.get(targetHighs, i))
            label.set_text(array.get(highLabels, i), str.tostring(array.get(targetHighs, i)))
        else
            array.push(highLabels, label.new(targetBarIndex, array.get(targetHighs, i), str.tostring(array.get(targetHighs, i)), color=color.green, textcolor=color.white))

// 5. 在最后一根K线显示收集到的高点数据
if barstate.islast and array.size(targetHighs) > 0
    resultText = "最近触发后捕获的高点:\n"
    for i = 0 to math.min(array.size(targetHighs)-1,7)
        resultText := resultText + str.tostring(array.get(targetHighs, i)) + "\n"
    label.new(bar_index, high, resultText, color=color.yellow, textcolor=color.black, style=label.style_label_left)

关键细节说明

  • 数组的作用:用array.unshift()插入数据,保证数组前8个元素是距离触发点最近的符合条件的高点,解决了valuewhen()只能单独取第n个值的局限
  • 触发时重置:每次触发条件成立时,都会清空旧数组并重新收集数据,确保只保留最近一次触发后的有效高点
  • 遍历范围控制:示例中限制遍历200根K线,可根据需要调整数值,避免过度遍历影响脚本运行性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24