Pine Script中valuewhen()获取pivot高低点数值异常如何解决
问题原因分析
首先明确ta.pivothigh()/ta.pivotlow()的运行逻辑:
- 函数定义为
ta.pivothigh(left_len, right_len),含义是寻找满足「左边left_len根K线最高价都更低、右边right_len根K线最高价都更低」的拐点,必须等右边right_len根K线全部走完,才会在当前K线返回该拐点的最高价,否则返回na。 - 你设置的左右参数都是
Pivotprd=10,所以当某根K线触发ph非na时,真正的pivot高点实际在当前K线往前数10根的位置。
你代码的核心错误有两个:
ta.valuewhen(ph, close, 1)取的是「ph条件成立(即确认pivot高点)的那根K线的收盘价」,并非pivot高点所在K线的数值,也不是高点本身的价格- occurrence参数填1代表取上一次满足条件的结果,要取最近一次满足条件的结果应该填0
修正方案
方案1:直接提取pivot高低点的价格
ta.pivothigh()/ta.pivotlow()返回非na值时,本身就是pivot高点/低点的价格,直接取最近一次非na值即可:
Pivotprd = input.int(defval=10, title='Pivot Point Period', minval=10, maxval=50) ph = ta.pivothigh(Pivotprd, Pivotprd) pl = ta.pivotlow(Pivotprd, Pivotprd) // 最近一次pivot高点价格 phVal = ta.valuewhen(not na(ph), ph, 0) // 最近一次pivot低点价格 plVal = ta.valuewhen(not na(pl), pl, 0)
方案2:提取pivot高低点所在K线的其他数值
如果需要取pivot拐点所在K线的开盘价/收盘价/成交量等其他数据,在取数时偏移Pivotprd即可:
// 取最近pivot高点所在K线的收盘价 ph_close = ta.valuewhen(not na(ph), close[Pivotprd], 0) // 取最近pivot低点所在K线的成交量 pl_vol = ta.valuewhen(not na(pl), volume[Pivotprd], 0)
内容的提问来源于stack exchange,提问作者Pitt
相关产品推荐
相关产品推荐

