Mobil Menü

Python ile Bist Katılım Endeksi Hisseleri Teknik Analiz Programı

Bu Python kodu, Borsa İstanbul’daki BIST Katılım Endeksi’ne dahil olan hisse senetleri için teknik analiz indikatörlerini hesaplamak amacıyla geliştirilmiştir. Yatırımcılar için önemli bir araç olan bu kod, yfinance kütüphanesini kullanarak hisse senedi verilerini çekmekte ve ardından MACD, RSI, CCI, Stokastik RSI ve Fisher indikatörlerini hesaplamaktadır.

BIST Katılım Endeksi Hisse Senetleri ve Teknik Analiz

BIST Katılım Endeksi, Türkiye’deki katılım bankacılığı prensiplerine uygun olarak işlem gören hisse senetlerini içermektedir. Bu hisse senetleri, yatırımcılar için önemli fırsatlar sunar. Bu kod, BIST Katılım Endeksi hisse senetleri üzerinde teknik analiz yaparak, yatırım kararlarını desteklemek için gerekli verileri sağlamaktadır.

Teknik Analiz İndikatörleri

Kodda tanımlanan teknik analiz indikatörleri şunlardır:

  • MACD (Moving Average Convergence Divergence): Kısa ve uzun dönem hareketli ortalamalar arasındaki farkı gösterir. Yatırımcılar için trend dönüşlerini belirlemede yardımcı olur.
  • RSI (Relative Strength Index): Hisse senedinin aşırı alım veya aşırı satım durumunu belirler. Bu, yatırımcıların potansiyel alım-satım fırsatlarını değerlendirmesine yardımcı olur.
  • CCI (Commodity Channel Index): Fiyatın ortalama fiyat seviyesinden ne kadar uzaklaştığını ölçer. Yüksek CCI değerleri, aşırı alım durumunu gösterirken, düşük değerler aşırı satım durumunu işaret eder.
  • Stokastik RSI: RSI değerinin belirli bir dönem içindeki en yüksek ve en düşük değerleri arasındaki konumunu gösterir. Bu, piyasa momentumunu değerlendirmede faydalıdır.
  • Fisher İndikatörü: Fiyat hareketlerinin dönüş noktalarını belirlemeye yardımcı olur. Yatırımcılar için önemli bir sinyal kaynağıdır.

Veri Çekme ve Sonuçların Analizi

Kod, her bir BIST Katılım Endeksi hisse senedi için son 90 günlük verileri çekmekte ve yukarıda belirtilen indikatörleri hesaplamaktadır. Hesaplanan sonuçlar, kullanıcıların her bir hisse senedi için indikatörleri kolayca görmesini sağlayan bir pandas DataFrame’ine dönüştürülmektedir.

Sonuç

Bu Python kodu, BIST Katılım Endeksi’ndeki hisse senetlerini analiz etmek isteyen yatırımcılar için güçlü bir araçtır. Teknik analiz indikatörleri, yatırım kararlarını desteklemek için kritik bilgiler sunar. Kullanıcılar, bu kodu kendi ihtiyaçlarına göre özelleştirerek farklı analizler gerçekleştirebilir ve piyasa trendlerini daha iyi anlayabilirler. Borsa İstanbul’da başarılı bir yatırım yapmak için bu tür teknik analiz araçlarını kullanmak, yatırımcıların stratejilerini güçlendirecektir.

Dikkat

Bu kodlar eğitim amaçlı yazılmış olup kesinlikle yatırım tavsiyesi içermemektedir. Kullanıcının başına gelebilecek her şeyden kendisi sorumludur.

import yfinance as yf
import pandas as pd

pd.set_option("display.max_rows", None)  # Tüm satırları göster
pd.set_option("display.max_columns", None)  # Tüm sütunları göster
pd.set_option("display.width", 1000)  # Çıktı genişliğini artır

# BIST 100 hisse sembolleri
bist100_stocks = [
    "ACSEL.IS", "AHSGY.IS", "AKCNS.IS", "AKSA.IS",  "AKSEN.IS", "AKYHO.IS", "ALBRK.IS", "ALCTL.IS", "ALKA.IS",
    "ALKIM.IS", "ALKLC.IS", "ALTNY.IS", "ALVES.IS", "ANGEN.IS", "ARASE.IS", "ARDYZ.IS", "ARENA.IS", "ASELS.IS",
    "ASUZU.IS", "ATAKP.IS", "ATATP.IS", "ATEKS.IS", "AVGYO.IS", "AVPGY.IS", "BAHKM.IS", "BAKAB.IS", "BANVT.IS",
    "BASGZ.IS", "BAYRK.IS", "BERA.IS",  "BEYAZ.IS", "BIENY.IS", "BIMAS.IS", "BINBN.IS", "BINHO.IS", "BMSTL.IS",
    "BORLS.IS", "BORSK.IS", "BOSSA.IS", "BRKSN.IS", "BRLSM.IS", "BSOKE.IS", "BUCIM.IS", "BURCE.IS", "BURVA.IS",
    "CANTE.IS", "CEMAS.IS", "CEMTS.IS", "CMBTN.IS", "COSMO.IS", "CUSAN.IS", "CWENE.IS", "DAGHL.IS", "DARDL.IS",
    "DCTTR.IS", "DESPC.IS", "DGATE.IS", "DGNMO.IS", "DMRGD.IS", "DOAS.IS",  "DOBUR.IS", "DOFER.IS", "DURKN.IS",
    "DYOBY.IS", "EBEBK.IS", "EDATA.IS", "EDIP.IS",  "EGEPO.IS", "EGGUB.IS", "EGPRO.IS", "EKSUN.IS", "ELITE.IS",
    "ENJSA.IS", "ERCB.IS",  "EREGL.IS", "ESCOM.IS", "ESEN.IS",  "EUPWR.IS", "EYGYO.IS", "FADE.IS",  "FMIZP.IS",
    "FONET.IS", "FORMT.IS", "FZLGY.IS", "GEDZA.IS", "GENIL.IS", "GENTS.IS", "GEREL.IS", "GOKNR.IS", "GOLTS.IS",
    "GOODY.IS", "GRSEL.IS", "GRTHO.IS", "GUBRF.IS", "GUNDG.IS", "GWIND.IS", "HATSN.IS", "HKTM.IS",  "HOROZ.IS",
    "HRKET.IS", "HTTBT.IS", "HUNER.IS", "IDGYO.IS", "IHEVA.IS", "IHGZT.IS", "IHLAS.IS", "IHLGM.IS", "IHYAY.IS",
    "IMASM.IS", "INGRM.IS", "INTEM.IS", "ISDMR.IS", "ISKPL.IS", "ISSEN.IS", "IZFAS.IS", "IZINV.IS", "JANTS.IS",
    "KAREL.IS", "KATMR.IS", "KAYSE.IS", "KCAER.IS", "KGYO.IS",  "KIMMR.IS", "KLSYN.IS", "KNFRT.IS", "KONKA.IS",
    "KONYA.IS", "KOPOL.IS", "KOTON.IS", "KRDMA.IS", "KRDMB.IS", "KRDMD.IS", "KRGYO.IS", "KRONT.IS", "KRPLS.IS",
    "KRSTL.IS", "KRVGD.IS", "KTLEV.IS", "KUTPO.IS", "KUYAS.IS", "KZBGY.IS", "LILAK.IS", "LKMNH.IS", "LMKDC.IS",
    "LOGO.IS",  "LRSHO.IS", "LUKSK.IS", "LYDHO.IS", "MAGEN.IS", "MAKIM.IS", "MANAS.IS", "MARBL.IS", "MARKA.IS",
    "MAVI.IS",  "MEDTR.IS", "MEKAG.IS", "MERCN.IS", "MERKO.IS", "MIATK.IS", "MNDRS.IS", "MNDTR.IS", "MOBTL.IS",
    "MPARK.IS", "NATEN.IS", "NETAS.IS", "NTGAZ.IS", "NUHCM.IS", "OBAMS.IS", "OBASE.IS", "ONCSM.IS", "ORCAY.IS",
    "ORGE.IS",  "OSTIM.IS", "OYAKC.IS", "OZATD.IS", "OZRDN.IS", "OZSUB.IS", "OZYSR.IS", "PARSN.IS", "PASEU.IS",
    "PEHOL.IS", "PEKGY.IS", "PENGD.IS", "PENTA.IS", "PETKM.IS", "PETUN.IS", "PKART.IS", "PLTUR.IS", "PNSUT.IS",
    "POLHO.IS", "PRKAB.IS", "QUAGR.IS", "RALYH.IS", "RODRG.IS", "RUBNS.IS", "SAFKR.IS", "SAMAT.IS", "SANKO.IS",
    "SAYAS.IS", "SEGMN.IS", "SEKUR.IS", "SELEC.IS", "SELVA.IS", "SILVR.IS", "SMART.IS", "SMRTG.IS", "SNGYO.IS",
    "SNICA.IS", "SOKE.IS",  "SRVGY.IS", "SUNTK.IS", "SURGY.IS", "SUWEN.IS", "TCKRC.IS", "TDGYO.IS", "TEZOL.IS",
    "TKFEN.IS", "TNZTP.IS", "TUCLK.IS", "TUKAS.IS", "TUPRS.IS", "TUREX.IS", "ULUSE.IS", "USAK.IS",  "VAKKO.IS",
    "VANGD.IS", "VBTYZ.IS", "VESBE.IS", "VESTL.IS", "YATAS.IS", "YEOTK.IS", "YUNSA.IS", "ZEDUR.IS",

]

# İndikatör hesaplama fonksiyonları
def calculate_macd(close_prices, short_window=12, long_window=26, signal_window=9):
    short_ema = close_prices.ewm(span=short_window, adjust=False).mean()
    long_ema = close_prices.ewm(span=long_window, adjust=False).mean()
    macd = short_ema - long_ema
    signal = macd.ewm(span=signal_window, adjust=False).mean()
    return macd.iloc[-1], signal.iloc[-1]

def calculate_rsi(close_prices, period=14):
    delta = close_prices.diff()
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)
    avg_gain = gain.rolling(window=period).mean()
    avg_loss = loss.rolling(window=period).mean()
    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    return rsi  # Tüm RSI serisini döndür

def calculate_cci(high, low, close, period=20):
    tp = (high + low + close) / 3
    ma = tp.rolling(window=period).mean()
    mad = (tp - ma).abs().rolling(window=period).mean()
    cci = (tp - ma) / (0.015 * mad)
    return cci.iloc[-1]

def calculate_stochastic_rsi(close_prices, period=14):
    rsi = calculate_rsi(close_prices, period)  # Tüm RSI serisini al
    min_rsi = rsi.rolling(window=period).min()
    max_rsi = rsi.rolling(window=period).max()
    stochastic_rsi = (rsi - min_rsi) / (max_rsi - min_rsi) * 100
    return stochastic_rsi.iloc[-1]

def calculate_fisher(high, low, period=14):
    hl2 = (high + low) / 2
    max_hl = hl2.rolling(window=period).max()
    min_hl = hl2.rolling(window=period).min()
    value = 2 * ((hl2 - min_hl) / (max_hl - min_hl) - 0.5)
    fisher = 0.5 * (value.shift(1) + value)
    return fisher.iloc[-1]

# Sonuçları saklama
results = []

for stock in bist100_stocks:
    try:
        # Veriyi çek (Son 90 günlük veriler)
        data = yf.download(stock, period="3mo", interval="1d")
        if data.empty:
            print(f"{stock} için veri bulunamadı.")
            continue

        # İndikatörleri hesapla
        macd, signal = calculate_macd(data['Close'])
        rsi = calculate_rsi(data['Close']).iloc[-1]
        cci = calculate_cci(data['High'], data['Low'], data['Close'])
        stochastic_rsi = calculate_stochastic_rsi(data['Close'])
        fisher = calculate_fisher(data['High'], data['Low'])

        # Sonuçları ekle
        results.append({
            "Hisse": stock,
            "MACD": round(macd, 2),
            "CCI": round(cci, 2),
            "RSI": round(rsi, 2),
            "Stokastik RSI": round(stochastic_rsi, 2),
            "Fisher": round(fisher, 2)
        })
    except Exception as e:
        print(f"{stock} için hata: {e}")

# Tabloyu yazdır
df = pd.DataFrame(results)
print(df)
Osman Bayrak
Osman Bayrak

Yazılım Mühendisiyim. Teknoloji ve yazılıma meraklıyım.

Articles: 154