Finansal piyasalarla uğraşırken bir süre sonra verilerin içinde boğulduğumu fark ettim. BIST verileri, altın fiyatları ve FED kararları derken elimdeki excel dosyaları birbirine girdi. Bir noktada bu işi otomatize etmem gerektiğine karar verdim. Bu yazıda gerçek işlerimde defalarca kullandığım ve artık elim ayağım olan 8 temel Python paketini anlatıyorum. Bu araçları kullanarak kendi analiz sistemimi nasıl kurduğumu ve nerede hata yapıp başımı yaktığımı paylaşıyorum.
1. pandas
Pandas veri analizi dünyasının merkezidir. 3.0.5 sürümü ile birlikte zaman serisi verilerini manipüle etmek, temizlemek ve istatistiksel hesaplamalar yapmak çok daha kolay hale geldi. BIST verilerini veya altın fiyatlarını bir csv dosyasından okuyup onları analiz edilebilir bir tabloya dönüştürmek için başka bir şeye ihtiyaç duymuyorum.
Bu paketi kullanırken en büyük hatam verinin tamamını belleğe yüklemeye çalışmak oldu. Büyük veri setlerinde bellek kullanımı hızla artıyor ve sistem kilitleniyor. Eğer çok büyük veri dosyalarıyla çalışıyorsanız pandas sizi yarı yolda bırakabilir. Veriyi parçalar halinde okumayı öğrenmek bu noktada hayat kurtarıyor. Veriyi temizlemek için kullandığım basit bir örnek burada.
import pandas as pd
df = pd.read_csv('fiyatlar.csv')
df['tarih'] = pd.to_datetime(df['tarih'])
df.set_index('tarih', inplace=True)
print(df.head())
Bu kod satırı bir csv dosyasını okuyor, tarih sütununu datetime formatına çeviriyor ve bu sütunu indeks haline getiriyor. Böylece zaman serisi üzerinde hızlıca filtreleme yapabiliyorum. Bellek sorununu aşmak için ise read_csv fonksiyonuna chunksize parametresini ekleyerek veriyi on binlik bloklar halinde işlemeyi alışkanlık haline getirdim. Böylece 2 gigabaytlık bir hisse senedi geçmişi dosyasını bile bilgisayarımı dondurmadan işleyebiliyorum.
2. yfinance
Yahoo Finance üzerinden piyasa verilerini çekmek için 1.7.0 sürümünü kullanıyorum. FED verileri, hisse senedi fiyatları veya altın fiyatları gibi verileri hızlıca çekmek için ideal. Birçok farklı kaynaktan veri çekmeye çalışırken yaşadığım uyumsuzluk sorunlarını bu kütüphane sayesinde aştım.
Ancak bu aracın ciddi bir riski var. Veri sağlayıcısı olan Yahoo tarafında bir API sınırlaması veya yapı değişikliği olduğunda kodunuz bir anda çalışmayı durdurabiliyor. Geçen sene bir sabah uyandığımda tüm sistemimin hata verdiğini gördüm çünkü site yapısını değiştirmişti. Bu yüzden her zaman bir B planınız olmalı.
3. ta
Teknik analiz dünyasına adım attığımda RSI, MACD ve Bollinger Bantları gibi indikatörleri manuel hesaplamaya çalıştım ve çok vakit kaybettim. 0.11.0 sürümü ile bu kütüphane trading stratejilerimi çok hızlandırdı. İndikatörleri tek satırla stratejime ekleyebiliyorum.
Buradaki en büyük tuzak, indikatörlerin matematiksel mantığını anlamadan sadece sinyal üretmek için kullanmak. Geçmişte sadece RSI değeri 30un altına düştü diye alım yaptım ve büyük zararlar ettim. İndikatörlerin piyasa koşullarına göre nasıl tepki verdiğini bilmeden kullanmak sizi hatalı al sat kararlarına iter.
4. backtrader
Stratejilerimi test etmek için 1.9.78.123 sürümünü kullanıyorum. Geliştirdiğim trading fikirlerini geçmiş veriler üzerinde simüle etmek, stratejinin gerçekten para kazandırıp kazandırmayacağını anlamak için tek yol.
Dokümantasyonu oldukça karmaşık olduğu için ilk başlarda çok zorlandım. Canlı piyasa entegrasyonu yapmak istiyorsanız ileri seviye yazılım bilgisi gerekiyor. Basit bir backtest için harika olsa da, canlı sisteme geçiş aşamasında hata yapmaya çok müsait.
5. requests
Veri otomasyonu kurarken BIST veya diğer veri sağlayıcılarının APIlerine HTTP istekleri göndermek için 2.34.2 sürümünü kullanıyorum. İnsanlar için tasarlanmış olması işimi çok kolaylaştırıyor.
Burada yaşadığım en büyük sorun IP engellenmesi oldu. Çok hızlı istek gönderdiğimde sunucular beni bot zannedip engelledi. Bu yüzden istekler arasına mutlaka bekleme süreleri eklemeyi öğrendim. Hatalı istekleriniz sunucular tarafından fark edilirse IP adresiniz kara listeye alınabilir.
6. SQLAlchemy
Analiz ettiğim finansal verileri veya trading sonuçlarını bir veritabanına kaydetmek için 2.0.52 sürümünü kullanıyorum. Verileri her seferinde dosyadan okumak yerine veritabanında arşivlemek çok daha düzenli.
SQL bilginiz zayıfsa bu kütüphane başınıza bela olabilir. Karmaşık sorgular yazarken veritabanı performansını ciddi şekilde düşürebilirsiniz. Veritabanı tasarımını düzgün yapmazsanız veriye erişim süreniz uzar ve analizleriniz yavaşlar.
7. schedule
Yazdığım veri çekme veya analiz kodlarının belirli saatlerde otomatik çalışması için 1.2.2 sürümünü kullanıyorum. Çok basit bir otomasyon aracı.
Ancak bu kütüphane script çalıştığı sürece aktif. Eğer hata oluşup program kapandığında zamanlanmış görevleriniz de duruyor. Bir sunucu üzerinde 7/24 çalışacak bir yapı kurmak istiyorsanız sadece bu kütüphane yeterli olmaz, sistemin sürekli ayakta kalmasını sağlayan dış araçlara da ihtiyacınız olur. Bu durumu aşmak için sistemin hata verip vermediğini kontrol eden bir loglama mekanizması kurdum. Program her sabah saat dokuzda çalışmaya başladığında, eğer bir hata oluşursa bana otomatik bir bildirim gönderen küçük bir hata yakalayıcı ekledim. Bu sayede scriptin sessizce durması yerine, nerede takıldığını anında görüp müdahale edebiliyorum.
8. plotly
Finansal verileri ve trading sonuçlarını görselleştirmek için 7.0.0 sürümünü tercih ediyorum. İnteraktif grafikler sayesinde verinin detayına inmek çok kolaylaşıyor.
Çok fazla veri noktası içeren grafiklerde tarayıcıyı yavaşlatabiliyor. Binlerce satırlık veriyi tek bir grafikte göstermeye çalıştığımda tarayıcımın donduğunu hatırlıyorum. Bu yüzden veriyi görselleştirmeden önce mutlaka filtreleyip sadeleştiriyorum. Özellikle 500 günlük hareketli ortalamaları ve fiyat değişimlerini aynı anda çizdirdiğimde, plotly içindeki downsampling özelliklerini kullanmaya başladım. Bu özellik, grafiğin görsel kalitesini bozmadan ekrandaki nokta sayısını azaltarak tarayıcının performansını korumamı sağladı. Önceden tüm veriyi render etmeye çalışırken 10 saniye süren grafik yüklemeleri, bu yöntemle 1 saniyenin altına düştü.
Toparlarsak
Bu 8 araç benim finansal analizdeki isviçre çakım. Arac seçimi bir zeka meselesi değil, tamamen tekrar meselesi. Hangi aracı nerede kullanacağınızı ezberleyene kadar pratik yapmalısınız. Aynı işi yapmak için hep aynı aracı kullanmak size inanılmaz zaman kazandırıyor.
Bundan sonra yapmanız gereken ilk adım, bu kütüphanelerden sadece birini seçip bugün basit bir veri çekme scripti yazmak. Örneğin yfinance ile altın fiyatlarını çekip pandas ile ortalamasını hesaplayın. Karmaşık stratejilere geçmeden önce bu temel taşları oturtun. Hata yapmaktan korkmayın, ben bu hataların hepsini yaparak öğrendim. Şimdi sıra sizde. Yarın sabah ilk iş olarak yfinance ile son bir haftalık altın verisini çekin ve pandas ile bu verinin standart sapmasını hesaplayın. Bu küçük adım, sisteminizi kurmanın ilk tuğlası olacak. Kendi analiz sisteminizi oluştururken sadece hazır kütüphanelere güvenmeyin, verinin kaynağını ve işlenme mantığını her zaman sorgulayın. Başarılı bir analiz süreci, sadece kodu yazmakla bitmez, aynı zamanda çıkan sonuçların piyasa gerçekleriyle ne kadar örtüştüğünü test etmeyi de gerektirir. İlk denemelerinizde hata alırsanız pes etmeyin, çünkü finansal verilerle uğraşırken hata yapmak aslında sistemin nasıl çalışmadığını öğrenmenin en hızlı yoludur. Küçük adımlarla başlayın ve her gün üzerine bir tuğla daha ekleyerek kendi finansal analiz altyapınızı güçlendirin. Unutmayın, disiplinli bir kodlama süreci, piyasadaki gürültüyü azaltmanın en kesin yoludur. Sadece veriye odaklanın ve araçlarınızı ustalıkla kullanın.













