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 波動較小,則表明市場波動較小。