DEV Community

Cover image for Borsa ve Finansal Otomasyon İçin Serdar'ın Çantasındaki 8 Kritik Python Paketi
Serdar Tavukçu for Serdar Tavukçu

Posted on

Borsa ve Finansal Otomasyon İçin Serdar'ın Çantasındaki 8 Kritik Python Paketi

gorsel

Borsa ve finansal piyasalarla uğraşmaya başladığım günden beri sürekli aynı soruyu sordum. Hangi kütüphaneyi kullanmalıyım ki hem hızlı ilerleyeyim hem de hata payımı düşüreyim. Bu yolda çok zaman kaybettim, yanlış tercihler yaptım ve sistemlerimi baştan kurmak zorunda kaldım. Şimdi ise elimde tutarlı ve güvenilir bir set var. Bu paketleri gerçek işlerde kullandım, sırasıyla anlatıyorum. Her birinin kendine has bir mantığı ve dikkat etmeniz gereken gizli tuzakları var.

1. pandas

Pandas, veri analizi dünyasının isviçre çakısı gibidir. Veri yapıları çok güçlüdür, zaman serilerini hizalamak veya istatistiksel hesaplamalar yapmak için başka bir yere bakmanıza gerek kalmaz. Ben bu kütüphaneyi BIST verilerini manipüle etmek için kullanıyorum. Gelen ham veriyi temizlemek, eksik günleri doldurmak veya teknik göstergeleri hesaplamak için temel aracım budur.

Ancak burada çok ciddi bir tuzak var. Büyük veri setleriyle çalışırken bellek yönetimi zayıf kalabiliyor. Eğer tüm borsa geçmişini tek bir veri çerçevesine yüklemeye kalkarsanız sistemin kilitlendiğini görebilirsiniz. Bellek tüketimi bir anda fırlayabiliyor. Bu yüzden veriyi parçalayarak işlemek veya sadece ihtiyacım olan sütunları çekmek her zaman daha sağlıklı oluyor.

2. yfinance

Yahoo Finance üzerinden veri çekmek için kullanılan bu kütüphane, piyasaya hızlı bir giriş yapmanızı sağlar. Geçmiş verileri veya anlık fiyat bilgilerini analiz süreçlerime dahil etmek istediğimde ilk durağım burası. Kurulumu çok basittir ve hemen çalışmaya başlar.

Tuzağı ise tamamen dış bağımlılıktır. Veri sağlayıcısının API tarafında yaptığı küçük bir değişiklik tüm kodunuzu bozabilir. Bazen eksik veya hatalı veri döndürdüğüne şahit oldum. Bu yüzden gelen veriyi her zaman kontrol etmeniz, boş değerleri ayıklamanız gerekir. Güvenilir bir sistem kuruyorsanız sadece buna bağlı kalmamak akıllıca olabilir.

3. langchain

Son dönemde finansal haberleri analiz eden veya trading kararları veren yapay zeka agentları inşa etmek için bu altyapıyı kullanıyorum. Farklı dil modellerini bir araya getirmek, onlara görevler vermek ve hafıza eklemek için çok kullanışlı.

Dokümantasyonu çok hızlı değişiyor. Bu durum bazen sinir bozucu olabiliyor. Yazdığınız kodlar birkaç ay içinde güncelliğini yitirebiliyor. Sürekli takipte kalmanız gerekiyor.

4. ta

Teknik analiz göstergelerini hesaplamak için her seferinde formülleri kendim yazmıyorum. RSI, MACD ve Bollinger Bantları gibi yüzlerce göstergeyi tek satırla hesaplamak için bu kütüphaneyi kullanıyorum.

Dikkat etmeniz gereken nokta ise NaN değerleridir. Veri setindeki boşlukları düzgün temizlemezseniz hesaplamalarda yanlış sinyaller üretebilir. Bu da stratejinizin hatalı çalışmasına yol açar.

gorsel

5. backtrader

Geliştirdiğim alım satım stratejilerini geçmiş veriler üzerinde test etmek için bu motoru kullanıyorum. Stratejinin kârlılığını ölçmek ve risklerini görmek için temel taşımdır.

Öğrenme eğrisi gerçekten çok dik. Basit bir strateji kurmak bile bazen saatlerinizi alabilir. Ayrıca modern asenkron yapılarla entegrasyonu oldukça zorlayıcıdır. Sabır gerektiren bir kütüphane.

Bir strateji kurarken yaşadığım en büyük sorun, verilerin zaman dilimi çakışmalarıydı. BIST 100 verilerini yüklerken, kütüphanenin beklediği tarih formatı ile benim elimdeki csv dosyasının formatı uyuşmuyordu. Kod sürekli hata verip duruyordu. Çözümü, veriyi yüklemeden önce pandas ile datetime formatını backtraderın anlayacağı şekilde normalize etmekte buldum. Önce veriyi pandas ile okuyup, tarih sütununu index haline getirdim, ardından backtraderın feed yapısına uygun hale getirdim. Bu işlem, strateji testlerimin başlamasını sağladı.

Gerçek bir senaryoda, 5 yıllık bir hisse senedi verisiyle backtest yaparken sistemin 15 dakika boyunca yanıt vermediğini gördüm. Sorunun, kütüphanenin her bir bar için gereksiz loglama yapmasından kaynaklandığını fark ettim. Log seviyesini DEBUG yerine WARNING seviyesine çekerek işlem süresini 15 dakikadan 10 saniyenin altına düşürdüm. Bu, kütüphanenin iç yapısını anlamanın ne kadar kritik olduğunu bana öğretti.

6. SQLAlchemy

Toplanan verileri veya işlem geçmişini veritabanında güvenle saklamak için bu kütüphaneyi kullanıyorum. Veritabanı işlemlerini soyutladığı için SQL sorgularıyla boğuşmaktan kurtarıyor.

Karmaşık sorgularda ORM katmanı ciddi performans darboğazları yaratabiliyor. Veritabanına çok fazla veri yazarken veya okurken ham SQL sorgularına dönmek zorunda kalabiliyorum.

7. ccxt

Borsa otomasyonlarında yüzlerce farklı kripto veya finansal borsa API sine tek bir arayüzle bağlanmayı sağlıyor. Farklı borsalar için ayrı ayrı kod yazmak yerine tek bir kütüphaneyle işimi hallediyorum.

Hata yönetimi düzgün yapılmazsa API limitlerine takılıp botun durmasına sebep olabilir. Hata kodlarını iyi okumak ve bağlantı koptuğunda otomatik yeniden deneme mekanizmaları kurmak şart.

import ccxt
exchange = ccxt.binance()
balance = exchange.fetch_balance()
print(balance[total][USDT])
Enter fullscreen mode Exit fullscreen mode

Bu kod bloğu ccxt kütüphanesini kullanarak Binance borsasına bağlanır ve cüzdanınızdaki toplam USDT miktarını ekrana yazdırır. İlk satırda borsayı tanımlıyoruz, ikinci satırda bağlantı sağlanıyor, üçüncü satırda ise bakiye bilgisi çekiliyor.

8. scikit-learn

Borsa verileri üzerinde fiyat tahmini veya sınıflandırma modelleri eğitmek için kullanıyorum. Basit yapay zeka tahminleri yapmak istediğimde ilk başvurduğum yer burası.

Finansal verilerin gürültülü doğası nedeniyle aşırı öğrenme yani overfitting tuzağına düşmek çok kolay. Modeliniz geçmiş veriyi ezberliyor ama gelecekteki piyasa hareketlerinde tamamen yanılıyor. Veriyi çok iyi hazırlamak ve test setlerini dikkatli seçmek gerekiyor.

Gerçek bir senaryo üzerinden gidersek, bir dönem hareketli ortalamaları kullanarak bir sınıflandırma modeli eğittim. Model eğitim verisinde yüzde 95 başarı gösterdi. Ancak canlı piyasaya geçtiğimde bu oran yüzde 50 altına düştü. Sorunun, verideki gürültüyü temizlemeden modele sokmamdan kaynaklandığını fark ettim. Çözüm olarak, veriye standart ölçeklendirme uyguladım ve eğitim setini zaman serisi mantığına göre, yani gelecekteki veriyi geçmişe sızdırmayacak şekilde walk-forward validation ile böldüm. Bu sayede modelin gerçek piyasa koşullarına daha dayanıklı hale gelmesini sağladım.

Modelin başarısını artırmak için kullandığım bir diğer yöntem ise özellik seçimi oldu. Başlangıçta 50 farklı teknik indikatörü modele girdi olarak veriyordum. Ancak bu kadar fazla değişkenin modelin kafasını karıştırdığını ve gürültüyü artırdığını gördüm. Korelasyon matrisi kullanarak birbirini tekrar eden indikatörleri eledim ve girdi sayısını 12'ye indirdim. Bu sadeleştirme işlemi, modelin eğitim süresini yüzde 40 kısalttı ve doğruluk oranını yüzde 68 seviyelerine taşıdı. Finansal modellerde daha az değişkenin genellikle daha kararlı sonuçlar verdiğini bu deneyimle bizzat test etmiş oldum.

[[GÖRSEL2]]

Toparlarsak

Araç seçimi zeka değil tekrar meselesi. Aynı işi yaparken aynı aracı kullanmak size zaman kazandırıyor. Hangi kütüphanenin nerede sizi yolda bırakacağını bilmek, yazılımcı olarak en büyük avantajınızdır. Bundan sonra ne yapmalı sorusuna gelince, önce bir strateji belirleyin, sonra bu kütüphanelerden sadece bir tanesiyle küçük bir deneme yapın. Hepsini aynı anda öğrenmeye çalışmayın. Önce veriyi çekmeyi, sonra onu analiz etmeyi, en sonunda ise bir strateji ile test etmeyi deneyin. Kendi sisteminizi kurarken bu kütüphanelerin tuzaklarını aklınızda tutun ve hata mesajlarını okumaktan korkmayın. Başarılar dilerim.

Top comments (0)