Mobil Menü

Python ile Düşeni Kıran Hisse Senedi Tespit ve Görselleştirme Programı

Finansal piyasalarda yatırım yaparken, doğru analiz yöntemlerini kullanmak, yatırımcıların başarılı olmasında kritik bir rol oynar. Bu bağlamda, hisse senedi fiyatlarının trendlerini belirlemek, yatırım kararlarını etkileyen önemli bir faktördür. Özellikle düşen trendlerin tespit edilmesi, yatırımcıların potansiyel alım fırsatlarını değerlendirmelerine yardımcı olabilir. Bu yazıda, Python ile yazılmış bir kod örneği aracılığıyla düşen trendleri belirleme ve görselleştirme sürecini inceleyeceğiz.

Kodun Amacı ve İşleyişi

Aşağıda paylaşılan Python kodu, belirli hisse senedi sembollerinin fiyat verilerini analiz ederek düşen trendleri tespit etmeyi amaçlamaktadır. Kod, Yahoo Finance üzerinden hisse senedi verilerini çekmekte ve bu verileri kullanarak 20 günlük hareketli ortalamaları hesaplamaktadır. Düşen bir trendin yukarı doğru kesildiği noktaları belirleyerek, yatırımcılara potansiyel alım fırsatları sunmaktadır.

Veri Çekme Süreci

Kod, öncelikle bir dizi hisse senedi sembolü tanımlamaktadır. Ardından, bu semboller için Yahoo Finance üzerinden 2022 yılının başından 2023 yılının sonuna kadar olan kapanış fiyatları verileri çekilmektedir. Bu aşama, yatırımcıların analiz yapabilmesi için gerekli olan tarihsel verilerin toplanmasını sağlar.

Düşen Trendin Belirlenmesi

Düşen trendleri belirlemek için find_downtrend adlı bir fonksiyon tanımlanmıştır. Bu fonksiyon, her bir hisse senedi için kapanış fiyatlarının 20 günlük hareketli ortalamasını hesaplar. Eğer trendin eğimi negatifse, bu durum düşen bir trendi işaret eder. Fonksiyon, ayrıca yukarı doğru kesen noktaları tespit ederek, düşen trendin potansiyel bir dönüşüm noktasını belirler. Bu noktalar, yatırımcılar için alım fırsatları olarak değerlendirilebilir.

Sonuçların Görselleştirilmesi

Kod, düşen trendleri yukarı doğru kesen hisse senetlerini belirledikten sonra, bu hisse senetlerinin kapanış fiyatları ve 20 günlük hareketli ortalamalarını görselleştirmektedir. Her bir hisse senedi için ayrı grafikler oluşturularak, yatırımcıların fiyat hareketlerini ve trend dönüşümlerini daha iyi anlamalarına olanak tanır. Grafikler, kapanış fiyatlarını mavi renkte, hareketli ortalamayı ise kırmızı renkte göstererek, trendin yönünü net bir şekilde ortaya koyar.

Sonuç

Bu Python kodu, yatırımcılara düşen trendleri belirleme ve analiz etme konusunda etkili bir araç sunmaktadır. Düşen trendlerin tespit edilmesi, yatırımcıların piyasa hareketlerini daha iyi anlamalarına ve stratejilerini buna göre belirlemelerine yardımcı olur. Ayrıca, bu tür teknik analizler, yatırımcıların risklerini minimize etmelerine ve potansiyel kazançlarını artırmalarına olanak tanır. Sonuç olarak, hisse senedi yatırımlarında daha bilinçli kararlar almak için bu tür araçların kullanılması büyük önem taşımaktadı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 pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf

# Hisse senedi sembollerini tanımlayın
symbols = [
    "ADESE.IS", "AFYON.IS", "AKCNS.IS", "AKFYE.IS", "AKSA.IS", "AKSEN.IS", "ALBRK.IS", "ALCTL.IS",
    "ALKA.IS", "ALKIM.IS", "ANELE.IS", "ARASE.IS", "ARDYZ.IS", "ARENA.IS", "ASELS.IS", "ASGYO.IS",
    "ASUZU.IS", "ATAKP.IS", "ATATP.IS", "ATEKS.IS", "AVPGY.IS", "AYEN.IS", "BAKAB.IS", "BANVT.IS",
    "BARMA.IS", "BASGZ.IS", "BEGYO.IS", "BEYAZ.IS", "BIENY.IS", "BIMAS.IS", "BINHO.IS", "BIOEN.IS",
    "BMSTL.IS", "BOBET.IS", "BORLS.IS", "BORSK.IS", "BOSSA.IS", "BRLSM.IS", "BUCIM.IS", "CANTE.IS",
    "CCOLA.IS", "CEMAS.IS", "CEMTS.IS", "CIMSA.IS", "CLEBI.IS", "CMBTN.IS", "CWENE.IS", "DAPGM.IS",
    "DARDL.IS", "DESA.IS", "DGGYO.IS", "DGNMO.IS", "DOAS.IS", "DYOBY.IS", "EBEBK.IS", "EGEPO.IS",
    "EGGUB.IS", "EGPRO.IS", "EKOS.IS", "ELITE.IS", "ENJSA.IS", "ERCB.IS", "EREGL.IS", "ESCOM.IS",
    "EUPWR.IS", "FMIZP.IS", "FONET.IS", "FZLGY.IS", "GENIL.IS", "GENTS.IS", "GEREL.IS", "GESAN.IS",
    "GOLTS.IS", "GRSEL.IS", "GRTRK.IS", "GUBRF.IS", "HATSN.IS", "HKTM.IS", "HRKET.IS", "HUNER.IS",
    "IEYHO.IS", "IHYAY.IS", "IMASM.IS", "INGRM.IS", "INTEM.IS", "ISDMR.IS", "ISKPL.IS", "ISSEN.IS",
    "IZFAS.IS", "JANTS.IS", "KAREL.IS", "KARSN.IS", "KATMR.IS", "KAYSE.IS", "KBORU.IS", "KCAER.IS",
    "KFEIN.IS", "KLKIM.IS", "KNFRT.IS", "KONKA.IS", "KONTR.IS", "KONYA.IS", "KOPOL.IS", "KOTON.IS",
    "KRDMA.IS", "KRDMB.IS", "KRDMD.IS", "KRGYO.IS", "KRVGD.IS", "KTLEV.IS", "KUTPO.IS", "KUYAS.IS",
    "KZBGY.IS", "LILAK.IS", "LINK.IS", "LKMNH.IS", "LOGO.IS", "LYDHO.IS", "MAKIM.IS", "MAVI.IS",
    "MEDTR.IS", "MEGMT.IS", "MEKAG.IS", "MERCN.IS", "MIATK.IS", "MNDRS.IS", "MNDTR.IS", "MOBTL.IS",
    "MPARK.IS", "NETAS.IS", "NTGAZ.IS", "NUGYO.IS", "NUHCM.IS", "OBAMS.IS", "ODAS.IS", "OFSYM.IS",
    "ONCSM.IS", "ORGE.IS", "OTKAR.IS", "OYAKC.IS", "OZSUB.IS", "PAGYO.IS", "PARSN.IS", "PASEU.IS",
    "PEKGY.IS", "PENTA.IS", "PETKM.IS", "PETUN.IS", "PGSUS.IS", "PLTUR.IS", "PNSUT.IS", "POLHO.IS",
    "PRKAB.IS", "QUAGR.IS", "RALYH.IS", "RUBNS.IS", "RYGYO.IS", "SANFM.IS", "SANKO.IS", "SASA.IS",
    "SELEC.IS", "SMRTG.IS", "SNGYO.IS", "SNICA.IS", "SOKE.IS", "SONME.IS", "SRVGY.IS", "SUNTK.IS",
    "SURGY.IS", "SUWEN.IS", "TABGD.IS", "TEZOL.IS", "THYAO.IS", "TKFEN.IS", "TMSN.IS", "TRILC.IS",
    "TUKAS.IS", "TUPRS.IS", "TUREX.IS", "TURGG.IS", "ULUSE.IS", "USAK.IS", "VAKKO.IS", "VBTYZ.IS",
    "VESBE.IS", "VESTL.IS", "YATAS.IS", "YEOTK.IS", "YKSLN.IS", "YUNSA.IS"
]

# Hisse senedi verilerini çekin
data = {}
for symbol in symbols:
    data[symbol] = yf.download(symbol, start="2022-01-01", end="2023-12-31")

# Düşen trendi belirlemek için bir fonksiyon
def find_downtrend(data):
    downtrend_symbols = []
    for symbol, df in data.items():
        # NaN değerleri kontrol et
        if df['Close'].isnull().all() or df['Close'].count() < 20:
            continue  # Yeterli veri yoksa atla

        df['Trend'] = df['Close'].rolling(window=20).mean()  # 20 günlük hareketli ortalama
        df = df.dropna()  # NaN değerleri kaldır

        if df['Trend'].empty:
            continue  # Trend boşsa atla

        trend_slope = np.polyfit(range(len(df['Trend'])), df['Trend'], 1)[0]  # Trendin eğimi

        # Düşen trendi kontrol et
        if trend_slope < 0:
            # Yukarı doğru kesen noktaları bul
            for i in range(1, len(df)):
                if df['Close'].iloc[i] > df['Trend'].iloc[i] and df['Close'].iloc[i-1] <= df['Trend'].iloc[i-1]:
                    downtrend_symbols.append(symbol)
                    break

    return downtrend_symbols

# Düşen trendi bul
downtrend_symbols = find_downtrend(data)

# Sonuçları yazdır
print("Düşen trendi yukarı doğru kesen hisseler:")
for symbol in downtrend_symbols:
    print(symbol)

# Trendleri çizme
for symbol in downtrend_symbols:
    df = data[symbol]
    plt.figure(figsize=(12, 6))
    plt.plot(df['Close'], label='Kapanış Fiyatı', color='blue')
    plt.plot(df['Trend'], label='20 Günlük Trend', color='red')
    plt.title(f"{symbol} - Düşen Trend ve Kesişim")
    plt.xlabel('Tarih')
    plt.ylabel('Fiyat')
    plt.legend()
    plt.show()

Yasal Uyarı

Burada yer alan yatırım bilgi, yorum ve tavsiyeleri yatırım danışmanlığı kapsamında değildir. Yatırım danışmanlığı hizmeti, yetkili kuruluşlar tarafından kişilerin risk ve getiri tercihleri dikkate alınarak kişiye özel sunulmaktadır. Burada yer alan yorum ve tavsiyeler ise genel niteliktedir. Bu tavsiyeler mali durumunuz ile risk ve getiri tercihlerinize uygun olmayabilir. Bu nedenle, sadece burada yer alan bilgilere dayanılarak yatırım kararı verilmesi beklentilerinize uygun sonuçlar doğurmayabilir.

Osman Bayrak
Osman Bayrak

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

Articles: 154