Strateji05.04.2026schedule3 min read

SMA vs EMA vs WMA: Hangisi BIST'te Daha İyi Çalışıyor?

Üç hareketli ortalama türünün matematiksel farklarını, BIST hisseleri üzerinde sinyal kalitesini ve hangisinin hangi koşulda daha avantajlı olduğunu Python'la test ediyoruz.

"EMA mı SMA mı?" sorusu trading forumlarının klasiklerinden. Sonunda şuna karar verdim: doğru soru "hangisi daha iyi?" değil, "hangi koşulda hangisi daha uygun?"

Hareketli Ortalamalar

Üç Ortalama, Üç Mantık

SMA (Simple Moving Average) — son N kapanışın aritmetik ortalaması. Her mum eşit ağırlık taşır. Yavaş tepki verir ama gürültüye duyarsızdır.

EMA (Exponential Moving Average) — son fiyatlara üstel olarak daha fazla ağırlık verir. SMA'ya göre daha hızlı tepki verir.

WMA (Weighted Moving Average) — son muma en büyük ağırlığı, önceki mumlara doğrusal olarak azalan ağırlığı verir.

Python Kodu

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def wma(series, period):
    weights = np.arange(1, period + 1)
    return series.rolling(period).apply(
        lambda x: np.dot(x, weights) / weights.sum(), raw=True
    )

def crossover_backtest(df, kisa, uzun, komisyon=0.001):
    df = df.copy()
    df["Signal"] = (df[kisa] > df[uzun]).astype(int)
    df["Return"] = df["Close"].pct_change()
    df["StratReturn"] = df["Signal"].shift(1) * df["Return"]

    df["Trade"] = df["Signal"].diff().abs()
    df["StratReturn"] -= df["Trade"] * komisyon

    df["Cumulative"] = (1 + df["StratReturn"]).cumprod()

    toplam_getiri = df["Cumulative"].iloc[-1] - 1
    gunluk_std    = df["StratReturn"].std()
    sharpe        = (df["StratReturn"].mean() / gunluk_std) * np.sqrt(252) if gunluk_std > 0 else 0

    rolling_max    = df["Cumulative"].cummax()
    drawdown       = (df["Cumulative"] - rolling_max) / rolling_max
    max_dd         = drawdown.min()

    return toplam_getiri, sharpe, max_dd, df["Cumulative"]

ticker = "THYAO.IS"
df = yf.download(ticker, start="2020-01-01", end="2025-01-01", progress=False)
df.columns = df.columns.droplevel(1) if isinstance(df.columns, pd.MultiIndex) else df.columns

df["SMA20"] = df["Close"].rolling(20).mean()
df["EMA20"] = df["Close"].ewm(span=20, adjust=False).mean()
df["WMA20"] = wma(df["Close"], 20)

df["SMA50"] = df["Close"].rolling(50).mean()
df["EMA50"] = df["Close"].ewm(span=50, adjust=False).mean()
df["WMA50"] = wma(df["Close"], 50)

sonuclar = {}
for tip in ["SMA", "EMA", "WMA"]:
    getiri, sharpe, dd, cumul = crossover_backtest(df, f"{tip}20", f"{tip}50")
    sonuclar[tip] = {"Getiri": getiri, "Sharpe": sharpe, "MaxDD": dd, "Cumul": cumul}

print(f"\n{'Yöntem':<6} {'Getiri':>10} {'Sharpe':>10} {'Max DD':>10}")
print("-" * 40)
for tip, s in sonuclar.items():
    print(f"{tip:<6} {s['Getiri']*100:>9.1f}%  {s['Sharpe']:>9.2f}  {s['MaxDD']*100:>9.1f}%")

fig, ax = plt.subplots(figsize=(12, 5))
for tip, s in sonuclar.items():
    ax.plot(s["Cumul"], label=f"{tip} 20/50")
bah = (1 + df["Close"].pct_change()).cumprod()
ax.plot(bah, label="Buy & Hold", linestyle="--", color="gray")
ax.set_title(f"{ticker} — SMA vs EMA vs WMA (20/50 Kesişim)")
ax.legend(); ax.grid(alpha=0.3)
plt.tight_layout()
plt.show()

Backtest Sonuçları

THYAO.IS, 2020-2024, günlük veri, %0,1 komisyon dahil:

Yöntem Toplam Getiri Sharpe Max Drawdown
SMA 20/50 %112.4 1.09 %-24.1
EMA 20/50 %118.7 1.14 %-22.8
WMA 20/50 %115.2 1.11 %-23.4

Bu sonuçlar geçmiş performansı gösterir, gelecek getiri garantisi vermez.

Peki Hangisi Ne Zaman?

SMA tercih et: Uzun vadeli trend tespitinde, gürültü fazla olan dönemlerde. Kurumsal yatırımcılar SMA kullandığı için kendi kendini gerçekleştiren seviyeler oluşur.

EMA tercih et: Kısa-orta vadeli işlemlerde, hızlı trend değişimlerini erken fark etmek istediğinde.

WMA tercih et: EMA ile SMA arasında bir denge istediğinde.

Karşılaştırmalı Analiz

BIST'e Özgü Not

BIST'te yabancı kurumsal yatırımcılar EMA'yı, bireysel yatırımcılar SMA'yı tercih ediyor. Pratik yaklaşım: EMA ile sinyal üret, SMA ile seviye onayla.

Sonuç

  • Üç yöntem arasındaki getiri farkı büyük değil; strateji tasarımı ve risk yönetimi bu seçimden çok daha belirleyici.
  • EMA volatil piyasada biraz daha hızlı tepki verir; SMA gürültüyü daha iyi filtreler.
  • Tek başına "en iyi ortalama" arayışı yanıltıcı — piyasa rejimi, hisse karakteri ve zaman dilimi seçimden çok daha belirleyici.

Bu yazıdaki analizler ve kodlar eğitim amaçlıdır; yatırım tavsiyesi değildir.