Mobil Menü

Python ile Hisse Senedi Teknik Analiz Programı

Günümüzde hisse senedi piyasaları, yatırımcılar için hem fırsatlar hem de riskler barındırıyor. Başarılı bir yatırım stratejisi geliştirmek için, hisse senetlerinin fiyat hareketlerini ve temel göstergelerini derinlemesine analiz etmek kritik önem taşıyor. İşte bu noktada, Python programlama dili ve çeşitli veri analizi kütüphaneleri kullanılarak geliştirilen bu teknik analiz aracı, yatırımcılara güçlü bir araç sunuyor.

Bu kod, yfinance kütüphanesi aracılığıyla Yahoo Finance’ten hisse senedi verilerini çekiyor ve ardından çeşitli teknik analiz göstergelerini hesaplayarak sonuçları kullanıcıya sunuyor. Kullanıcı, analiz etmek istediği hisse senedinin sembolünü girdikten sonra, program aşağıdaki bilgileri ekrana yazdırıyor:

  1. Güncel Fiyat: Hisse senedinin son kapanış fiyatı.
  2. Pivot Noktaları: Hisse senedinin destek ve direnç noktalarını gösteren pivot, R1 ve S1 değerleri.
  3. Stokastik RSI: Hisse senedinin momentum durumunu gösteren bir gösterge.
  4. RSI (Relative Strength Index): Hisse senedinin aşırı alım veya aşırı satım bölgelerinde olup olmadığını gösteren bir gösterge.
  5. Fisher Transform: Hisse senedinin fiyat hareketlerini gösteren bir gösterge.
  6. Momentum: Hisse senedinin son 10 günlük fiyat değişimini gösteren bir gösterge.
  7. CCI (Commodity Channel Index): Hisse senedinin aşırı alım veya aşırı satım bölgelerinde olup olmadığını gösteren bir gösterge.
  8. Supertrend: Hisse senedinin trend yönünü gösteren bir gösterge.
  9. Bollinger Bantları: Hisse senedinin fiyat hareketlerinin standart sapma bölgelerini gösteren bir gösterge.
  10. MACD (Moving Average Convergence Divergence): Hisse senedinin trend yönünü ve momentum durumunu gösteren bir gösterge.
  11. 50 ve 200 Günlük Hareketli Ortalamalar: Hisse senedinin orta ve uzun vadeli fiyat hareketlerini gösteren göstergeler.

Ayrıca, program hisse senedinin fiyat grafiğini de çizerek, bu göstergelerin grafikte nasıl yansıdığını görsel olarak sunuyor.

Bu teknik analiz aracı, yatırımcılara hisse senedi piyasasındaki fırsatları ve riskleri daha iyi anlama imkanı sağlıyor. Göstergelerin birlikte değerlendirilmesi, yatırımcıların daha bilinçli ve doğru kararlar vermelerine yardımcı oluyor. Özellikle deneyimli yatırımcılar için, bu araç önemli bir karar destek sistemi olarak kullanılabilir.

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
import numpy as np
import matplotlib.pyplot as plt

# MACD hesaplama fonksiyonu
def macd(veri, short_window=12, long_window=26, signal_window=9):
    short_ema = veri['Close'].ewm(span=short_window, adjust=False).mean()
    long_ema = veri['Close'].ewm(span=long_window, adjust=False).mean()
    macd_line = short_ema - long_ema
    signal_line = macd_line.ewm(span=signal_window, adjust=False).mean()
    return macd_line, signal_line

# RSI hesaplama fonksiyonu
def rsi(veri, period=14):
    delta = veri['Close'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
    rs = gain / loss
    rsi_value = 100 - (100 / (1 + rs))
    return rsi_value

# Bollinger Bandı hesaplama fonksiyonu
def bollinger_bands(veri, period=20):
    sma = veri['Close'].rolling(window=period).mean()
    std_dev = veri['Close'].rolling(window=period).std()
    upper_band = sma + (2 * std_dev)
    lower_band = sma - (2 * std_dev)
    return upper_band, lower_band

# Pivot noktaları hesaplama fonksiyonu
def pivot_noktaları(veri):
    son_kapanış = veri['Close'].iloc[-1]
    high = veri['High'].iloc[-1]
    low = veri['Low'].iloc[-1]
    pivot = (high + low + son_kapanış) / 3
    r1 = 2 * pivot - low
    s1 = 2 * pivot - high
    return pivot, r1, s1

# Supertrend hesaplama fonksiyonu
def supertrend(veri, atr_period=10, multiplier=3):
    hl2 = (veri['High'] + veri['Low']) / 2
    atr = veri['High'] - veri['Low']
    atr_smooth = atr.rolling(window=atr_period).mean()
    supertrend = hl2 - (multiplier * atr_smooth)
    return supertrend

# Stokastik RSI hesaplama fonksiyonu
def stokastik_rsi(veri, period=14):
    delta = veri['Close'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
    rs = gain / loss
    rsi = 100 - (100 / (1 + rs))
    lowest_rsi = rsi.rolling(window=period).min()
    highest_rsi = rsi.rolling(window=period).max()
    stoch_rsi = 100 * (rsi - lowest_rsi) / (highest_rsi - lowest_rsi)
    return stoch_rsi

# Teknik Analiz Fonksiyonu
def teknik_analiz(hisse_adi):
    # Hisse verilerini çek
    veri = yf.download(hisse_adi, period="6mo", interval="1d")

    if veri.empty:
        print(f"{hisse_adi} için veri bulunamadı.")
        return

    # Göstergeleri hesapla
    veri['StochRSI'] = stokastik_rsi(veri)
    veri['RSI'] = rsi(veri)
    veri['Fisher'] = np.tanh((veri['High'] + veri['Low']) / 2)
    veri['Momentum'] = veri['Close'].diff(10)
    veri['CCI'] = (veri['Close'] - veri['Close'].rolling(20).mean()) / (0.015 * veri['Close'].rolling(20).std())
    veri['Supertrend'] = supertrend(veri)
    veri['UpperBand'], veri['LowerBand'] = bollinger_bands(veri)
    veri['MA50'] = veri['Close'].rolling(window=50).mean()
    veri['MA200'] = veri['Close'].rolling(window=200).mean()
    veri['MACD'], veri['Signal_Line'] = macd(veri)

    pivot, r1, s1 = pivot_noktaları(veri)

    # Sonuçları yazdır
    print(f"\n{hisse_adi} Teknik Analiz Sonuçları:\n")
    print(f"Güncel Fiyat: {veri['Close'].iloc[-1]:.2f} TL")
    print(f"Pivot Noktası: {pivot:.2f} TL | R1: {r1:.2f} TL | S1: {s1:.2f} TL")
    print(f"Stokastik RSI: {veri['StochRSI'].iloc[-1]:.2f}")
    print(f"RSI: {veri['RSI'].iloc[-1]:.2f}")
    print(f"Fisher Transform: {veri['Fisher'].iloc[-1]:.2f}")
    print(f"Momentum: {veri['Momentum'].iloc[-1]:.2f}")
    print(f"CCI: {veri['CCI'].iloc[-1]:.2f}")
    print(f"Supertrend: {veri['Supertrend'].iloc[-1]:.2f} TL")
    print(f"Üst Bollinger Bandı: {veri['UpperBand'].iloc[-1]:.2f} TL")
    print(f"Alt Bollinger Bandı: {veri['LowerBand'].iloc[-1]:.2f} TL")
    print(f"MACD: {veri['MACD'].iloc[-1]:.2f} | Sinyal Çizgisi: {veri['Signal_Line'].iloc[-1]:.2f}")
    print(f"50 Günlük Hareketli Ortalama: {veri['MA50'].iloc[-1]:.2f} TL")
    print(f"200 Günlük Hareketli Ortalama: {veri['MA200'].iloc[-1]:.2f} TL")

    # Grafik çizim
    plt.figure(figsize=(14, 8))
    plt.plot(veri['Close'], label='Kapanış Fiyatı', color='blue')
    plt.plot(veri['MA50'], label='50 Günlük Ort.', color='orange')
    plt.plot(veri['MA200'], label='200 Günlük Ort.', color='green')
    plt.fill_between(veri.index, veri['UpperBand'], veri['LowerBand'], color='gray', alpha=0.3, label='Bollinger Bantları')
    plt.title(f"{hisse_adi} Fiyat Grafiği ve Göstergeler")
    plt.legend()
    plt.show()

# Kullanıcıdan hisse sembolü alma
hisse = input("Analiz etmek istediğiniz hisse senedi sembolünü girin (örn: 'GARAN.IS'): ")
teknik_analiz(hisse)
Osman Bayrak
Osman Bayrak

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

Articles: 154