移動平均數的詳細闡述

一、什麼是移動平均數

移動平均數是指在一定時期內,求出一組數值的平均值,並將這組數據的最早的一個值去掉,再加上一個最新的數值,再求新的平均值的一種數學計算方法。

以股市為例,移動平均數被廣泛應用於股票價格的分析,可以幫助投資者更加準確地預測股票價格的走勢。

二、移動平均數的計算方法

移動平均數的計算方法可以分為簡單移動平均數(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-hk/n/285316.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:44
下一篇 2024-12-22 15:44

相關推薦

  • 箱形圖中間的橫線可以是平均數嗎?

    箱形圖(box plot)是一種用來展示一組數據分散程度及其異常值情況的圖表形式。它由五個數值指標構成:最小值、第一四分位數(Q1)、中位數、第三四分位數(Q3)和最大值,通常還有…

    編程 2025-04-28
  • 分段統計怎麼求平均數?

    分段統計是指在一個給定的數據集中,將數據進行分組並進行統計分析。如何求解分段統計中每組數據的平均數呢?下文將從多個方面進行講解。 一、理論基礎 首先,需要明確平均數的定義,在數學中…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形數據庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網絡。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25

發表回復

登錄後才能評論