Mobil Menü

Python ile Hisse Senedi Grafik Analiz Programı

Finansal piyasalarda başarılı olmak için doğru analiz yöntemlerine sahip olmak kritik öneme sahiptir. Bu yazıda, Python programlama dili kullanarak hisse senedi verilerini analiz etmek ve görselleştirmek için geliştirdiğim kodu tanıtacağım. Bu kod, yfinance, pandas, numpy, matplotlib ve mplfinance gibi güçlü kütüphaneleri kullanarak yatırımcılara kapsamlı bir analiz aracı sunmaktadır.

Hisse Senedi Verilerini İndirme

Kodun başlangıcında, yfinance kütüphanesi aracılığıyla belirli bir hisse senedinin verileri indirilir. Kullanıcıdan alınan hisse kodu, zaman aralığı ve veri süresi bilgileri ile download_data fonksiyonu, yatırımcıların geçmiş fiyat hareketlerini incelemesine olanak tanır. Bu, yatırım kararlarını destekleyen önemli bir adımdır.

Üssel Hareketli Ortalama (EMA) Hesaplama

Yatırımcıların piyasa trendlerini daha iyi anlamalarına yardımcı olmak için, kodda ema fonksiyonu ile Üssel Hareketli Ortalama (EMA) hesaplanmaktadır. 20, 50, 100 ve 200 periyotlu EMA’lar, fiyatların zaman içindeki ortalamasını alarak trendin yönünü belirlemeye yardımcı olur. Bu göstergeler, yatırımcıların alım-satım stratejilerini geliştirmelerine katkı sağlar.

Supertrend Göstergesi ile Trend Analizi

Kodun en dikkat çekici özelliklerinden biri, supertrend fonksiyonu ile Supertrend göstergesinin hesaplanmasıdır. Supertrend, fiyat hareketlerini takip ederek alım-satım sinyalleri oluşturur. Bu gösterge, yatırımcıların piyasa trendlerini daha iyi anlamalarına ve potansiyel alım-satım fırsatlarını değerlendirmelerine yardımcı olur.

Fibonacci Kanalları ile Destek ve Direnç Seviyeleri

Ayrıca, fibonacci_channel fonksiyonu kullanılarak Fibonacci seviyeleri hesaplanmaktadır. Bu seviyeler, fiyat hareketlerinin önemli destek ve direnç noktalarını belirlemek için kullanılır. Yatırımcılar, bu seviyeleri analiz ederek daha bilinçli kararlar alabilirler.

Grafik Görselleştirme ile Analizlerinizi Güçlendirin

Son olarak, elde edilen veriler ve hesaplanan göstergeler, mplfinance kütüphanesi ile görselleştirilir. Grafik üzerinde mum çubukları, EMA’lar, Supertrend göstergesi ve Fibonacci seviyeleri bir arada sunulmaktadır. Bu görselleştirme, yatırımcıların piyasa hareketlerini daha iyi analiz etmelerine ve stratejilerini geliştirmelerine yardımcı olur.

Sonuç

Bu Python kodu, finansal analiz yapmak isteyen yatırımcılar ve analistler için güçlü bir araçtır. Kullanıcı dostu yapısı ve kapsamlı analiz yetenekleri ile piyasa trendlerini anlamak ve yatırım kararlarını desteklemek için etkili bir çözüm sunmaktadır. Hisse senedi analizi yapmak isteyen herkes için bu kod, değerli bir kaynak olacaktır.

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
import mplfinance as mpf

def download_data(ticker, interval="1h", period="1mo"):
    data = yf.download(tickers=ticker, interval=interval, period=period)
    return data

def ema(data, period, column='Close'):
    return data[column].ewm(span=period, adjust=False).mean()

def supertrend(df, period=7, atr_multiplier=3):
    high = df['High']
    low = df['Low']
    close = df['Close']

    tr1 = pd.DataFrame(high - low)
    tr2 = pd.DataFrame(abs(high - close.shift(1)))
    tr3 = pd.DataFrame(abs(low - close.shift(1)))

    tr = pd.concat([tr1, tr2, tr3], axis=1, join='inner').max(axis=1)
    atr = tr.rolling(period).mean()

    hl2 = (high + low) / 2
    final_upperband = hl2 + (atr_multiplier * atr)
    final_lowerband = hl2 - (atr_multiplier * atr)

    supertrend = pd.DataFrame(index=hl2.index)
    supertrend['supertrend'] = np.nan
    supertrend['in_uptrend'] = True

    for i in range(1, len(supertrend)):
        if close[i] > final_upperband[i - 1]:
            supertrend['supertrend'][i] = final_lowerband[i]
        elif close[i] < final_lowerband[i - 1]:
            supertrend['supertrend'][i] = final_upperband[i]
        else:
            supertrend['supertrend'][i] = supertrend['supertrend'][i - 1]
            if supertrend['in_uptrend'][i - 1] and close[i] < final_lowerband[i - 1]:
                supertrend['in_uptrend'][i] = False
            elif not supertrend['in_uptrend'][i - 1] and close[i] > final_upperband[i - 1]:
                supertrend['in_uptrend'][i] = True

    return supertrend

def fibonacci_channel(data):
    high = data['High'].max()
    low = data['Low'].min()
    diff = high - low

    levels = {
        "0.236": low + diff * 0.236,
        "0.382": low + diff * 0.382,
        "0.500": low + diff * 0.500,
        "0.618": low + diff * 0.618,
        "0.764": low + diff * 0.764,
        "1.000": high
    }

    return levels

# Kullanıcıdan hisse ve parametre bilgilerini alma
ticker = input("Lütfen hisse kodunu girin (örnek: ARDYZ.IS): ")
interval = input("Lütfen zaman aralığını girin (örnek: 1h, 5m, 1d): ")
period = input("Lütfen veri süresini girin (örnek: 1mo, 1d, 1y): ")

# Veriyi indirme
data = download_data(ticker, interval, period)

# EMA hesaplama
data['EMA20'] = ema(data, 20)
data['EMA50'] = ema(data, 50)
data['EMA100'] = ema(data, 100)
data['EMA200'] = ema(data, 200)

# Supertrend hesaplama
supertrend_df = supertrend(data)
data['Supertrend'] = supertrend_df['supertrend']

# Fibonacci kanalı hesaplama
fibonacci_levels = fibonacci_channel(data)

# Grafik oluşturma
apds = [
    mpf.make_addplot(data['EMA20'], color='blue'),
    mpf.make_addplot(data['EMA50'], color='orange'),
    mpf.make_addplot(data['EMA100'], color='green'),
    mpf.make_addplot(data['EMA200'], color='red'),
    mpf.make_addplot(data['Supertrend'], color='black'),
]

fig, ax = mpf.plot(data, type='candle', addplot=apds, returnfig=True)

colors = ['b', 'g', 'r', 'c', 'm', 'y']
for (level, value), color in zip(fibonacci_levels.items(), colors):
    ax[0].axhline(value, linestyle='--', color=color, alpha=0.7)
    ax[0].text(data.index[-1], value, f'Fibo {level}', color=color, alpha=0.7)

plt.show()
Osman Bayrak
Osman Bayrak

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

Articles: 157