Analiz için Grafik Çizimi: Göstergelerle Fiyat, Sermaye ve Düşüş Grafikleri, Getiri Dağılımları ve Şekilleri Dışa Aktarma
Her geriye dönük test raporunun ihtiyaç duyduğu dört grafiği oluşturmak, bunları doğru okumak ve baskı kalitesinde dışa aktarmak için matplotlib'in figure-ve-axes arayüzünü kullanın.
Neler öğreneceksiniz
fig, ax = plt.subplots()kalıbı ve yeniden kullanacağınız her şey için neden hızlıseries.plot()kısayolundan daha iyi olduğu.- Tek bir zaman eksenini paylaşan fiyat, gösterge ve sermaye panellerinin nasıl üst üste yerleştirileceği ve sermaye ekseninin ne zaman logaritmik ölçeğe geçirilmesi gerektiği.
- Bir düşüş grafiğinin ve bir getiri histogramının nasıl çizileceği ve her birinde nelere bakılması gerektiği.
- Şekil boyutunun, DPI'ın ve dosya biçiminin dışa aktarılan görüntünün nasıl görüneceğini nasıl belirlediği.
Açıklama
Araştırmadaki grafikler süs değildir; sayılarınızın doğru olduğunu kontrol etmenin en hızlı yoludur. Bir günde 30 % sıçrayan bir sermaye eğrisi genellikle harika bir işlem değil, bir veri hatası anlamına gelir. Bu ders, pandas'ın arka planda çağırdığı matplotlib'i nesne yönelimli arayüzü üzerinden kullanıyor.
Figure, axes ve paylaşılan zaman ekseni
Figure (şekil) tüm tuvaldir; axes nesnesi ise onun içindeki tek bir grafik alanıdır. fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True, height_ratios=[3, 1, 1]), birlikte yakınlaşıp uzaklaşan, farklı yüksekliklerde üç üst üste panel oluşturur. Her panelin kalıbı aynıdır: ax.plot(x, y, label=...) çağırın, ardından ax.set_ylabel, ax.legend() ve ax.grid(True, alpha=0.3). Her panele kısa bir başlık verin ve birimleri etiketleyin (€, %, puan).
Göstergelerle fiyat
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6), sharex=True, height_ratios=[3, 1])ax1.plot(df.index, df.close, lw=1, label='Kapanış')ax1.plot(df.index, df.sma50, lw=1, label='SMA 50')ax1.fill_between(df.index, df.bb_lo, df.bb_hi, alpha=0.15, label='Bollinger')ax1.legend(loc='upper left'); ax1.set_ylabel('Fiyat (€)')ax2.plot(df.index, df.rsi, lw=1); ax2.axhline(70, ls='--'); ax2.axhline(30, ls='--')ax2.set_ylabel('RSI'); fig.autofmt_xdate(); fig.tight_layout()
fill_between bir bandı gölgelendirir; axhline referans seviyeleri çizer; autofmt_xdate tarihleri üst üste binmeyecek şekilde döndürür. 8. dersteki işlem listesinden işlemleri işaretlemek için girişlerde ax1.scatter(entries.index, entries.price, marker='^'), çıkışlarda ise aşağı bakan bir üçgen kullanın.
Sermaye ve düşüş
Hesap dönem boyunca iki katından fazla büyüdüğünde sermayeyi ax.set_yscale('log') ile çizin. Doğrusal bir eksende €10,000'dan €11,000'a bir hareket, daha sonraki €40,000'dan €44,000'a bir hareketin yanında çok küçük görünür; oysa ikisi de +10 %'dur. Düşüş paneli dd = equity / equity.cummax() - 1 değerini çizer ve doldurur: ax.fill_between(dd.index, dd, 0, alpha=0.4). Bu paneli üç şey için okuyun: en derin nokta (maksimum düşüş), sıfırın altındaki en uzun süre (su altında geçen süre; çoğu zaman derinlikten daha acı vericidir) ve düşüşlerin tek bir piyasa rejiminde kümelenip kümelenmediği.
Getiri dağılımları
ax.hist(returns, bins=50, density=True), günlük veya işlem başına getirilerin şeklini gösterir. Kalın kuyrukları görmek için aynı ortalama ve standart sapmaya sahip bir normal eğriyi üzerine çizin: gerçek getirilerde çan eğrisinin öngördüğünden daha fazla aşırı gün vardır. Bir işlem listesi için bunun yerine R-katlarını çizin: sağlıklı bir trend sistemi −1R civarında çok sayıda küçük kayıp ve uzun bir sağ kuyruk gösterir; volatilite satan (short-volatility) bir sistem ise bunun ayna görüntüsünü gösterir ve bu bir uyarı işaretidir. Çarpıklığı ve basıklığı returns.skew() ve returns.kurt() ile raporlayın (pandas fazla basıklık döndürür, dolayısıyla 0 normale benzer kuyruklar anlamına gelir).
Dışa aktarma
fig.savefig('equity.png', dpi=150, bbox_inches='tight') bir raster görüntü yazar; piksel boyutu = inç × DPI'dır, dolayısıyla 150 DPI'da 10 × 6 inçlik bir şekil 1,500 × 900 pikseldir. Bir raporda keskin kalan vektör çıktı için .svg veya .pdf, beyaz kenar boşluklarını kırpmak için bbox_inches='tight' kullanın. Bir döngü içinde kaydettikten sonra her zaman plt.close(fig) çağırın; aksi takdirde 40 izleme listesi grafiği üreten bir betik (12. ders) bellekte 40 şekil tutar. Varsayılanları her çağrıda değil, bir kez plt.rcParams['figure.dpi'] = 110 ile ayarlayın.
Çözümlü örnek
Varsayımsal örnek: bir geriye dönük test sermaye serisi (euro, uydurma) ve grafiği. Ücretler ve vergiler sermaye değerlerine dahil edilmemiştir.
- Yıl sonlarındaki sermaye: €10,000, €13,000, €11,700, €16,000, €24,000. Düşüş serisi: zirveler 10,000; 13,000; 13,000; 16,000; 24,000 → düşüşler 0; 0; 11,700 / 13,000 − 1 = −10.0 %; 0; 0. Maksimum düşüş −10 %, su altında geçen süre yaklaşık bir yıl.
- Doğrusal bir eksende son bölüm (+€8,000) resmin tamamına hâkim olur; logaritmik eksende ise +30 %, −10 %, +36.8 %, +50 % adımları gerçek göreli büyüklükleriyle görünür ve −10 %'luk yıl düzleşmek yerine görünür hâle gelir.
- Günlük getiriler: ortalama 0.06 %, standart sapma 1.1 %, fazla basıklık 4.2. Bu standart sapmaya sahip bir normal dağılım, −3.3 %'lük bir günü (üç standart sapma) yaklaşık 740 günde bir öngörürdü; histogram ise 1,000 günde bu türden yedi gün gösteriyor. Bu fark kalın kuyruktur ve stopların fiyat boşluklarıyla atlanabilmesinin nedenidir (8. ders).
- Dışa aktarma:
dpi=200ilefigsize=(8, 5), bir sunum slaytı için yeterli olan 1,600 × 1,000 piksel verir; aynı şekil SVG olarak kaydedildiğinde çözünürlükten bağımsızdır ve çoğu zaman 100 kB'den küçüktür.
Sık yapılan hata
Uygulama etkinliği
Kâğıt üzerinde: (a) Bir sermaye eğrisi 20,000 → 26,000 → 19,500 → 28,000 şeklinde ilerliyor (euro cinsinden, dört nokta). Her noktadaki düşüşü hesaplayın. (b) 100 DPI'da tam olarak 1,200 × 800 piksel bir şekil istiyorsunuz; hangi figsize değerini verirsiniz? (c) Bir stratejinin R-katı histogramında en yüksek çubuk +0.2R ile +0.4R arasında ve ince bir sol kuyruk −6R'ye kadar uzanıyor. Bu şeklin strateji hakkında ne düşündürdüğünü ve bir Sharpe oranının göstermeyeceği riski tek cümleyle yazın.
Çözümü göster
(a) Zirveler: 20,000; 26,000; 26,000; 28,000. Düşüşler: 0; 0; 19,500 / 26,000 − 1 = −25.0 %; 0.
(b) figsize = (1,200 / 100, 800 / 100) = (12, 8) inç.
(c) Çok sayıda küçük kazanç ve nadir ama çok büyük kayıplar, risk satan bir stratejinin profilidir (örneğin opsiyon yazmak veya maliyet düşürmek için düşüşte alım yapmak); bir ortalama ve bir standart sapmadan oluşturulan Sharpe oranı sık görülen küçük kazançlarla yukarı çekilir ve aylarca elde edilen kazançları silen −6R'lik bir gün olasılığını olduğundan düşük gösterir.
Sınırlamalar: kabaca 100'den az gözleme sahip bir histogram, kuyruk şeklini değerlendirmek için fazla gürültülüdür; bunun yerine gerçekleşen en kötü değerleri raporlayın.
Önemli çıkarımlar
- Fiyat, gösterge, sermaye ve düşüş panelleri için x eksenini paylaşan
plt.subplotskullanın; birimleri etiketleyin. - Logaritmik ölçekli sermaye yüzde hareketleri dürüstçe gösterir; düşüş grafikleri derinliği ve su altında geçen süreyi gösterir.
- Getiri veya R-katı histogramları, özet istatistiklerin gizlediği kalın kuyrukları ve asimetriyi ortaya çıkarır.
- Piksel = inç × DPI; raporlar için SVG veya PDF'yi tercih edin ve döngüler içinde şekilleri kapatın.
Sonraki adım
11. ders tek bir enstrümandan birden fazlasına geçiyor: korelasyon ve kovaryans matrisleri, ağırlıklardan portföy volatilitesi ve pandas'ta bir yeniden dengeleme simülasyonu.
Ö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.