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

Pine Script中ta.valuewhen带[depth]索引的逻辑疑问

关于Pine Script中ta.valuewhen与[depth]索引的疑问解答

问题背景

我能理解ta.valuewhen的基础用法,比如官方示例:

// 获取第二次最近交叉时的收盘价
plot(ta.valuewhen(ta.cross(slow, fast), close, 1))

但在一段寻找背离高点的代码中,对[depth]索引的用法感到困惑:

depth = input(2, 'Fractal Depth')
_src = Dinput1  // 预先计算的随机指标D线序列
_high = high
_low = low
top_fractal = ta.highest(_src, depth * 2 + 1) == _src[depth]
prev_top_fractal = ta.valuewhen(top_fractal, _src[depth], 0)[depth]
prev_high = ta.valuewhen(top_fractal, _high[depth], 0)[depth]

我的疑问:

  • 当depth=2时,top_fractal会检查最近5根K线,若中间(往前数第2根)K线是_src最大值则为true。
  • 按文档说明ta.valuewhen应返回符合条件的对应值,但为什么还要添加[depth]索引?难道它返回的是序列而非单个值?
  • 我知道ta.valuewhen(...,0)取最近一次满足条件的值,但加[depth]获取前高的逻辑完全搞不懂,难道返回的是包含5根K线的序列?

核心解答

1. 先明确:ta.valuewhen返回的是序列值

它不是返回单个固定值,而是在每一根K线都生成一个值:只要当前K线之前存在满足条件的事件,它就返回对应事件的目标值,形成一个持续更新的序列。比如最近一次满足条件的事件是Bar X,那么从Bar X到下一个满足条件的Bar Y之间的所有K线,ta.valuewhen都会返回Bar X对应的目标值。

2. 解析top_fractal的触发逻辑

当depth=2时:

  • ta.highest(_src, 5)取最近5根K线的_src最大值
  • 对比的是_src[depth],也就是当前K线往前数第2根K线的_src值
  • 所以top_fractal为true时,意味着:当前K线往前数第2根K线,是最近5根K线里的_src最高点(也就是这个位置是一个“分形高点”)

3. 为什么要加[depth]索引?

看prev_top_fractal = ta.valuewhen(top_fractal, _src[depth], 0)[depth]这一行:

  • 第一步:ta.valuewhen(top_fractal, _src[depth], 0)会返回最近一次分形触发时,对应的分形高点的_src值。比如最近一次top_fractal为true是在Bar Y,那么这个分形高点是Bar Y-2,这里取的就是Bar Y-2的_src值,并且这个值会在Bar Y之后的所有K线中保持,直到下一个分形触发。
  • 第二步:加[depth](也就是[2]),是取当前K线往前数第2根K线时的ta.valuewhen返回值。而当前K线往前数第2根K线,还没到最近一次分形触发的节点(因为分形触发时,对应的分形点本身就在触发K线往前数depth的位置),所以这个位置的ta.valuewhen返回的是上一次分形高点的_src值——这正是我们要找的“前高”,用来和当前分形值对比判断背离。

举个具体例子(depth=2):

  1. 第一个分形在Bar 10触发(top_fractal[10] = true),对应的分形高点是Bar 8,_src值为S1。从Bar 10开始,ta.valuewhen(...,0)返回S1。
  2. 第二个分形在Bar 20触发(top_fractal[20] = true),对应的分形高点是Bar 18,_src值为S2。从Bar 20开始,ta.valuewhen(...,0)返回S2。
  3. 现在在Bar 22执行ta.valuewhen(...,0)[2],就是取Bar 20(22-2)时的ta.valuewhen值?不对,实际是取Bar 20往前数2根的Bar 18的ta.valuewhen值——而Bar 18还没到第二个分形触发的Bar 20,所以此时返回的是S1,正好是上一个分形的高点值,和当前分形的S2形成对比。

总结:加[depth]索引,本质是通过序列偏移,获取最近一次分形触发之前的那个分形值,也就是用来判断背离的“前高”。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:05:19