Borsa verileriyle uğraşırken bir süre sonra kendi araç setini kurmak zorunda kalıyorsun. Başta basit bir script ile başlayan bu süreç, zamanla devasa bir veri yığınına dönüşüyor. Bu paketleri gerçek işlerde kullandım, sırasıyla anlatıyorum. Her biri farklı bir sorunu çözüyor ama hepsinin ortak noktası iş akışını hızlandırmak.
1. Gerçek Hayat Senaryosu: Veri Akışında Nerede Kayboluyoruz
Borsa verisiyle uğraşırken karşılaştığım en büyük problem, verinin dağınıklığı. Bir sabah uyandığımda BIST üzerindeki hisse hareketlerini analiz etmek istedim. Ancak veriler farklı kaynaklarda, farklı formatlarda duruyordu. Bir kısmı PDF raporlarında, bir kısmı web sitelerinde, bir kısmı ise sadece anlık API üzerinden akıyordu. Bu verileri bir araya getirmek için önce yfinance ile temel fiyatları çektim. Ardından requests ile haber sitelerinden metinleri kazıdım. Bu süreçte veriyi tutarlı bir yapıya sokmak için pandas kullandım. Eğer bu kütüphaneler olmasaydı, veriyi temizlemekle uğraşırken günün yarısını kaybederdim. Gerçek hayatta bu problem, özellikle piyasa açılışından hemen önce verinin güncelliğini kontrol ederken karşıma çıkıyor. Eğer veriyi doğru zamanda çekemezsem, stratejim yanlış fiyat üzerinden tetikleniyor ve bu da hatalı alım satım kararlarına yol açıyor.
2. yfinance
Bu kütüphane Yahoo Finance üzerinden anlık ve geçmiş BIST veya global veri çekme işlemlerini hızla prototiplemek için kullanılır. Sürüm 1.8.0 ile çalışıyorum. Bir strateji geliştirmeye başladığımda ilk yaptığım şey geçmiş fiyat verisini hızlıca çekip grafiğe dökmek oluyor.
Bunu neden kullanıyorum çünkü veri çekme süreci çok zahmetli olabiliyor. Buradaki en büyük tuzak ise resmi bir API olmaması. Yahoo veri yapısını değiştirdiği an kodun aniden çalışmayı durdurabilir. Bu yüzden projelerinde buna her zaman bir yedek plan eklemeyi unutmamalısın.
3. pandas
Finansal veri analizi yaparken pandas 3.1.1 sürümü benim için temeldir. Çekilen ham finansal verileri zaman serisi analizine uygun tablolar haline getirmek ve manipüle etmek için kullanılır. Veri temizliği yaparken veya fiyat hareketlerini ortalamalarla kıyaslarken sürekli bu kütüphaneye başvuruyorum.
Tuzak ise şu, büyük veri setlerinde bellek yönetimi zayıftır. Eğer verimli indexleme yapmazsan sistemini bir anda kilitleyebilir. Belleği tüketmemek için veriyi parçalar halinde işlemeyi öğrendiğimde birçok hatayı çözdüm.
4. pandas-datareader
Pandas ile uyumlu çalışan 0.11.1 sürümü, FRED, World Bank ve OECD gibi farklı finansal veri kaynaklarını tek bir arayüzden çekmek için kullanılır. Farklı makroekonomik göstergeleri borsa verileriyle birleştirmek istediğimde bu aracı kullanıyorum.
Ancak bağlı olduğu dış kaynakların API politikaları değiştiğinde veri akışında kopmalar yaşanabiliyor. Veri kaynağının güncel durumunu takip etmek zorunda kalmak bazen can sıkıcı olabiliyor.
5. requests
Python dünyasının en sevdiğim kütüphanelerinden biri olan requests 2.34.2, API desteği sunan borsa platformlarına doğrudan HTTP isteği atarak özel veri setlerini almak için kullanılıyor.
import requests response = requests.get(api_url, headers=headers) data = response.json() Bu kod bloğu, belirlenen bir API adresine başlık bilgilerini ekleyerek istek atıyor ve dönen yanıtı JSON formatında alıyor. Ardından bu veriyi analiz etmek için kullanıyorum.
Tuzak ise çok sık istek atıldığında sunucular tarafından IP adresinin banlanması. Hız limitlerine dikkat etmezsen bir anda veri akışın kesilir.
6. ta
Teknik analiz kütüphanesi olan ta 0.11.0, RSI, MACD ve Bollinger Bantları gibi teknik analiz göstergelerini ham fiyat verisi üzerinden saniyeler içinde hesaplar. Strateji geliştirirken göstergeleri manuel hesaplamak yerine bu kütüphaneyi kullanmak hata payını düşürüyor.
Buradaki en büyük tuzak eksik veya hatalı veri girişlerinde yanlış sinyaller üretmesidir. Veri temizliği kritiktir. Eğer elindeki veride boşluklar varsa kütüphane saçma sonuçlar verebilir.
7. beautifulsoup4
API sağlamayan finansal haber sitelerinden veya BIST duyuru sayfalarından yapılandırılmamış veriyi kazımak için 4.15.0 sürümünü kullanıyorum. Bazen veriye ulaşmanın tek yolu sitenin HTML kodlarını okumaktır.
Tuzak çok açık, hedef sitenin HTML yapısı değiştiğinde yazdığın tüm kazıma scriptleri bozulur. Sürekli bakım gerektiren bir yöntem olduğu için sadece mecbur kaldığımda kullanıyorum.
8. SQLAlchemy
Çekilen borsa verilerini kalıcı hale getirmek için Python kodlarını SQL veritabanlarıyla bağlayan SQLAlchemy 2.1.8 sürümünü kullanıyorum. Verileri bir kez çekip tekrar tekrar indirmek yerine yerel veritabanımda saklamak hız kazandırıyor.
Tuzak ise ORM kullanımı. Doğrudan SQL sorgularına göre yüksek hacimli verilerde performans kaybına yol açabiliyor. Çok hızlı veri yazman gereken durumlarda dikkatli olmalısın.
9. backtrader
Geliştirdiğim stratejileri geçmiş veri üzerinde test ederek otomasyonun başarısını ölçmek için 1.9.78.123 sürümünü kullanıyorum. Stratejiyi yazdıktan sonra gerçek parayla denemeden önce bu motorla test etmek şart.
Tuzak ise öğrenme eğrisinin dik olmasıdır. Karmaşık stratejilerde hata ayıklaması oldukça zor olabilir. İlk başladığımda çok zorlanmıştım ama sonuçları görünce buna değdiğini anladım.
10. Yolda Çıkan Hatalar ve Giderilme Yöntemleri
Bu kütüphaneleri kullanırken en çok başımı ağrıtan konu zaman damgalarının uyuşmazlığı oldu. Örneğin yfinance üzerinden çektiğim veri ile kendi veritabanımdaki zaman formatı bazen çakışıyordu. Bir gün, veritabanına veri yazarken saat dilimi farkı yüzünden tüm geçmiş verilerim kaydı. Hatayı gidermek için tüm zaman damgalarını UTC formatına çeviren bir fonksiyon yazdım. Bir diğer hata ise SQLAlchemy ile veritabanına büyük miktarda veri yazarken karşılaştığım bağlantı kopmalarıydı. Bu sorunu, veriyi küçük paketler halinde commit eden bir döngü kurarak aştım. Her hata, aslında sistemin daha dayanıklı olması için bir fırsat oldu. Kod yazarken hatayı görmezden gelmek yerine, hata loglarını düzenli tutarak nerede tıkandığımı anlamaya başladım.
11. Karşılaştırma: Alternatif Yöntemler ve Tercihlerim
Piyasada birçok alternatif araç var ama ben bu seti seçtim. Örneğin veri kazıma için sadece requests kullanabilirdim ancak beautifulsoup4 ile HTML etiketlerini ayrıştırmak çok daha temiz sonuç veriyor. Backtrader yerine kendi test mekanizmamı da yazabilirdim fakat backtrader, piyasadaki komisyon oranlarını ve kayma maliyetlerini hesaba kattığı için daha gerçekçi sonuçlar sunuyor. Diğer yöntemler daha basit görünebilir ama uzun vadede bakım maliyetleri çok yüksek. Ben bu araçları, birbirleriyle uyumlu çalıştıkları ve topluluk desteği güçlü olduğu için tercih ettim. Her bir aracın kendi sınırları var, ancak bu sınırları bildiğinde onları aşmak daha kolay oluyor.
Toparlarsak
Bu araçları birleştirerek kendi veri hattını kurabilirsin. Borsa verisiyle uğraşırken en büyük sorun veri tutarsızlığıdır. Bu yüzden her aşamada veriyi kontrol etmeyi unutma.
Bundan sonra ne yapmalı sorusuna gelirsek, öncelikle bu kütüphanelerden sadece birini seçip basit bir veri çekme işlemi yap. Ardından veriyi pandas ile bir tabloya al. Strateji geliştirme aşamasına geçmeden önce verinin temiz olduğundan emin ol. Arac seçimi zeka değil tekrar meselesi. Aynı işe aynı aracı kullanmak zaman kazandırıyor. Bir sonraki adımın, bu araçlarla basit bir fiyat hareketini takip eden bir script yazmak olsun. Başarılar dilerim.


