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

Pine Script实现回溯更低收盘价K线数及ta.valuewhen()异常求解

Pine Script 计算每根K线回溯至更低收盘价的K线数量问题

需求说明

需要编写Pine Script脚本,计算每根K线需要回溯多少根才能找到收盘价更低的K线,且每根K线需独立完成计算。

给定时间序列

(bar_index,(open,close)): [(0,(1,2)),(1,(2,4)),(2,(4,8)),(3,(8,8)),(4,(8,5)),(5,(5,3)),(6,(3,1)),(7,(1,5)),(8,(5,9)),(9,(9,8))]

期望返回结果

(bar_index,result): [(0,na),(1,1),(2,1),(3,2),(4,3),(5,5),(6,na),(7,1),(8,1),(9,2)]

尝试的错误代码

lower_close(src) => ta.valuewhen(close<src, bar_index, 1)
var a = close
plot(lower_close(a))

错误结果

(bar_index,result): [(0,1),(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1)]

问题分析

  1. var声明错误:var a = close会让变量a仅在第一根K线初始化一次,后续不再更新,导致所有计算都基于第一根K线的收盘价,而非当前K线的收盘价。
  2. 逻辑偏差:ta.valuewhen仅返回满足条件的K线索引,但需求是计算当前K线与目标K线的索引差值(即回溯数量),而非直接返回索引值。
  3. 无边界处理:未处理找不到更低收盘价的情况(如首根K线或当前收盘价为历史最低),无法返回na。

解决代码

//@version=5
indicator("回溯至更低收盘价的K线数量", overlay=false)

getLowerCloseBacktrack() =>
    float result = na
    // 从当前K线的前一根开始向前遍历
    for i = 1 to bar_index
        prev_close = close[i]
        if prev_close < close
            result = i  // i即为回溯的K线数量
            break  // 找到第一个目标后终止循环
    result

backtrack_count = getLowerCloseBacktrack()
plot(backtrack_count, title="回溯数量", color=color.blue, linewidth=2)

代码说明

  • 使用for循环从当前K线的前1根开始逐步向前遍历,直到找到第一个收盘价小于当前收盘价的K线。
  • 找到目标K线后,记录回溯的数量(i即往前的K线根数)并终止循环,减少不必要的计算。
  • 若遍历完所有历史K线仍未找到更低收盘价,保持结果为na,符合需求。
  • 移除了错误的var声明,确保每根K线都使用自身的收盘价进行计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:48:26