股票里面MACD和RSI都要应用到moving average
参见https://pythonprogramming.net/advanced-matplotlib-graphing-charting-tutorial/
在panda里面封装了rolling module可以rolling以后求mean,max,etc.。
这里我介绍另外一个非常傲娇的求法:那就是用numpy的convolution
首先神马是convolution呢,中文名叫卷积,这是图像处理和信号处理里面用到的一种函数,字面意思就能看出来和rolling有很大关系,这里我拿两个一维数组h[N]和x[K]举例,K>=N
y[k]=sum(for n=0 to N−1 h[n]×x[k−n])
这样可以看出moving average的定义和这个表达式非常相像,只要我们将h[N]定义为N代表移动窗口的宽度,而h[N]的每个元素就是1/N,这样就将y[k]表示为moving average了
def movingaverage(values,window):
weigths = np.repeat(1.0, window)/window
smas = np.convolve(values, weigths, 'valid')
return smas # as a numpy array