2015年10月14日 星期三

用numpy.convolve計算移動平均

convolve,數學上叫做卷積,有興趣的人可以自行去維基百科看看它的定義,但是因為我並非數學底的,這裡純粹對他在計算移動平均上做一個簡單的說明跟紀錄。

簡單移動平均基本上可以想成是對一連串價格做一個權數相同的加權平均。假定我們要計算[1,2,3,4,5,6]這個陣列的SME4,可以透過以下的程式碼做計算

In [1]:numpy.convolve([1,2,3,4,5,6],[0.25,0.25,0.25,0.25])

第一個陣列可以想像是價格的陣列,第二個陣列則是對要做移動平均的時間長度,對各個時點的權數。

如果是簡單移動平均,則各時間點的權數相同。若是SMA(4),則各時間點的權數之陣列即為[0.25,00.25,0.25,0.25] 結果會呈現如下:
Out[1]: array([ 0.25,  0.75,  1.5 ,  2.5 ,  3.5 ,  4.5 ,  3.75,  2.75,  1.5 ])

第一個值0.25是第一個陣列內的第一個值1 乘上 第二個陣列的第一個值0.25

第二個值0.75是第一個陣列內的第一個值1 乘上 第二個陣列的第一個值0.25再加上第一個陣列內的第二個值2 乘上 第二個陣列的第二個值0.25,依此類推。 

如此一來,在產出陣列的第4,5,6個值,即為價格陣列的SME,再處理這個陣列後,就可以使用。