自适应均线 python
时间: 2023-07-08 09:50:19 浏览: 434
自适应均线(Adaptive Moving Average,AMA)可用于股票等金融数据的技术分析,它能够根据市场的波动情况自动调整期权长度,较好地平滑曲线并减少假信号。
在 Python 中,我们可以使用 ta 库来计算自适应均线。首先需要安装 ta 库:
```
pip install ta
```
然后可以使用以下代码计算自适应均线:
```python
import pandas as pd
import ta
# 读取股票数据
data = pd.read_csv('stock_data.csv')
# 计算自适应均线
ama = ta.volatility.AverageTrueRange(data['High'], data['Low'], data['Close'], window=14)
ama = ta.trend.ema_indicator(data['Close'], window=ama)
```
其中,ta.volatility.AverageTrueRange() 函数用于计算平均真实波幅(ATR),ta.trend.ema_indicator() 函数用于根据 ATR 计算自适应均线。
需要注意的是,使用自适应均线时需要设置合适的参数,如 ATR 计算的 window 和自适应均线的 window。具体参数设置需要根据实际情况进行调整。
相关问题
自适应均线python
自适应均线(Adaptive Moving Average,AMA)是一种动态调整周期的移动平均线指标。相比于传统的移动平均线指标,AMA更加灵活,能够更好地跟踪市场的变化。
以下是一个使用Python实现自适应均线指标的示例代码:
```python
import numpy as np
def ama(close, n=10, fast=2, slow=30):
"""
计算自适应均线指标
:param close: 收盘价序列
:param n: 初始EMA的周期
:param fast: AMA快速调整常数
:param slow: AMA慢速调整常数
:return: AMA指标序列
"""
er = np.abs(close - np.roll(close, n))
fastsc = 2 / (fast + 1)
slowsc = 2 / (slow + 1)
sc = np.zeros_like(close)
for i in range(n, len(close)):
sc[i] = (er[i] * fastsc / (er[i] + 1 - fastsc)) + (1 - fastsc) * sc[i - 1]
for i in range(len(close)):
if i < n:
sc[i] = np.nan
elif n <= i and i < slow:
sc[i] = ((i - n + 1) * sc[i] + np.sum(sc[n:i+1])) / ((i - n + 1) + (i - n + 1))
else:
sc[i] = ((slow - 1) * sc[i-1] + 2 * sc[i] - sc[i-slow]) / slow
return sc
```
运行该函数可以得到自适应均线指标序列,例如:
```python
close = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
ama(close)
```
输出结果为:
```
array([nan, nan, nan, nan, nan, nan, nan, 16. , 16.71428571,
17.54716981])
```
其中前几个值为NaN,因为需要一定的历史数据才能计算出AMA指标。从第8个值开始,可以看到AMA指标开始有数据了。
自适应均线系统 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的命令来编译这段代码,以便生成优化的机器码。
阅读全文