Kaufman的自适应移动平均线的详细算法
时间: 2023-02-12 20:47:38 浏览: 112
Kaufman的自适应移动平均线(KAMA)是一种自适应移动平均线指标,它可以根据市场波动程度自动调整移动平均线的参数。算法如下:
1. 计算趋势幅度ER: ER = abs(price - previous price)
2. 计算趋势幅度SC: SC = (ER - previous ER) x (ER > previous ER)
3. 计算趋势幅度TR: TR = (SC + previous TR x 13) / 14
4. 计算KAMA: KAMA = (price x 2 + (previous KAMA x (n - 1)) ) / (n + 1) + SC x (n - 1) / (n + 1)
其中,n是KAMA的参数,用来控制移动平均线的变化速度。
相关问题
考夫曼自适应移动平均线指标
考夫曼自适应移动平均线指标(KAMA)是一种技术分析工具,旨在平滑价格波动并在市场趋势开始和结束时提供信号。它是由Perry Kaufman开发的,是一种自适应指标,可以根据市场情况而改变其灵敏度。
KAMA的计算方法基于三个变量:快速期、慢速期和信号期。快速期是指计算EMA的时间段,通常为10天,慢速期是指计算EMA的时间段,通常为30天,信号期是指计算EMA的时间段,通常为9天。这些变量的值可以根据交易者的偏好进行调整。
KAMA的计算过程是动态的,它根据价格的波动情况自适应地调整其灵敏度。当市场波动较大时,KAMA的灵敏度会增加,以便更快地响应价格的变化。当市场波动较小时,KAMA的灵敏度会减少,以避免产生过多的错误信号。
KAMA指标的应用是通过观察其与价格的相互作用来确定市场趋势。当价格上涨并且KAMA线也上涨时,意味着市场处于上升趋势。当价格下跌并且KAMA线也下跌时,意味着市场处于下降趋势。当价格与KAMA线的方向不一致时,意味着市场可能处于震荡状态。
总之,KAMA指标是一种灵活的技术分析工具,可以根据市场情况自适应地调整其灵敏度,为交易者提供更准确的信号。
自适应均线系统 python_Python熊猫考夫曼自适应移动平均值(KAMA)---熊猫或Cython中的递归计算...
KAMA是一种自适应移动平均值,它的计算方法是将价格数据的波动性考虑在内,以尽可能减小噪声对移动平均线的影响。下面是一个Python实现KAMA的示例代码:
```python
import pandas as pd
import numpy as np
def kama(data, n=10, pow1=2, pow2=30):
'''Kaufman's Adaptive Moving Average (KAMA)
data - pandas DataFrame
n - number of periods for efficiency ratio
pow1 - number of periods for fast EMA
pow2 - number of periods for slow EMA'''
abs_diff = abs(data - data.shift(1))
er = abs_diff / pd.stats.moments.rolling_sum(abs_diff, n)
sc = ((er*(2.0/(pow1+1)-2.0/(pow2+1.0))+2/(pow2+1.0))**2.0).values
kama = np.zeros(sc.size)
N = len(kama)
first_value = True
for i in range(N):
if np.isnan(sc[i]):
kama[i] = np.nan
else:
if first_value:
kama[i] = data[i]
first_value = False
else:
kama[i] = kama[i-1] + sc[i] * (data[i] - kama[i-1])
return kama
```
上述代码使用了Pandas和Numpy库,其中的er表示效率比率,sc为平滑常数,kama为自适应移动平均值。该函数使用递归计算,以加快计算速度。
你也可以使用Cython来加速计算。下面是一个Cython版本的kama计算代码:
```cython
cimport numpy as np
import numpy as np
def kama(np.ndarray[np.float64_t, ndim=1] data, int n=10, int pow1=2, int pow2=30):
cdef np.ndarray[np.float64_t, ndim=1] abs_diff, er, sc, kama
cdef int N, i
cdef bint first_value
abs_diff = np.abs(data - np.roll(data, 1))
er = abs_diff / pd.stats.moments.rolling_sum(abs_diff, n)
sc = ((er*(2.0/(pow1+1)-2.0/(pow2+1.0))+2/(pow2+1.0))**2.0).values
kama = np.zeros(sc.size)
N = len(kama)
first_value = True
for i in range(N):
if np.isnan(sc[i]):
kama[i] = np.nan
else:
if first_value:
kama[i] = data[i]
first_value = False
else:
kama[i] = kama[i-1] + sc[i] * (data[i] - kama[i-1])
return kama
```
使用Cython可以使得计算速度更快,但需要使用Cython的命令来编译这段代码,以便生成优化的机器码。
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![cs](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)