一、什麼是移動平均數
移動平均數是指在一定時期內,求出一組數值的平均值,並將這組數據的最早的一個值去掉,再加上一個最新的數值,再求新的平均值的一種數學計算方法。
以股市為例,移動平均數被廣泛應用於股票價格的分析,可以幫助投資者更加準確地預測股票價格的走勢。
二、移動平均數的計算方法
移動平均數的計算方法可以分為簡單移動平均數(SMA)和指數移動平均數(EMA)兩種。
1. 簡單移動平均數
簡單移動平均數的計算方法比較簡單,只需要將一段時間內的所有數據相加,再除以這個時間段的長度即可。
def sma(data, n): """ data: 數據列表 n: 時間段長度 """ sma_list = [] for i in range(n-1, len(data)): sma = sum(data[i-n+1:i+1])/n sma_list.append(sma) return sma_list
2. 指數移動平均數
指數移動平均數是對簡單移動平均數的一種改進方法,它主要依賴於前一個時間段內的平均數以及最新的數據,計算公式為:EMA(今)=2/(N+1)*(收盤價-昨日EMA)+昨日EMA。
def ema(data, n): """ data: 數據列表 n: 時間段長度 """ ema_list = [] sma_sum = sum(data[:n])/n multiplier = 2/(n+1) ema_list.append(sma_sum) for i in range(n, len(data)): ema = (data[i] - ema_list[-1]) * multiplier + ema_list[-1] ema_list.append(ema) return ema_list
三、移動平均數的應用
1. 股票價格的分析
股票價格的走勢受多種因素影響,使用移動平均數可以消除價格波動的短期噪音,更好地觀察長期趨勢。
2. 簡單預測模型
使用移動平均數可以構建簡單的預測模型,預測某個時間段內的數據走勢。
def simple_model(data, n): """ data: 數據列表 n: 時間段長度 """ model_list = [] for i in range(n-1, len(data)): model = data[i] - data[i-n] model_list.append(model) return model_list
3. 數據平滑處理
移動平均數可以用於數據平滑處理,特別是對於一些雜訊比較嚴重的數據,可以通過移動平均數來平滑曲線,減少數據的誤差。
四、移動平均數的優化
為了提高移動平均數的準確度,可以對其進行優化,如加權移動平均數(WMA)、自適應移動平均數(AMA)等。
1. 加權移動平均數
加權移動平均數是對簡單移動平均數的改進,它採用不同的權重係數來平衡數據的不同影響程度,計算方法為將每個數據乘以對應的權重係數後再求和除以權重和。
def wma(data, weights): """ data: 數據列表 weights: 權重係數列表 """ wma_list = [] n = len(weights) for i in range(n-1, len(data)): wma = sum([weights[j]*data[i-j] for j in range(n)])/sum(weights) wma_list.append(wma) return wma_list
2. 自適應移動平均數
自適應移動平均數是對指數移動平均數的改進,它可以根據數據的波動性自適應地調整參數,從而提高預測的準確度。
def ama(data, fast, slow, threshold): """ data: 數據列表 fast: 快速移動平均數的時間段 slow: 慢速移動平均數的時間段 threshold: 閾值 """ ama_list = [] diff_sum = [0]*(slow-1) for i in range(slow-1, len(data)): if i == slow-1: diff_sum[i] = sum([data[j] for j in range(i-slow+1, i+1)])/slow else: diff_fast = 2/(fast+1)*(data[i]-ama_list[-1])+ama_list[-1] diff_slow = 2/(slow+1)*(data[i]-ama_list[-1])+ama_list[-1] diff = diff_fast - diff_slow if abs(diff) < threshold: diff_sum[i] = diff_sum[i-1] + diff else: diff_sum[i] = diff_sum[i-1] diff_ama = 2/(slow+1)*diff_sum[i] + ama_list[-1] ama_list.append(diff_ama) return ama_list
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/285316.html