Dev.to · 7 min read

Borsa Verisiyle Çalışırken Sürekli Dönüp Dolaşıp Kullandığım 6 Python Kütüphanesi

Borsa Verisiyle Çalışırken Sürekli Dönüp Dolaşıp Kullandığım 6 Python Kütüphanesi

Borsa verisiyle uğraşmaya başladığım ilk günlerde her şeyi sıfırdan yazmaya çalışıyordum. Kendi indikatörlerimi, kendi veri çekme sistemlerimi kuruyordum ama zamanla fark ettim ki bazı araçlar aslında benim yapmaya çalıştığım her işi benden daha iyi ve hızlı yapıyor. Fiyat verisiyle uğraşırken her projede aynı kütüphanelere dönüyorum. Hepsini gerçek işlerde kullandım, sırasıyla ne işe yaradıklarını ve neden tercih ettiğimi anlatıyorum. Bu liste benim yıllar içinde deneme yanılma ile oluşturduğum, en çok verim aldığım araçların listesi. 1. pandas Pandas benim için borsa verisinin mutfağı gibi. Zaman serisi tablolarını tutmak ve bu veriler üzerinde yeniden örnekleme yapmak için tek satırlık kodlar sunuyor. Dakikalık veriyi saatliğe çevirmek, eksik mumları doldurmak ya da hareketli ortalama almak gibi işleri başka bir kütüphaneyle yapmaya kalksam kodumun boyu uçlar, hata payım artardı. Ben bunu özellikle fiyat verilerini temizlerken kullanıyorum. Gelen veride bazen boşluklar oluyor, borsa kapandığı için ya da bağlantı koptuğu için. Pandas ile bu boşlukları doldurmak veya veriyi istediğim zaman dilimine çekmek çok kolay. Ancak burada büyük bir tuzak var. Eğer zaman damgasını indekse almazsan resample fonksiyonu çalışmaz. Ben ilk zamanlar bunu kaçırdığım için saatlerce hatanın nerede olduğunu aramıştım. Veriyi yükledikten sonra ilk işin tarihi indekse taşımak olmalı. Gerçek bir senaryoda, Binance üzerinden çektiğim 1 dakikalık veriyi 1 saatlik periyoda çevirirken df.set_index('timestamp', inplace=True) komutunu kullanmayı unuttuğumda resample metodu bana bir hata fırlatmıştı. Oysa indeksi ayarladığımda df['close'].resample('1H').mean() komutuyla tüm saatlik ortalamaları tek seferde alabiliyorum. Bu yöntem, döngü kurmaktan çok daha hızlı ve hatasız sonuç veriyor. 2. numpy Numpy sayısal hesapların temeli. Dizilerde vektörleştirilmiş işlem yapmamızı sağlıyor. Borsa verisinde getiri hesabı, oynaklık hesaplama veya korelasyon bulma gibi işlemleri döngü kurarak yaparsanız bilgisayarınız çok yavaşlar. Numpy ile bu işlemleri döngüsüz yazdığınızda ise işlem süresi neredeyse sıfıra iner. Ben bunu strateji testlerimde getirileri hesaplarken kullanıyorum. Binlerce satırlık fiyat verisini tek bir vektör işlemiyle saniyeler içinde işliyorum. Ancak burada dikkat edilmesi gereken çok kritik bir nokta var. Veri içindeki nan değerler yani boş değerler sessizce yayılıyor. Eğer bir hesaplama yapmadan önce veriyi temizlemezseniz, tüm sonucunuz nan çıkabilir ve bunu fark etmeniz zaman alabilir. Önce veriyi temizle, sonra hesapla kuralı benim için çok önemli. Örneğin, 500 günlük bir fiyat serisinde günlük getiri hesaplarken numpy.diff kullandığımda, veri setinin başındaki boş satırları temizlemediğim için tüm np.std standart sapma sonucum nan dönmüştü. Bu durum, stratejimin neden çalışmadığını anlamak için 2 saatimi harcamama neden oldu. Şimdi her hesaplama öncesinde data = data[~np.isnan(data)] satırını mutlaka ekliyorum. Bu küçük önlem, binlerce satırlık verideki hesaplama hatalarını tamamen ortadan kaldırıyor. 3. ccxt Onlarca borsanın API yapısı birbirinden farklı. Her biri için ayrı bağlantı kurmak, ayrı veri formatlarını anlamak tam bir kabus. Ccxt burada devreye giriyor ve onlarca borsanın API yapısını tek bir arayüze indirgiyor. Borsa değiştirdiğinde kodun büyük kısmı aynı kalıyor, sadece bağlantı noktasını güncelliyorsun. Gerçek hayatta bir borsadan diğerine geçmek zorunda kaldığımda bu kütüphane sayesinde saatler süren işi dakikalar içinde bitirdim. Ancak unutmamak lazım ki her borsa aynı alanı doldurmuyor. Bir borsa hacim bilgisini verirken diğeri vermeyebilir. Dönen veriyi mutlaka kendi kodunla doğrulamalısın. import ccxt exchange = ccxt.binance() ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h') Bu kod bloğu ccxt kütüphanesini kullanarak borsa bağlantısı kuruyor ve Binance üzerinden BTC/USDT paritesi için bir saatlik mum verilerini çekiyor. Fetch ohlcv metodu, borsa ne olursa olsun standart bir formatta veri döndürdüğü için işlerimi çok kolaylaştırıyor. 4. requests Bazen resmi kütüphanesi olmayan veri kaynaklarına ulaşmam gerekiyor. Ya da sadece basit bir veri çekme işlemi yapacağım zaman ccxt gibi büyük kütüphanelere ihtiyaç duymuyorum. Requests burada devreye giriyor ve HTTP isteği atarak veriyi ham haliyle almamızı sağlıyor. Bu kütüphane en kısa yol. Bir web sitesinden ya da bir API uç noktasından veri alacaksam hemen bunu kullanıyorum. Ancak buradaki en büyük tuzak zaman aşımı. Eğer istek atarken bir zaman aşımı süresi tanımlamazsanız kodunuz sonsuza kadar yanıt bekleyebilir ve programınız donup kalır. Mutlaka timeout parametresini eklemelisiniz. Kendi sistemimde bir borsa dışı veri kaynağından anlık fiyat çekerken timeout parametresini unutmam yüzünden scriptim sunucuda saatlerce askıda kalmıştı. Sunucu kaynaklarını boşuna tüketmiştim. Şimdi requests.get(url, timeout=5) şeklinde bir yapı kullanıyorum. Bu sayede beş saniye içinde yanıt gelmezse işlem otomatik sonlanıyor ve hata yönetimi devreye giriyor. 5. matplotlib Stratejimin nerede bozulduğunu veya fiyat hareketinin karakterini anlamak için sadece rakamlara bakmak yetmiyor. Matplotlib ile grafik çizdiriyorum. Tabloda göremediğim o sapmaları ya da trend kırılımlarını grafikte görünce her şey çok daha netleşiyor. Ben bunu strateji geliştirme aşamalarında sürekli kullanıyorum. Ancak çok noktalı serilerde çizim yaparken dikkatli olmak lazım. Eğer tüm veriyi tek seferde çizdirmeye çalışırsanız programınız çok yavaşlar. Bu durumda veriyi örneklemek yani belirli aralıklarla çizdirmek en mantıklı yol. [[GÖRSEL2]] 6. sqlite3 Toplanan fiyat verisini dosyada tutmak yerine sorgulanabilir şekilde saklamak için sqlite3 kullanıyorum. Python ile birlikte geldiği için ekstra bir kurulum istemiyor. Verileri bir veritabanında tutmak, daha sonra istediğim tarih aralığını çekmemi veya veriler arasında hızlı arama yapmamı sağlıyor. Bunu özellikle geçmiş fiyat verilerini arşivlemek için kullanıyorum. Ancak aynı anda yazan iki süreç kilitlenmeye yol açabilir. Yani veriyi hem okuyup hem yazmaya çalışan farklı scriptleriniz varsa dikkatli olmalısınız. Bu kilitlenme durumunu yönetmek için işlemleri sıraya koymak gerekir. Bir gün aynı anda hem veri toplayan hem de analiz yapan iki farklı script çalıştırdığımda veritabanı kilitlendi ve verilerim yazılmadı. Veritabanı dosyasının salt okunur moda geçmesi yüzünden ciddi bir veri kaybı yaşadım. Çözüm olarak veritabanı bağlantılarını tek bir merkezden yöneten ve işlemleri sıraya sokan basit bir kuyruk yapısı kurdum. Artık veritabanına yazma işlemleri birbiriyle çakışmıyor ve verilerim güvende kalıyor. Toparlarsak Bu altı kütüphane tek başına bir strateji kurmuyor ama strateji kurarken harcadığın zamanın büyük kısmını sana geri veriyor. Araç seçimi zeka değil tekrar meselesi. Aynı işe aynı aracı kullanmak insana hız kazandırıyor. Bundan sonra yapman gereken şey çok basit. Bir sonraki projenin kodlarını aç ve bu kütüphanelerden hangilerini kullanabileceğini kontrol et. Eğer hala kendi veri çekme fonksiyonlarını yazıyorsan veya kendi zaman serisi hesaplamalarını manuel yapmaya çalışıyorsan, bu kütüphaneleri denemeye başla. İlk adım olarak sadece pandas ile verini okuyup hareketli ortalama almayı dene. Aradaki farkı görünce neden yıllarca bunları kullandığımı anlayacaksın. Kendi araç çantanı kurmak, borsa analizinde seni rakiplerinden daha hızlı hale getirecek. Projelerini modüler hale getirip her bir kütüphaneyi birer yapı taşı gibi kullanmaya başladığında, aslında ne kadar çok zaman kazandığını sen de fark edeceksin. Şimdi bu araçları birleştirerek kendi analiz sistemini kurmaya başla.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Programming & Dev News