一、什麼是移動平均數
移動平均數是指在一定時期內,求出一組數值的平均值,並將這組數據的最早的一個值去掉,再加上一個最新的數值,再求新的平均值的一種數學計算方法。
以股市為例,移動平均數被廣泛應用於股票價格的分析,可以幫助投資者更加準確地預測股票價格的走勢。
二、移動平均數的計算方法
移動平均數的計算方法可以分為簡單移動平均數(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
微信掃一掃
支付寶掃一掃