📅  最后修改于: 2023-12-03 14:44:49.031000             🧑  作者: Mango
在金融领域中,移动平均线(Moving Average,MA)是一个常用的指标,它通过对某一时间段内的价格数据取平均值,来消除价格波动带来的影响,使趋势更加明显。
在 Python 中,Numpy 库提供了方便的函数来计算移动平均线。本文将介绍如何使用 Numpy 计算简单移动平均线和指数移动平均线,并提供相关的代码示例。
对于简单移动平均线(Simple Moving Average,SMA),通常采用如下公式来计算:
$$ SMA_{t} = \frac{1}{n} \sum_{i=0}^{n-1} C_{t-i} $$
其中,$SMA_{t}$ 表示时间 $t$ 的移动平均值,$C_{t}$ 表示时间 $t$ 的收盘价,$n$ 表示移动平均窗口大小。
下面是 Python 中使用 Numpy 计算简单移动平均线的示例代码:
import numpy as np
def sma(data, window):
weights = np.ones(window) / window
return np.convolve(data, weights, mode='valid')
# Example usage
data = np.array([1, 2, 3, 4, 5])
sma_3 = sma(data, 3)
sma_5 = sma(data, 5)
在上面的代码中,sma
函数接受两个参数:data
表示收盘价序列,window
表示移动平均窗口大小。函数内部通过 np.ones
函数创建一个大小为 window
的权重向量,然后通过 np.convolve
函数对权重向量和收盘价序列计算卷积,即可得到移动平均线。
注意,由于卷积计算的过程中输入序列的两端会出现边界效应,因此需要在函数调用时指定 mode='valid'
参数。
对于指数移动平均线(Exponential Moving Average,EMA),采用如下公式来计算:
$$ EMA_{t} = \begin{cases} C_{t}, & t=0 \ \alpha C_{t} + (1-\alpha) EMA_{t-1}, & t>0 \end{cases} $$
其中,$EMA_{t}$ 表示时间 $t$ 的指数移动平均值,$C_{t}$ 表示时间 $t$ 的收盘价,$\alpha = \frac{2}{n+1}$ 是平滑因子,$n$ 表示移动平均窗口大小。
下面是 Python 中使用 Numpy 计算指数移动平均线的示例代码:
import numpy as np
def ema(data, window):
alpha = 2 / (window + 1)
weights = np.exp(np.linspace(-alpha, 0, window))
weights /= weights.sum()
a = np.convolve(data, weights, mode='full')[:len(data)]
a[:window] = a[window]
return a
# Example usage
data = np.array([1, 2, 3, 4, 5])
ema_3 = ema(data, 3)
ema_5 = ema(data, 5)
在上面的代码中,ema
函数同样接受两个参数:data
表示收盘价序列,window
表示移动平均窗口大小。函数内部先计算平滑因子 $\alpha$ 和权重向量,然后使用 np.convolve
函数对权重向量和收盘价序列计算卷积,即可得到移动平均线。
需要注意的是,由于指数移动平均线的计算涉及到历史的平均值,因此需要对收盘价序列进行全局卷积,最后再通过切片操作截取与原序列等长的部分,并将前 $n$ 个值设置为第 $n$ 个值,以满足初始条件。