Borsa verileriyle uğraşırken terminal ekranı benim ana çalışma alanım haline geldi. Başlarda sadece basit scriptler yazıyordum ama işler büyüdükçe bu araçları yönetmek zorlaştı. Elimdeki işleri otomatize ederken kullandığım ve gerçekten verim aldığım araçları bir araya getirdim. Bu liste tamamen kendi deneyimlerime dayanıyor. Hangi aracı neden seçtiğimi ve nerelerde hata yapıp başımı ağrıttığımı burada anlatıyorum.
1. Typer
Typer kütüphanesi 0.28.0 sürümüyle hayatıma girdi. Bu araç Python tip belirteçlerini kullanarak harika komut satırı arayüzleri oluşturmamı sağlıyor. BIST veri çekme scriptlerimi tip güvenli ve otomatik dokümantasyonlu araçlara dönüştürmek için kullanıyorum. Kod yazarken tip tanımları üzerinden gittiğim için hata yapma payım azalıyor.
Typer kullanmanın en büyük avantajı kodun temiz kalması. Ancak karmaşık iç içe geçmiş komut yapılarında bazen hata ayıklama süreci zorlaşıyor. Hangi komutun nerede patladığını anlamak için bazen saatler harcadığım oldu. Özellikle derin hiyerarşiler kurduğumda terminal çıktısı karmaşıklaşabiliyor. Yine de hızlıca bir CLI aracı ayağa kaldırmak istediğimde ilk başvorum burası.
2. Click
Click 8.5.1 sürümüyle büyük ölçekli finansal analiz araçlarımda yerini aldı. Bu kütüphane karmaşık komut gruplarını yönetmek için biçilmiş kaftan. Özellikle hiyerarşik argümanlar söz konusu olduğunda Click yapısı çok tutarlı çalışıyor.
Ancak bu aracın ciddi bir öğrenme eğrisi var. Çok fazla iç içe geçmiş grup yapısı kurduğumda aracı kullanacak diğer kişilerin işi zorlaşıyor. Kendi yazdığım araca bir ay sonra dönüp baktığımda neden bu kadar karmaşık bir yapı kurduğumu sorguladığım çok oldu. Yine de büyük projelerde kontrolü elden bırakmamak adına bu aracı tercih ediyorum.
3. Rich
Rich 15.0.0 sürümü terminal dünyamı renklendirdi. BIST canlı fiyatlarını veya trading sinyallerini terminalde okunabilir tablolar ve renkli çıktılarla görmek büyük kolaylık.
Çok yoğun veri akışında terminalin render kapasitesini zorlayarak performansı düşürebiliyor. Bir keresinde canlı fiyatları saniyelik güncellerken terminalin donduğunu ve tüm scriptin kilitlendiğini gördüm. Bu yüzden Rich kullanırken veri akış hızını sınırlamak zorunda kaldım.
Rich kütüphanesini kullanarak verileri ekrana basarken aslında terminalin satır tamponunu dolduruyoruz. Özellikle 500 milisaniyelik aralıklarla 20 farklı hissenin fiyatını güncellediğimde, terminalin saniyede 40 kez yeniden çizim yapması işlemciyi yüzde 30 seviyelerinde yoruyordu. Bunu aşmak için her güncellemede tüm tabloyu silip yeniden yazdırmak yerine, sadece değişen hücreleri güncelleyen bir canlı panel yapısına geçiş yaptım. Böylece terminalin render yükü ciddi oranda azaldı ve donmalar bitti.
4. Pandas
Pandas 3.1.1 sürümü veri analizinin kalbi. CLI üzerinden gelen ham borsa verilerini manipüle etmek ve teknik indikatörleri hesaplamak için kullanıyorum.
Büyük veri setlerinde bellek yönetimi düzgün yapılmazsa sistemin kilitlenmesine yol açabiliyor. Geçmişe dönük on yıllık veriyi tek seferde yüklemeye çalıştığımda sistemin RAM kullanımının tavan yaptığını ve bilgisayarın yanıt vermediğini çok kez yaşadım. Veriyi parçalar halinde işlemek bu sorunu çözdü.
Pandas üzerinde yaşadığım bir diğer somut sorun, tarih sütunlarını indekslerken gerçekleşti. 15 dakikalık periyotlarla çekilen 5 yıllık veri setinde, tarih formatı yanlış tanımlandığında hesaplama süresi 12 saniyeye kadar çıkıyordu. Veriyi okurken parse_dates parametresini kullanarak ve veri tipini datetime64 olarak sabitleyerek bu süreyi 0.4 saniyeye indirdim. Ayrıca büyük CSV dosyalarını okurken chunksize parametresi ile veriyi 1000 satırlık parçalar halinde işlemek, 16 GB RAM kapasitesini aşmamı engelledi.
5. Python-dotenv
Python-dotenv 1.2.4 sürümü güvenlik için kritik. Borsa API anahtarlarını ve veritabanı şifrelerini CLI aracından güvenli bir şekilde okumak için kullanıyorum.
Ancak yanlış yapılandırma durumunda hassas bilgilerin log dosyalarına sızma riski taşıyor. Bir keresinde .env dosyasını yanlışlıkla log klasörüne kopyaladığım için anahtarlarım açığa çıkmıştı. O günden beri dosyaları okurken çok dikkatli davranıyorum.
6. Requests
Requests 2.34.2 sürümü finansal veri sağlayan REST API'lerden anlık fiyat verilerini çekmek için kullandığım temel araç.
Hata yönetimi, yani timeout ve retries kısımları düzgün kurulmazsa ağ kesintilerinde tüm otomasyon duruyor. İnternet bağlantım koptuğunda scriptin sonsuz döngüye girdiğini veya hata verip kapandığını çok gördüm. Bu yüzden her isteği try-except blokları içine alarak yönetiyorum.
import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry session = requests.Session() retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) session.mount('https://', HTTPAdapter(max_retries=retries)) response = session.get("https://api.borsa.ornek/fiyat", timeout=5) print(response.json()) Yukarıdaki kod bloğu, borsa API'sine bağlanırken karşılaştığım bağlantı kopma sorunlarını çözmek için kurduğum bir yapıdır. Burada requests kütüphanesinin Session nesnesini kullanarak HTTPAdapter üzerinden otomatik yeniden deneme mekanizması oluşturdum. Eğer sunucu 502 veya 504 gibi geçici hatalar dönerse, scriptim pes etmek yerine 1 saniyelik aralıklarla 5 kez daha deneme yapıyor. Timeout parametresini 5 saniye olarak belirleyerek, sunucunun cevap vermediği durumlarda scriptin sonsuza kadar beklemesini engelledim.
7. Loguru
Loguru 0.7.3 sürümü ile loglama işini çok basit hale getirdim. Yazdığım otomasyon araçlarının arka planda neler yaptığını ve oluşan hataları takip etmek için kullanıyorum.
Çok hızlı çalışan döngülerde aşırı log yazımı disk I/O performansını yavaşlatabiliyor. Bir keresinde milisaniyelik işlemler için her adımı logladığımda disk dolmuştu. O günden sonra log seviyelerini daha dikkatli seçiyorum.
Loguru kullanırken yaptığım en büyük hata, tüm logları tek bir metin dosyasına sürekli append ederek yazdırmaktı. Bir haftalık borsa verisi takibi sonucunda log dosyası 4 GB boyuta ulaştı ve sistemin disk yazma hızını saniyede 10 MB seviyesine kadar düşürdü. Bu sorunu aşmak için loguru kütüphanesinin rotation özelliğini devreye aldım. Her 500 MB boyuta ulaştığında log dosyasını otomatik olarak sıkıştırıp yeni bir dosyaya geçmesini sağladım. Ayrıca sadece hata seviyesindeki logları ayrı bir dosyaya, bilgi mesajlarını ise ayrı bir dosyaya yönlendirerek disk performansını tekrar eski haline getirdim.
Toparlarsak
Arac seçimi zeka değil tekrar meselesi. Ayni ise ayni araci kullanmak zaman kazandiriyor. Bu listedeki araçları her gün kullanarak elim alıştı. Şimdi sana tavsiyem, bu araçlardan sadece birini seç ve mevcut bir scriptine entegre et. Hemen yarın sabah basit bir veri çekme aracına loguru ekleyerek işe başlayabilirsin. Gördüğün hataları not et, çünkü bir sonraki projende aynı hatayı yapmanı engelleyecek olan tek şey o notlardır. Kendi araç kutunu oluşturmak için en iyi zaman şu andır. Bundan sonraki adımda, bu araçları birleştirerek kendi küçük borsa izleme panelini kurmayı deneyebilirsin. Hangi aracın hangi senaryoda daha iyi çalıştığını anlamanın en hızlı yolu, kendi küçük veri setinle denemeler yapmaktır. Başarılar dilerim.



