关于Pine Script中KAMA指标ER计算的代码验证问询
考夫曼自适应移动平均线(KAMA)效率比率(ER)代码验证
正在编写考夫曼自适应移动平均线(KAMA)时,对效率比率(ER)的代码实现存在疑问。ER的计算公式为 ER = Change/Volatility,具体定义:
- Change = 当前收盘价与10周期前收盘价差值的绝对值
- Volatility = 最近10期内每期收盘价与前一期收盘价差值绝对值的总和
编写的Pine Script代码如下:
indicator('KAMA', shorttitle='KAMA', overlay=true) length = input(title='周期长度', defval=10) fastLength = input(title='快速EMA常数', defval=2) // 平滑常数 slowLength = input(title='慢速EMA长度', defval=30) // 平滑常数 source = input(title='数据源', defval=close) change = math.abs(ta.change(source, length)) volatility = math.sum(math.abs(ta.change(source)), length) ER = change/volatility
问题与解答
问题1
代码行 change = math.abs(ta.change(source, length)) 是否会返回当前收盘价与10周期前收盘价差值的绝对值?
解答:是的。ta.change(source, length) 会计算当前周期source值与length周期前的source值的差值,math.abs() 对该差值取绝对值,完全符合Change的定义。
问题2
代码行 volatility = math.sum(math.abs(ta.change(source)), length) 的返回值是以下哪一种:
- 2.1 最近10期内每期当前收盘价与前一期收盘价差值绝对值的总和?
- 2.2 当前收盘价与10周期前收盘价差值的绝对值?
解答:返回值对应2.1。ta.change(source) 默认计算当前周期与上一周期source值的差值,经math.abs()取绝对值后,math.sum(..., length)会对最近10期的该绝对值结果求和,与Volatility的定义一致。
内容的提问来源于stack exchange,提问作者T K
相关产品推荐
相关产品推荐

