Kodla Getiriler: Basit ve Logaritmik Getiriler, Kümülatif Getiriler, Yıllıklandırılmış Getiri ve Volatilite ve Kayan Pencereler
pandas'ta basit ve logaritmik getirileri hesaplayın, bunları doğru şekilde bileşik hâle getirin, getiriyi ve volatiliteyi yıllıklandırın ve kayan istatistikler oluşturun.
Neler öğreneceksiniz
- Bir kapanış serisinden basit ve logaritmik getirilerin nasıl hesaplanacağı ve her birinin ne zaman doğru araç olduğu.
- Basit getirilerin neden çarpımla bileşik hâle getirilmesi, logaritmik getirilerin ise neden yalnızca toplanması gerektiği.
- Günlük ortalama getirinin ve günlük standart sapmanın nasıl yıllıklandırılacağı ve zamanın karekökü kuralının neyi varsaydığı.
- Kayan pencerelerin 20 günlük volatilite gibi zamanla değişen istatistikleri nasıl ürettiği ve ilk satırların neden boş olduğu.
Açıklama
Basit getiri, fiyattaki yüzde değişimdir: rt = (Pt − Pt−1) ÷ Pt−1; pandas'ta r = df["close"].pct_change(). Logaritmik getiri, fiyat oranının doğal logaritmasıdır: ℓt = ln(Pt ÷ Pt−1); kodda np.log(df["close"]).diff(). Her ikisi de bir NaN ile başlar. Küçük hareketlerde ikisi neredeyse aynıdır; büyük hareketlerde birbirinden ayrılırlar (−50%'lik bir basit getiri, −69.3%'lük bir logaritmik getiridir).
Bileşik getiri. Birden fazla dönem boyunca basit getiriler çarpılır: toplam = (1 + r1)(1 + r2)…(1 + rn) − 1. Logaritmik getiriler toplanır: toplam logaritmik getiri = ℓ1 + ℓ2 + … + ℓn; geri dönüştürmek toplam basit getiri = exp(toplam) − 1 verir. Basit getirileri toplamak yanlıştır ve hata volatiliteyle birlikte büyür: +10% ardından −10% toplamda 0% eder, ancak gerçekte −1% bırakır. Kümülatif getiri serisi (1 + r).cumprod() − 1'dir; €10,000'dan başlayan bir sermaye eğrisi 10_000 * (1 + r).cumprod()'dir; logaritmik getirilerle ise np.exp(lr.cumsum()).
Hangisi ne zaman kullanılır? Zaman içinde toplama ve istatistikler için logaritmik getiriler; para el değiştirdiğinde veya varlıklar birleştirildiğinde ise basit getiriler kullanılır, çünkü portföy getirisi basit getirilerin ağırlıklı toplamıdır. İnsanlara raporlarken basit yüzdeleri kullanın.
Yıllıklandırma. Geleneksel olarak hisse senetleri için yılda 252 işlem günü varsayılır (gerçek sayı borsaya ve yıla göre biraz değişir; kullandığınız kuralı belirtin). Ortalama günlük getiri × 252 aritmetik yıllıklandırılmış getiridir; CAGR (compound annual growth rate, bileşik yıllık büyüme oranı; "Sistematik Trading" kursunda tanımlanmıştır) ise (bitiş ÷ başlangıç)1 ÷ yıl − 1'dir ve bir geriye dönük test için raporlamanız gereken değer budur. Volatilite getirilerin standart sapmasıdır; zamanın kareköküyle ölçeklenir, dolayısıyla yıllık volatilite ≈ günlük standart sapma × √252 ≈ günlük × 15.87. Aylık veriler için 12 ve √12, haftalık veriler için 52 ve √52 kullanın. Karekök kuralı bağımsız getiriler varsayar; trend içeren seriler bu varsayımı ihlal eder, bu yüzden onu bir uzlaşım olarak ele alın.
Kayan pencereler. r.rolling(20).std() * np.sqrt(252) en son 20 günün yıllıklandırılmış volatilitesini verir ve her satırda yeniden hesaplanır. İlk 19 satır NaN'dır, çünkü pencere dolmamıştır (min_periods bunu esnetebilir). expanding() her satıra kadarki tüm veriyi kullanır (9. dersteki düşüş hesabı için sermayenin kayan maksimumu). Her ikisi de yalnızca geriye bakar; dolayısıyla yapıları gereği ileriye bakma yanlılığından arınmıştır.
Çözümlü örnek
Varsayımsal örnek: bir hissenin dört kapanışı: €100.00, €105.00, €100.80, €105.84; maliyet, temettü veya vergi yok.
Basit getiriler: (105 − 100) ÷ 100 = +5.00%; (100.80 − 105) ÷ 105 = −4.00%; (105.84 − 100.80) ÷ 100.80 = +5.00%.
Logaritmik getiriler: ln(1.05) = 0.04879; ln(0.96) = −0.04082; ln(1.05) = 0.04879. Toplam = 0.05676. exp(0.05676) − 1 = 0.0584, yani +5.84%.
Kontrol: 1.05 × 0.96 × 1.05 = 1.0584 → +5.84% ve 105.84 ÷ 100 − 1 = 5.84%. Basit getirileri toplamak 6.00% verirdi; bu da üç günde 0.16 puanlık bir abartıdır: €10,000, €10,600 değil €10,584 olur.
Kod: r = c.pct_change(); total = (1 + r.dropna()).prod() - 1 0.0584 döndürür. r.rolling(3).mean() son satıra (0.05 − 0.04 + 0.05) ÷ 3 = 2.00% yazar, öncesine ise NaN.
Varsayımsal daha uzun bir örneklemi yıllıklandırmak: günlük getirilerin ortalaması 0.04% ve standart sapması 1.2% ise aritmetik yıllıklandırılmış getiri 0.0004 × 252 = 10.08%, yıllıklandırılmış volatilite ise 0.012 × 15.87 = 19.05% olur.
Sık yapılan hata
r.sum() kullanır. Bu, bileşik etkiyi göz ardı eder ve volatil serilerde sonuçları abartır; kaldıraçlı ürünlerde bu abartı çarpıcı boyutlara ulaşır. Basit getiriler için (1 + r).prod() − 1 kullanın veya logaritmik getirileri toplayıp üstel fonksiyonu uygulayın.Uygulama etkinliği
Kâğıt üzerinde: kapanışlar €50.00, €48.00, €50.40, €49.392 (varsayımsal). (a) Üç basit getiriyi hesaplayın. (b) ln(0.96) = −0.04082, ln(1.05) = 0.04879 ve ln(0.98) = −0.02020 değerlerini kullanarak üç logaritmik getiriyi hesaplayın. (c) Toplam getiriyi bileşik yöntemle ve logaritmaları toplayarak verin ve basit getirilerin saf toplamıyla karşılaştırın. (d) Farklı bir seri 1.5%'lik bir günlük standart sapma gösteriyorsa, 252 gün kullanarak yıllıklandırılmış volatilitesini belirtin ve 252 ile çarpmanın neden yanlış olacağını açıklayın.
Çözümü göster
(a) 48 ÷ 50 − 1 = −4.00%; 50.40 ÷ 48 − 1 = +5.00%; 49.392 ÷ 50.40 − 1 = −2.00%.
(b) −0.04082, +0.04879, −0.02020; toplam = −0.01223.
(c) Bileşik: 0.96 × 1.05 × 0.98 = 0.98784 → −1.216%. Logaritmalardan: exp(−0.01223) − 1 = −1.216%; 49.392 ÷ 50 − 1 = −1.216% bunu doğrular. Saf toplam −4 + 5 − 2 = −1.00% verir; bu da kaybı olduğundan küçük gösterir.
(d) Yıllıklandırılmış volatilite = 1.5% × √252 = 1.5% × 15.87 = 23.8%. 252 ile çarpmak 378% verirdi; bu, ortalamalar için ölçekleme kuralını (zamanla doğrusal) standart sapmalar için olan kuralla (zamanın karekökü) karıştırmaktır.
Sınırlamalar: √252 kuralı bağımsız günlük getiriler varsayar; otokorelasyon içeren gerçek serilerin gerçek yıllık volatilitesi farklıdır.
Önemli çıkarımlar
pct_change()basit getirileri,np.log(c).diff()logaritmik getirileri verir; her ikisi de birinci satırda birNaNbırakır.- Basit getirileri çarpımla bileşik hâle getirin; logaritmik getirileri toplayıp üstel fonksiyonu uygulayın; basit getirileri asla toplamayın.
- Ortalamaları × 252, standart sapmaları × √252 ile yıllıklandırın, kullandığınız kuralı belirtin ve geriye dönük testler için CAGR raporlayın.
- Kayan ve genişleyen pencereler yalnızca geriye bakar, dolana kadar
NaNüretir ve varsayılan olarak örneklem standart sapmasını kullanır.
Sonraki adım
6. ders standart göstergeleri (SMA, EMA, RSI, ATR ve Bollinger Bantları) vektörleştirilmiş fonksiyonlar olarak kodluyor ve bunların bir grafik platformuna karşı nasıl doğrulanacağını gösteriyor.
Öz değerlendirme
Soruları yanıtlayın, ardından yanıtlarınızı kontrol edin. İstediğiniz kadar tekrar deneyebilirsiniz.
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.