C/C++ 移動平均(SMA)和指數移動平均(EMA)指標 範例

C/C++ 移動平均(SMA)和指數移動平均(EMA)指標 範例

C/C++ 移動平均(SMA)和指數移動平均(EMA)指標 範例


資料來源: Bard for Chrome


Code

float SMA(float data[], int n) {
  float sum = 0;
  for (int i = 0; i < n; i++) {
    sum += data[i];
  }
  return sum / n;
}

float EMA(float data[], int n) {
  float a = 2 / (n + 1);
  float ema = data[0];
  for (int i = 1; i < n; i++) {
    ema = (ema * (1 - a) + data[i]) * a;
  }
  return ema;
}

//===================
float data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
float ema = EMA(data, 10);
printf("10 日指數移動平均:%f\n", ema); // 10 日指數移動平均:5.478260869565217

//===================
float data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
float sma = SMA(data, 10);
printf("10 日移動平均:%f\n", sma);// 10 日移動平均:5.5

PS.
比較 SMA 和 EMA:
    SMA 和 EMA 都是計算數據序列中最近 N 個數值的平均值的技術。 但是,它們之間有一些重要的區別。

權重:SMA 使用等權重,而 EMA 使用指數權重。 這意味著 EMA 越靠近當前時刻的數值具有更大的權重。

滯後:SMA 比 EMA 更滯後。 這是因為 SMA 使用等權重,因此它會在更新時考慮所有 N 個數據點。 EMA 使用指數權重,因此它只會考慮最近的一些數據點。

平滑度:EMA 比 SMA 更平滑。 這是因為 EMA 使用指數權重,因此它會對近期數據的波動進行更多的平滑處理。

應用:
    SMA 和 EMA 通常用於技術分析中。 它們可以用來識別趨勢、尋找買入和賣出信號以及評估市場波動。

以下是 SMA 和 EMA 的一些常見應用:
    趨勢識別:SMA 和 EMA 可以用來識別數據序列的趨勢。 如果 SMA 向上,則趨勢為上升趨勢。 如果 SMA 向下,則趨勢為下降趨勢。

    買入和賣出信號:SMA 和 EMA 可以用來生成買入和賣出信號。 例如,如果 SMA 向上穿過 EMA,則可以視為買入信號。 如果 SMA 向下穿過 EMA,則可以視為賣出信號。

    市場波動評估:SMA 和 EMA 可以用來評估市場波動。 如果 SMA 或 EMA 波動很大,則表明市場波動較大。 如果 SMA 或 EMA 波動較小,則表明市場波動較小。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *