⚠ Trading önemli ölçüde zarar riski içerir. Bu sitedeki her şey yalnızca eğitim amaçlıdır ve finansal tavsiye değildir.
Ders 4 / 13 · Ücretsiz

Fiyat Verisini Yüklemek: CSV Dosyaları ve Ücretsiz API'ler, Düzeltilmiş ve Düzeltilmemiş Fiyatlar, Eksik Değerler ve Saat Dilimleri

Fiyat dosyalarını ve API indirmelerini temiz bir DataFrame'e okuyun, bölünme ve temettü düzeltmelerinin nasıl çalıştığını anlayın ve boşlukları ile saat dilimlerini doğru şekilde ele alın.

Yazar: Moustafa Hijaziİçerik gözden geçirildi: 2026-10-305 dk okumaKendi kendine öğrenme kursu

Neler öğreneceksiniz

  • Bir CSV dosyasının doğru tarihlerle bir DataFrame'e nasıl okunacağı ve olağan içe aktarma sorunlarını düzelten argümanlar.
  • Ücretsiz veri API'lerinin size ne sunduğu, lisanslarının ve varsayılan ayarlarının ne anlama geldiği ve indirmelerin nasıl önbelleğe alınacağı.
  • Bölünme ve temettü düzeltme faktörlerinin nasıl hesaplandığı ve bir geriye dönük testin neden düzeltilmiş fiyatlara, gerçek bir emrin ise neden düzeltilmemiş fiyatlara ihtiyaç duyduğu.
  • Eksik değerlerin nasıl bulunup ele alınacağı ve çubuklarınızı kaydırmadan saat dilimlerinin nasıl atanıp dönüştürüleceği.

Açıklama

CSV dosyaları. Bir CSV (comma-separated values, virgülle ayrılmış değerler) dosyası, her çubuk için bir satır içeren düz metindir. Temel çağrı şudur:

df = pd.read_csv("data/raw/xyz.csv", parse_dates=["Date"], index_col="Date")

parse_dates metin sütununu zaman damgalarına dönüştürür, index_col ise onu indeks yapar. Sık kullanılan düzeltmeler: Almanca dışa aktarımlar için sep=";" ve decimal=",", 03.04.2025 gibi tarihler için dayfirst=True ve ayrıştırma yanlış olduğunda date_format="%d.%m.%Y". Yükledikten sonra df = df.sort_index() çalıştırın (bazı dışa aktarımlar en yeniden eskiye sıralıdır), df.index.is_unique değerini kontrol edin ve sütun adlarını df.columns = df.columns.str.lower() ile küçük harfe çevirin.

Ücretsiz API'ler. Bir API (application programming interface, uygulama programlama arayüzü), kodun bir sunucudan veri talep etmesini sağlar. İlk proje için olağan seçim yfinance kütüphanesidir (Yahoo Finance verisi): yf.download("SAP.DE", start="2015-01-01"); kişisel araştırma amaçlıdır ve doğruluğu garanti edilmez. Bir varsayılan önemlidir: 2026 itibarıyla auto_adjust=True geçerlidir; yani açılış, en yüksek, en düşük ve kapanış zaten bölünmeler ve temettüler için düzeltilmiştir ve "Adj Close" sütunu yoktur. auto_adjust=False ile bölünmeye göre düzeltilmiş OHLC ile birlikte temettüleri de içeren bir "Adj Close" sütunu alırsınız. Ücretsiz katmanları olan alternatifler arasında Stooq (CSV indirmeleri), Alpha Vantage ve Tiingo (kayıt ve API anahtarı gerekir, katı istek limitleri vardır) bulunur; koşullar değişir, bu yüzden güncel şartları kontrol edin. 12. ders anahtar yönetimini ve istek limitlerini ele alıyor. Kaynak ne olursa olsun, ham indirmeyi bir kez data/raw/ klasörüne (CSV veya Parquet) kaydedin ve dosya üzerinden çalışın; sağlayıcılar geçmiş veriyi revize eder ve limitler kısıtlıdır.

Düzeltilmiş ve düzeltilmemiş. "Sistematik Trading" kursu, bölünmelerin ve temettülerin geriye dönük testleri neden bozduğunu açıklamıştı; burada düzeltmenin nasıl çalıştığını görüyoruz. n'e 1 bölünmede önceki her fiyat n'e bölünür (ve hacim n ile çarpılır). Hak kesim tarihi t günü olan nakit temettü D için standart yöntem, t gününden önceki tüm fiyatları 1 − D ÷ C faktörüyle çarpar; burada C, hak kesim tarihinden önceki son günün kapanışıdır. Düzeltmeler geriye doğru birikir. Sonuçlar: düzeltilmiş geçmiş her yeni temettüyle değişir ve yüzde getiriler doğruyken euro cinsinden fiyat seviyeleri doğru değildir. Kural: geriye dönük testi düzeltilmiş veriyle yapın, gerçek emirleri düzeltilmemiş fiyatlarla verin ve ikisini asla tek bir hesaplamada karıştırmayın.

Eksik değerler. pandas boşlukları NaN olarak işaretler. Onları df.isna().sum() ile bulun. Birkaç fiyat boşluğunu df["close"].ffill() ile ileriye doğru doldurmak kabul edilebilir; ancak hacmi asla ileriye doğru doldurmayın ve fiyatları asla enterpolasyonla doldurmayın, çünkü enterpolasyon gelecekteki değeri kullanır ve ileriye bakma yanlılığı yaratır (7. ders). Aksi hâlde satırları df.dropna(subset=["close"]) ile silin ve kaç tane olduğunu kaydedin. Eski fillna(method="ffill") sözdiziminin pandas 2.1'den beri kullanımdan kaldırıldığını ve yeni kodda kullanılmaması gerektiğini unutmayın; .ffill() yazın.

Saat dilimleri. Günlük çubuklar nadiren saat dilimine ihtiyaç duyar; gün içi veriler ise her zaman duyar. tz_localize("Europe/Berlin"), saatleri değiştirmeden saat dilimi bilgisi olmayan bir indekse saat dilimi iliştirir; tz_convert("America/New_York") ise saatleri değiştirir. UTC verisini yanlışlıkla Berlin'e atamak, her çubuğu fark ettirmeden bir veya iki saat kaydırır; bu yüzden sağlayıcının belgelerini kontrol edin. Yaz saati uygulaması tarihleri Avrupa ile ABD arasında farklılık gösterir; yanlış işlenen zaman damgaları enstrümanları tam da bu dönemlerde birbirinden kaydırır.

Çözümlü örnek

Varsayımsal örnek: bir hisse pazartesi günü €50.00'dan kapanıyor. €1.00 tutarındaki bir temettünün hak kesim tarihi salıdır ve hisse o gün €49.50'den kapanıyor. Ücretler ve vergiler dikkate alınmamıştır.

Düzeltme faktörü = 1 − 1.00 ÷ 50.00 = 0.98. Salıdan önceki tüm fiyatlar 0.98 ile çarpılır: pazartesi kapanışı 50 × 0.98 = €49.00 olur; önceki haftadan €48.00'lık bir kapanış 48 × 0.98 = €47.04 olur.

Hak kesim tarihi boyunca getiri: düzeltilmemiş (49.50 − 50.00) ÷ 50.00 = −1.0%; bu, yanlış biçimde bir kayıp gibi görünür. Düzeltilmiş (49.50 − 49.00) ÷ 49.00 = +1.02%; bu ise €0.50'lık fiyat kaybına karşılık alınan €1.00 nakdi doğru şekilde yansıtır (€50 üzerinde net +€0.50; küçük fark, düzeltilmiş tabanın €49 olmasından kaynaklanır).

Şimdi 2'ye 1 bölünme: öncesinde ham kapanışlar 100, 102, 104, sonrasında 52, 53. Bölünme öncesi fiyatları 2'ye bölmek 50, 51, 52, 52, 53 verir; kesintisiz bir seri. Bu yapılmazsa pct_change() bölünme gününde −50%'lik bir getiri bildirir; hiç yaşanmamış bir çöküş.

Sık yapılan hata

Bir indirmeye incelemeden güvenmekTipik bir ilk not defteri veriyi indirir ve tabloya hiç bakmadan bir geriye dönük test çalıştırır. Gizli sorunlar arasında ters tarih sırası, tekrarlanmış son satır, sıfır hacimler, metin olarak saklanmış fiyatlar ve birbirine karışmış düzeltilmiş ve düzeltilmemiş sütunlar bulunur. Önce iki dakikanızı info(), head(), tail(), isna().sum() ve kapanış fiyatının bir çizgi grafiğine ayırın.

Uygulama etkinliği

Kâğıt üzerinde: bir hissenin iki gün boyunca €90.00 ve €93.00 kapanışları var, ardından 3'e 1 bölünme gerçekleşiyor, sonra €31.00 ve €30.38 kapanışları geliyor (varsayımsal). €30.38 kapanışının olduğu gün €0.60 tutarındaki bir temettünün hak kesim tarihidir ve bundan önceki kapanış €31.00'dır. (a) Bölünme öncesi iki kapanışın bölünmeye göre düzeltilmiş değerlerini yazın. (b) Temettü düzeltme faktörünü hesaplayın ve hak kesim tarihinden önceki üç kapanışın tamamına uygulayın. (c) €31.00 kapanışından €30.38 kapanışına ham ve tam düzeltilmiş getiriyi belirtin.

Çözümü göster

(a) 3'e bölün: €90.00 → €30.00 ve €93.00 → €31.00.

(b) Faktör = 1 − 0.60 ÷ 31.00 = 0.98065 (yuvarlanmış). Uygulandığında: 30.00 × 0.98065 = €29.42; 31.00 × 0.98065 = €30.40; hak kesim öncesi €31.00 kapanışı da €30.40 olur. €30.38 kapanışı değişmez.

(c) Ham: (30.38 − 31.00) ÷ 31.00 = −2.00%. Düzeltilmiş: (30.38 − 30.40) ÷ 30.40 = −0.07%; bu, neredeyse yataydır: fiyat yaklaşık temettü tutarı kadar düştü, dolayısıyla hisse sahibi toplam getiri açısından neredeyse hiçbir şey kaybetmedi.

Sınırlamalar: sağlayıcılar faktörleri farklı şekilde yuvarlar ve bazıları farklı bir referans fiyat kullanır; tek bir sağlayıcının düzeltilmiş serisini tutarlı biçimde kullanın.

Önemli çıkarımlar

  • parse_dates ve index_col ile yükleyin, ardından sıralayın, benzersizliği kontrol edin ve sütun adlarını standartlaştırın.
  • Bir kez indirin, ham veriyi yerel olarak kaydedin ve API'nin lisansını ve düzeltme varsayılanlarını okuyun (yfinance: 2026 itibarıyla auto_adjust=True).
  • Bölünme faktörü 1 ÷ n, temettü faktörü 1 − D ÷ C'dir ve geriye doğru uygulanır; geriye dönük testi düzeltilmiş fiyatlarla yapın, işlemi düzeltilmemiş fiyatlarla gerçekleştirin.
  • En fazla birkaç fiyat boşluğunu ileriye doğru doldurun, asla enterpolasyon yapmayın, hacmi asla ileriye doğru doldurmayın ve saat dilimlerini sağlayıcının gerçek saat dilimiyle bir kez atayın.

Sonraki adım

5. ders fiyatları getirilere dönüştürüyor: basit ve logaritmik getiriler, kümülatif getiriler, yıllıklandırılmış getiri ve volatilite ve kayan pencereler.

Öz değerlendirme

Soruları yanıtlayın, ardından yanıtlarınızı kontrol edin. İstediğiniz kadar tekrar deneyebilirsiniz.

1. Bir hisse €80.00'dan kapanıyor, ertesi gün €2.00 temettü için hak kesim gerçekleşiyor. Standart yöntemle önceki fiyatlara uygulanan temettü düzeltme faktörü nedir?

2. Günlük kapanış serinizde normal işlem günlerinde üç münferit NaN değer var. Bir geriye dönük test için hangi yöntem kabul edilebilir?

3. yfinance ile 2026 varsayılanlarını kullanarak veri indirdiniz ve geçen haftanın en düşüğüne dayanan gerçek bir stop emri vermek istiyorsunuz. Ne yapmalısınız?

Kendi tekrarınız için otomatik öz değerlendirme. Cevaplarınız tarayıcınızda kontrol edilir; bunları görmez ve değerlendirmeyiz. Bu bir sınav veya yeterlilik değildir.

İlerlemeniz

“Tamamlandı” yalnızca dersi bitirdiğinizi işaretlediğiniz anlamına gelir. Anlayışınızın bir sınavı değildir. İlerleme ve notlar yalnızca bu cihazdaki bu tarayıcıda saklanır — bir hesapta değil.