DEV Community

Cover image for Serdarın 8 Adımda Finansal Otomasyon ve Yapay Zeka Araç Kutusu
Serdar Tavukçu for Serdar Tavukçu

Posted on

Serdarın 8 Adımda Finansal Otomasyon ve Yapay Zeka Araç Kutusu

Finansal piyasalarla uğraşırken bir süre sonra her şeyi elle yapmanın imkansız olduğunu anlıyorsunuz. Borsa İstanbul verilerini takip etmek, analiz etmek ve üzerine bir de yapay zeka eklemek için yıllardır kullandığım bazı kütüphaneler var. Bu kütüphaneleri gerçek işlerde, kendi sistemlerimi kurarken kullandım. Hangi aracın ne işe yaradığını, neden tercih ettiğimi ve hangi tuzaklara düşürdüğünü burada tek tek anlatıyorum.

gorsel

1. pandas

Pandas, veri analizi ve zaman serisi işlemleri için temel taşıdır. BIST verilerini temizlemek, manipüle etmek ve analiz etmek için bu kütüphane olmadan bir adım bile atamıyorum. Verileri tablo haline getirmek, eksik değerleri doldurmak veya tarih bazlı gruplamalar yapmak için sürekli bunu kullanıyorum.

Ancak büyük veri setlerinde bellek yönetimi zayıftır. Bir gün tüm geçmiş borsa verisini tek bir değişkende tutup üzerine sürekli kopyalama işlemi yaptığımda bilgisayarın kilitlendiğini gördüm. Yanlış bir copy işlemi tüm performansı düşürüyor. Veriyi parçalar halinde işlemek veya sadece ihtiyacım olan sütunları seçmek bu yüzden çok önemli. Bellek sorununu aşmak için veriyi okurken sadece gerekli sütunları seçmek ve veri tiplerini optimize etmek gerekiyor. Örneğin float64 yerine float32 kullanarak bellek kullanımını yarı yarıya düşürdüğümü ölçtüm. Pandas ile çalışırken özellikle büyük dosyalarda chunksize parametresini kullanarak veriyi parçalı okutmak, sistemin kilitlenmesini engelliyor. Bir keresinde 2 gigabaytlık bir hisse senedi geçmişini işlerken, veriyi 100 bin satırlık parçalar halinde okutarak bellek tüketimini yüzde 70 oranında düşürdüm. Bu yöntemle artık bilgisayarım zorlanmadan saatlerce veri işleyebiliyor.

2. yfinance

Yahoo Finance üzerinden hisse senedi verilerini hızlıca çekmek için bu kütüphaneyi kullanıyorum. Analiz süreçlerine başlamadan önce güncel fiyatları almam gerekiyor ve yfinance bu işi çok pratik hale getiriyor.

Buradaki en büyük tuzak veri kaynağının bazen gecikmeli olmasıdır. Bir gün canlı piyasada işlem yaparken verinin anlık olmadığını fark ettim ve stratejim boşa düştü. Ayrıca API kısıtlamaları nedeniyle çok sık istek atarsanız sistem sizi engelliyor. Bu yüzden istekler arasında mutlaka beklemeler koymak gerekiyor. Hata almamak için time.sleep fonksiyonu ile istekler arasına rastgele süreler ekledim. Böylece sunucu tarafında bir bot olduğumun anlaşılmasını zorlaştırdım ve bağlantı kopmalarını yüzde 40 oranında azalttım. Veri çekme sürecinde yaşadığım bir diğer zorluk ise eksik gün verileriydi. Bazen hafta sonu veya tatil günlerinde veri çekmeye çalıştığımda sistem hata veriyordu. Bunu gidermek için try-except blokları kullanarak boş gelen veri setlerini ayıklayan bir kontrol mekanizması kurdum. Artık veri çekme fonksiyonum, gelen yanıtın boş olup olmadığını kontrol ediyor ve eğer veri yoksa bir sonraki hisse senedine geçerek döngünün kesilmesini engelliyor. Bu küçük adım sayesinde hatalı verilerin analiz aşamasına geçmesini tamamen engelledim.

3. ta

Teknik analiz göstergelerini veri setlerine tek satırla eklemek için bu kütüphaneyi kullanıyorum. RSI veya MACD gibi değerleri kendim hesaplamak yerine bu kütüphanenin hazır fonksiyonlarını kullanmak zaman kazandırıyor.

Tuzak ise şu, hesaplama mantığını anlamadan kullanmak çok tehlikeli. Bir keresinde indikatörün ürettiği sinyali körü körüne takip ettim ve yanlış bir strateji kurduğum için zarar ettim. İndikatörlerin neyi ölçtüğünü bilmeden sadece kütüphaneye güvenmek büyük bir hata. Gerçek bir senaryoda, 14 günlük RSI değerini manuel hesapladığımda kütüphane ile sonuçların farklı çıktığını gördüm. Bunun sebebi, kütüphanenin varsayılan olarak kullandığı fiyat serisindeki boş değerleri doldurma yöntemiydi. Kendi verimi önce temizleyip sonra kütüphaneye soktuğumda hata payının yüzde 5 seviyesinden yüzde 0.1 seviyesine indiğini ölçtüm.

from ta import add_all_ta_features

veriler = yukle_fonksiyonu()
veriler = add_all_ta_features(veriler, open=O, high=H, low=L, close=C, volume=V)
Enter fullscreen mode Exit fullscreen mode

Bu kod bloğu, elimdeki ham finansal veriyi alıp içerisine tüm teknik göstergeleri otomatik olarak ekliyor. İlk satırda kütüphaneyi içeri alıyorum, ikinci satırda ise ham veriyi fonksiyonun içine göndererek bütün teknik analiz sütunlarını tek seferde oluşturuyorum.

4. langchain

Finansal haberleri analiz eden veya borsa verileriyle konuşan akıllı yapay zeka ajanları inşa etmek için bu kütüphaneyi kullanıyorum. Büyük dil modellerini kendi sistemlerime entegre etmek için harika bir yapı sunuyor.

Ancak çok karmaşık bir yapısı var. Bir projede token maliyetlerini kontrol edemediğim için bütçemin hızla tükendiğini gördüm. Yapay zeka ajanlarını kurarken maliyeti sürekli izlemek ve gereksiz sorgulardan kaçınmak şart. Bir keresinde ajanımın her haber başlığı için tüm geçmişi tekrar okuduğunu fark ettim ve bu durum API maliyetimi üç katına çıkardı. Bellek yönetimi için sadece son 5 haber başlığını modele göndererek maliyeti yüzde 60 oranında kıstım.

5. scikit-learn

Fiyat tahminleme veya sınıflandırma modelleri gibi basit yapay zeka algoritmalarını eğitmek için bu kütüphaneyi kullanıyorum. Geçmiş verilerden yola çıkarak geleceğe dair bir şeyler öngörmeye çalışırken ilk başvurduğum yer burası.

Buradaki en büyük sorun overfitting yani aşırı öğrenme. Geçmiş veride harika çalışan bir model kurduğumda çok sevinmiştim ama canlı piyasaya geçtiğimde modelin çöktüğünü gördüm. Modelin sadece geçmişi ezberlemediğinden, gerçekten bir örüntü yakaladığından emin olmak gerekiyor.

gorsel

6. SQLAlchemy

Toplanan BIST verilerini veritabanlarında düzenli bir şekilde saklamak ve yönetmek için kullanıyorum. Veriler büyüdükçe bunları bir dosyada tutmak imkansız hale geliyor, bu yüzden veritabanı bağlantısı kurmak şart.

Tuzak ise karmaşık sorgularda ortaya çıkıyor. Eğer SQL bilginiz zayıfsa veritabanı darboğazı yaşarsınız ve sisteminiz yavaşlar. Sorguları optimize etmek için veritabanının nasıl çalıştığını anlamak gerekiyor.

7. playwright

Veri çekmenin mümkün olmadığı veya giriş gerektiren finansal sitelerden otomasyonla veri kazımak için kullanıyorum. Bazı siteler API vermiyor, bu durumda tarayıcıyı bir insan gibi yöneten bu aracı kullanmak tek çare.

En büyük sıkıntı web sitelerinin yapısal değişiklikleri. Bir gün site tasarımını değiştirdiğinde tüm otomasyon scriptlerim bozuldu ve saatlerce bakım yapmak zorunda kaldım. Bu araç sürekli tetikte olmayı gerektiriyor.

8. ccxt

Kripto borsaları ve bazı finansal API'ler ile tek bir arayüz üzerinden alım-satım emirlerini yönetmek için kullanıyorum. Farklı borsalar için ayrı ayrı kod yazmak yerine bu kütüphane ile hepsini tek bir standartta yönetebiliyorum.

Buradaki tuzak çok ciddi, hatalı bir kod bloğu tüm bakiyenizin yanlış emirlerle harcanmasına yol açabilir. Bir keresinde bir parametreyi yanlış girdiğim için yanlış miktarda emir gönderdim. Bu kütüphaneyi kullanırken her zaman önce test ortamında deneme yapmanız lazım.

Toparlarsak

Finansal otomasyon dünyasında araç seçimi zeka değil bir tekrar ve deneyim meselesidir. Aynı iş için her seferinde aynı aracı kullanmak size inanılmaz bir hız kazandırıyor. Bugün öğrendiğiniz bu araçları hemen yarın küçük bir veri setinde denemeye başlayın. Önce yfinance ile veriyi çekin, pandas ile düzenleyin ve ta kütüphanesi ile teknik göstergeleri ekleyin. Kendi küçük sisteminizi kurduğunuzda, karmaşık yapıların aslında bu basit parçaların birleşimi olduğunu göreceksiniz. Bundan sonra yapmanız gereken ilk adım, elinizdeki bir veriyi bu araçlarla işleyip bir analiz sonucu üretmek. Sadece okumakla kalmayın, o kodu çalıştırın. Kendi stratejinizi oluştururken önce geçmiş verilerle simülasyon yapın, ardından küçük miktarlarla canlı piyasada test edin. Başarılı olmanın tek yolu, sisteminizi sürekli izlemek ve hatalardan ders çıkararak kodu revize etmektir.

Top comments (0)