⚠ 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 10 / 13 · Ücretsiz

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.

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

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.

  1. 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.
  2. 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.
  3. 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).
  4. Dışa aktarma: dpi=200 ile figsize=(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

Sermayeyi doğrusal ölçekte çizip ona "hızlanma" anlamı yüklemekSabit 15 %'lik yıllık getiriye sahip bir strateji, giderek daha dik bir şekilde yukarı kıvrılan doğrusal bir grafik üretir; bu da performans iyileşiyormuş gibi görünür. Logaritmik ölçekte bu düz bir çizgidir. Stratejileri, dönemleri ve düşüşleri logaritmik bir sermaye ekseninde karşılaştırın; doğrusal ekseni yalnızca kısa dönemler için veya euro tutarlarını göstermek için kullanın.

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.subplots kullanı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.

1. figsize=(6, 4) ile oluşturulmuş bir şekil üzerinde fig.savefig('out.png', dpi=300) çağırıyorsunuz. Görüntünün piksel boyutu nedir?

2. İki strateji de on yıl içinde €10,000'ı €40,000'a çıkarıyor. Logaritmik ölçekli bir sermaye grafiğinde A stratejisi neredeyse düz bir çizgi, B stratejisi ise sekiz yıl boyunca yatay seyredip sonra dik bir şekilde yükseliyor. Bu size ne söyler?

3. Bir betik, 60 hisselik bir izleme listesindeki her sembol için bir grafik üretiyor ve her çalıştırmada yavaşlayıp daha fazla bellek kullanıyor. En olası çözüm nedir?

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.