Strateji05.04.2026schedule3 min read

BIST-100 Momentum Filtreleme: RSI + Hacim Profili

RSI ve hacim profili kombinasyonuyla BIST-100'de erken momentum sinyallerini nasıl yakalayacağınızı, yanlış sinyalleri nasıl elediğinizi Python'da gösteriyoruz.

Momentum stratejileri beni her zaman rahatsız eden bir çelişki içeriyordu: "erken gir" diyorsun ama erken girince henüz sinyal doğrulanmamış oluyor, geç girince de hareketin büyük kısmını kaçırmış oluyorsun. RSI ile hacim profilini birleştirdiğimde bu dengeyi biraz daha sağlıklı kurmayı öğrendim.

Momentum Trading Grafikleri

Momentum Nedir, Neden BIST'te İşe Yarıyor?

Momentum basitçe şu: güçlü yükselen hisseler yükselmeye, güçlü düşenler düşmeye devam etme eğilimi gösterir. BIST'te momentumun ekstra güçlü olmasının nedeni yapısaldır: yabancı kurumsal yatırımcı oranı düşük, bireysel yatırımcı ağırlıklı. Bireysel yatırımcılar harekete geç tepki verir, trendi besler.

Ama ham momentum — sadece "en çok yükselen hisseleri al" — çok gürültülü. Bunu ayırt etmek için RSI ve hacim profilini birlikte kullanıyorum.

RSI Momentum Filtresi

RSI (Relative Strength Index), 0-100 arasında değer üretir. Momentum stratejisinde RSI'yi farklı kullanıyorum: aşırı alım bölgesini SAT sinyali olarak değil, güç konfirmasyonu olarak değerlendiriyorum. RSI 55-70 bandında olan ve yükselen bir hisse, hem güçlü hem henüz tükenmemiş demektir.

Hacim Profili Filtresi

Kural 1: AL sinyali günündeki hacim, son 20 günlük ortalama hacmin en az 1.5 katı olmalı.

Kural 2: Fiyat yükselirken hacim de artıyorsa güçlü momentum. Fiyat yükselirken hacim azalıyorsa (divergence) — dikkatli ol.

Python Kodu

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

def hesapla_rsi(close, period=14):
    delta = close.diff()
    gain  = delta.clip(lower=0).rolling(period).mean()
    loss  = (-delta.clip(upper=0)).rolling(period).mean()
    rs    = gain / loss
    return 100 - (100 / (1 + rs))

def momentum_sinyal(df, rsi_alt=50, rsi_ust=70, hacim_carpan=1.5):
    df = df.copy()
    df["RSI"] = hesapla_rsi(df["Close"])
    df["HacimOrtalama"] = df["Volume"].rolling(20).mean()
    df["HacimGuc"] = df["Volume"] / df["HacimOrtalama"]
    df["MaxClose5"] = df["Close"].rolling(5).max().shift(1)

    df["MomentumAL"] = (
        (df["RSI"] > rsi_alt) &
        (df["RSI"] < rsi_ust) &
        (df["HacimGuc"] >= hacim_carpan) &
        (df["Close"] >= df["MaxClose5"])
    )

    df["MA10"] = df["Close"].rolling(10).mean()
    df["MomentumSAT"] = (df["RSI"] > 75) | (df["Close"] < df["MA10"])

    return df

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

df = momentum_sinyal(df)

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(14, 10), sharex=True)

ax1.plot(df["Close"], color="black", linewidth=0.8, label="Kapanış")
al_gunleri  = df[df["MomentumAL"]]
sat_gunleri = df[df["MomentumSAT"]]
ax1.scatter(al_gunleri.index,  al_gunleri["Close"],  marker="^", color="green", s=80, label="AL Sinyali")
ax1.scatter(sat_gunleri.index, sat_gunleri["Close"], marker="v", color="red",   s=80, label="SAT Sinyali")
ax1.set_title(f"{ticker} — RSI + Hacim Momentum Filtresi")
ax1.legend(); ax1.grid(alpha=0.3)

ax2.plot(df["RSI"], color="purple", linewidth=1)
ax2.axhline(50, color="gray",   linestyle="--", alpha=0.5)
ax2.axhline(70, color="orange", linestyle="--", alpha=0.5)
ax2.fill_between(df.index, 50, 70, alpha=0.1, color="green", label="Momentum Bandı")
ax2.set_ylabel("RSI"); ax2.legend(fontsize=8); ax2.grid(alpha=0.3)

ax3.bar(df.index, df["HacimGuc"], color=["green" if x >= 1.5 else "gray" for x in df["HacimGuc"]], alpha=0.7)
ax3.axhline(1.5, color="red", linestyle="--", label="1.5x Eşiği")
ax3.set_ylabel("Hacim / Ort."); ax3.legend(); ax3.grid(alpha=0.3)

plt.tight_layout()
plt.show()

Backtest Sonuçları

ASELS.IS ve THYAO.IS ortalaması, 2022-2024, günlük veri, %0,15 komisyon dahil:

Metrik Değer
Toplam Getiri %63.1
Buy & Hold Getiri %52.4
Sharpe Oranı 1.09
Max Drawdown %-19.8
Win Rate %58
İşlem Sayısı 24
Profit Factor 1.61

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

Veri Analizi

Sonuç

  • RSI tek başına yeterli değil; 70 üstü "sat" diye bakmak momentum stratejisini mahveder.
  • Hacim konfirmasyonu sahte sinyallerin büyük kısmını eliyor.
  • Strateji düz trend dönemlerinde çalışır; yatay piyasada işlem sayısı artıyor, getiri düşüyor.
  • Bir sonraki adım: sektörel güç filtresi eklemek.

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