📜  numpy 移动平均线 - Python (1)

📅  最后修改于: 2023-12-03 14:44:49.031000             🧑  作者: Mango

Numpy 移动平均线 - Python

在金融领域中,移动平均线(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$ 个值,以满足初始条件。