PineScript中ta.pivotlow直接调用与结合ta.valuewhen调用的差异原因问询
为什么
ta.pivotlow()和ta.valuewhen(ta.pivotlow(), ..., 0)的结果有差异? 这个困惑其实是因为这两个函数的触发逻辑和返回行为完全不同,我来给你拆解清楚:
1. ta.pivotlow(low, leftbars, rightbars)的核心行为
这个函数是仅在当前K线被确认为枢轴低点时,才返回该K线的low值;如果当前K线不是枢轴低点,直接返回NaN。
所谓“确认”,是指当前K线的low比左边leftbars根K线的low都低,同时也比右边rightbars根K线的low都低——只有当这两个条件都满足的那根K线,函数才会输出数值,其他时候都是空值。
2. ta.valuewhen(ta.pivotlow(...), low, 0)的核心行为
ta.valuewhen()的作用是记录所有符合第一个参数条件的K线,然后返回第n次符合条件时对应的第二个参数值。这里你传的n=0,意思是返回最近一次符合条件的K线的low值——不管当前K线是不是枢轴低点,它都会把上一次(或当前次)枢轴低点的low值填充进来,不会返回NaN。
举个实际场景例子:
- 假设第10根K线是枢轴低点,
ta.pivotlow()在第10根K线返回该K线的low,第11-15根K线都不是枢轴低点,所以ta.pivotlow()在这些K线返回NaN。 - 而
ta.valuewhen(..., 0)在第10根K线返回同样的low,在第11-15根K线会一直保持第10根K线的low值,直到下一个枢轴低点出现。
3. 可视化验证代码
你可以运行这段代码直观看到差异:
//@version=5 indicator("Pivot Low Difference Demo", overlay=true) leftbars = 2 rightbars = 2 pivotLow = ta.pivotlow(low, leftbars, rightbars) recentPivotLow = ta.valuewhen(ta.pivotlow(low, leftbars, rightbars), low, 0) // 红色圆点:仅在枢轴点出现的K线显示数值 plot(pivotLow, color=color.red, style=plot.style_circles, size=size.small, title="ta.pivotlow()") // 蓝色线:一直显示最近的枢轴低点数值,无空值 plot(recentPivotLow, color=color.blue, linewidth=2, title="ta.valuewhen(..., 0)")
运行后你会发现:红色圆点只在枢轴低点的K线上出现,而蓝色线会持续连接最近的枢轴低点数值,在非枢轴K线上也保持之前的数值——这就是两者差异的直观体现。
总结一下:
- 如果你需要仅在枢轴点出现时获取数值,其他时候空值,用
ta.pivotlow()。 - 如果你需要持续获取最近一次枢轴点的数值,不管当前是不是枢轴点,用
ta.valuewhen(ta.pivotlow(...), low, 0)。
内容的提问来源于stack exchange,提问作者scripton
相关产品推荐
相关产品推荐

