Maksimum düşüş nedir ve nasıl hesaplanır?
Maksimum düşüş bir değer serisinde zirveden dibe yaşanan en büyük kayıptır. Düşüşün derinliği ile dipten yeni bir zirveye ulaşmak için gereken sürenin finansal etkilerini inceleyin.
Maksimum düşüş (maximum drawdown)
Maksimum düşüş, bir değer serisindeki zirveden dibe yaşanan en büyük düşüşü ifade eder ve hareketli zirvenin yüzdesi olarak hesaplanır. Yüz yirmi bin dolara yükselen, seksen dört bin dolara gerileyen ve ardından toparlanan bir hesap, yüzde otuzluk bir maksimum düşüşe sahiptir. İstatistik, güncel durumu değil geçmişteki en kötü dönemi kaydettiği için bu oran kalıcıdır. Çoğu kişi sadece düşüşün derinliğini belirtmekle yetinir. Aynı istatistik içerisinde iki veri daha bulunur: zirveden dibe kadar geçen süre ve bu dipten yeni bir zirveye ulaşana kadar geçen çok daha uzun süre.
Maksimum düşüş (maximum drawdown) nasıl hesaplanır?
Hesaplamanın tamamı, veri serisi üzerinde tek bir geçişten ibarettir. Her gözlem noktasında hareketli zirve güncellenir, mevcut değer bu zirve ile kıyaslanır ve şimdiye kadar görülen en kötü değer saklanır.
- Hareketli zirveyi ilk değere eşitleyin.
- Her yeni değerde, eğer değer daha yüksekse zirveyi yükseltin.
- O noktadaki düşüşü hesaplayın: değer bölü zirve, eksi bir.
- En negatif okumayı saklayın. Bu, maksimum düşüş değeridir.
Hesaplamaya hiçbir getiri serisi, volatilite tahmini veya dağılım varsayımı dahil edilmez. Döngü, Python standart kütüphanesi kullanılarak basit bir sayı listesi üzerinde çalışır. Yeni bir Ubuntu sisteminde, önce yorumlayıcıyı kurun:
apt-get update && apt-get install -y python3
Döngüyü maxdd.py olarak kaydedin. Aşağıdaki fiyatlar, elle kontrol edilebilecek kadar küçük tutulmuş on noktalı hayali bir seridir:
prices = [100.0, 104.0, 98.0, 92.0, 95.0, 88.0, 90.0, 101.0, 99.0, 106.0]
peak = prices[0]
max_dd = 0.0
for price in prices:
if price > peak:
peak = price
drawdown = price / peak - 1.0
if drawdown < max_dd:
max_dd = drawdown
print(f"maximum drawdown: {max_dd * 100:.1f}%")
python3 maxdd.py komutunu çalıştırdığınızda maximum drawdown: -15.4% çıktısını verir. Elle kontrol edin: dip noktadan önceki zirve 104, dip nokta 88'dir ve 88'in 104'e bölümü 0,846'dır. Seri daha sonra tüm zamanların en yükseği olan 106'da sona erer ve yüzde 15,4'lük düşüş geçerliliğini korur. Maksimum düşüş, bir örneklemdeki en kötü anın kalıcı kaydıdır ve serinin bugün nerede olduğu hakkında hiçbir bilgi vermez. Aynı döngü içerisine eklenecek iki değişken daha zamanlamayı yakalar: zirvenin belirlendiği indeks ve en kötü okumanın gerçekleştiği indeks.
Bir düşüş eğrisi nasıl görünür
Bir düşüş eğrisi, 3. adımı tek bir en kötü değerle sınırlamak yerine her noktada takip eder. Seri yeni bir zirve kaydettiğinde çizgi sıfır noktasında durur, bu zirveler arasında ise sıfırın altında kalır; bu boşluğa "su altı" denmesinin nedeni budur. Aşağıda, S&P 500 endeksini takip eden bir ETF olan SPY için Ocak 2016'dan bu yana ay sonu kapanışları üzerinden oluşturulmuş bu eğri yer almaktadır.
Her verinin arkasındaki tam SQL
WITH monthly AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
runs AS (
SELECT month_start,
close_px,
max(close_px) OVER (ORDER BY month_start
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
FROM monthly
)
SELECT formatDateTime(month_start, '%Y-%m') AS month,
round(100 * (close_px / running_peak - 1), 2) AS drawdown_pct
FROM runs
ORDER BY month_start127 adet ay sonu verisi boyunca çizgi, uzun süreler boyunca sıfıra yakın seyreder ve birkaç derin çentik oluşturarak aşağı iner. Kayıtlardaki son ay, süregelen zirveye karşı -1.27% değerini göstermektedir. Şeklin iki özelliği öğretici niteliktedir. Toparlanmalar keskin sıçramalardan ziyade yavaş tırmanışlardır ve her yeni zirve, eğriyi sıfırlayarak öncesine dair görsel hafızayı siler.
Bir düşüşten toparlanmak ne kadar sürer?
Bir düşüşün içinde üç ayrı sayı bulunur ve bunları tek bir veri olarak ele almak, performans tablolarının en yaygın yanlış okunma biçimidir:
- Derinlik: Değerin zirvesinden ne kadar düştüğü, yüzde olarak.
- Dibe ulaşma süresi: Zirveden dip noktasına kadar geçen takvim günü.
- Toparlanma süresi: O dip noktasından yeni bir zirveye geri dönüş için geçen takvim günü.
Üçüncüsü genellikle en uzun olanıdır ve manşetlerdeki rakamlarda asla gösterilmez. Aşağıdaki panel, 2016'dan bu yana SPY için tamamlanmış her "su altı" (zarar) dönemini günlük kapanışlar üzerinden yeniden oluşturmaktadır. Bir dönem, bir zirvenin belirlendiği gün başlar ve fonun ilk kez bu seviyenin üzerinde kapandığı gün sona erer.
Her verinin arkasındaki tam SQL
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date
),
runs AS (
SELECT session_date,
close_px,
max(close_px) OVER (ORDER BY session_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
FROM daily
),
episodes AS (
SELECT running_peak AS peak_px,
min(session_date) AS peak_date,
argMin(session_date, close_px) AS trough_date,
min(close_px) AS trough_px
FROM runs
GROUP BY running_peak
),
sequenced AS (
SELECT peak_px,
peak_date,
trough_date,
trough_px,
leadInFrame(peak_date, 1) OVER (ORDER BY peak_date
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS recovery_date
FROM episodes
)
SELECT formatDateTime(peak_date, '%b %Y') AS episode_label,
round(100 * (1 - trough_px / peak_px), 1) AS fall_from_peak_pct,
dateDiff('day', peak_date, trough_date) AS days_to_trough,
dateDiff('day', trough_date, recovery_date) AS days_to_new_high,
dateDiff('day', peak_date, recovery_date) AS days_underwater
FROM sequenced
WHERE recovery_date > trough_date
AND round(100 * (1 - trough_px / peak_px), 1) >= 5
ORDER BY fall_from_peak_pct DESC
LIMIT 8Listedeki en derin tamamlanmış dönem Feb 2020 tarihinde başlar ve önceki zirvenin 34.2% altına iner. Bu dönemde değer kaybı 33 takvim günü sürmüş, toparlanma ise 148 gün sürmüş olup toplamda 181 gün su altında kalınmıştır. Jan 2022 tarihli bir sonraki giriş ise 25.4% ile daha sığdır ve fonu eski zirvesinin altında 746 gün boyunca tutmuştur.
Derinlik ve süre tamamen birbirinden ayrılır. Hızlı bir toparlanma ile sonuçlanan sert bir düşüş ile yıllarca süren sığ bir erime, tek bir yüzde değerine indirgenir. Mart 2020 çöküşü ilk şeklin ders kitabı örneğidir; piyasaların çöküşlerden nasıl toparlandığı ise yolculuğun ikinci ayağını takip eder.
Maksimum düşüş ölçüm süresi uzadıkça neden kötüleşir
Maksimum düşüş bir tepe değeridir; bu nedenle geçmiş verilerin eklenmesi bu değeri ya sabit tutar ya da daha aşağı çeker. Daha uzun bir zaman dilimindeki hareketli zirve, her noktada daha kısa bir zaman dilimindeki zirveye eşit veya ondan daha yüksektir; aritmetik kuralı belirleyen budur. Aynı fonun 31 Temmuz 2026 tarihinde sona eren beş farklı zaman diliminde ölçülmesi bu etkiyi göstermektedir.
Her verinin arkasındaki tam SQL
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-07-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date
),
scoped AS (
SELECT arrayJoin([1, 2, 3, 5, 10]) AS lookback_years,
session_date,
close_px
FROM daily
),
windowed AS (
SELECT lookback_years, session_date, close_px
FROM scoped
WHERE session_date >= subtractYears(toDate('2026-07-31'), lookback_years)
),
runs AS (
SELECT lookback_years,
session_date,
close_px,
max(close_px) OVER (PARTITION BY lookback_years ORDER BY session_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
FROM windowed
)
SELECT concat(toString(lookback_years), if(lookback_years = 1, ' year', ' years')) AS lookback,
round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,
formatDateTime(argMax(session_date, 1 - close_px / running_peak), '%b %Y') AS worst_point
FROM runs
GROUP BY lookback_years
ORDER BY lookback_years1 year dönemlik geriye dönük pencerede ölçülen en kötü düşüş 9.1% seviyesindedir. Aynı seriyi 10 years dönemine uzattığınızda okunan değer 34.2% olur ve en kötü nokta Mar 2020 dönemine denk gelir. Fon daha riskli hale gelmemiştir. Sadece örneklem süresi uzamıştır.
Aynı aritmetik, strateji karşılaştırmalarını da çarpıtmaktadır. Üç yıllık bir geçmişe dönük test (backtest) ile yirmi yıllık bir test, aynı davranış biçimini tanımlayabilir ancak yine de birbirinden çok farklı düşüş oranları rapor edebilir. Bu nedenle, söz konusu rakam, yanında hangi zaman dilimine ait olduğu belirtilmediği sürece pek bir anlam ifade etmez. Geriye dönük testlerde ileriye dönük önyargı konusu, temiz görünen bir testin kendini nasıl olduğundan iyi gösterdiğine dair başka bir yöntemi ele almaktadır.
Maksimum düşüş ve volatilite
Volatilite, günlük fiyat hareketlerinin her iki yöndeki tipik büyüklüğünü ölçer. Maksimum düşüş ise belirli bir aşağı yönlü seyri ölçer. Her ikisi de risk göstergesidir ancak farklı sorulara yanıt verirler. Panel, 31 Temmuz 2026 tarihinde sona eren beş yıllık dönem için sekiz bilindik hisseyi yan yana getirmekte; volatilite, günlük kapanışlar üzerinden yıllıklandırılmaktadır.
Her verinin arkasındaki tam SQL
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'KO', 'JNJ', 'CVX', 'VZ', 'PG')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session_date
),
runs AS (
SELECT ticker,
session_date,
close_px,
max(close_px) OVER (PARTITION BY ticker ORDER BY session_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak,
lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY session_date
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
)
SELECT ticker,
round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,
round(100 * sqrt(252) * stddevSampIf(close_px / prev_close - 1, prev_close > 0), 1) AS annualized_volatility_pct
FROM runs
GROUP BY ticker
HAVING countIf(prev_close > 0) > 20
ORDER BY max_drawdown_pct DESCİki sütunu birlikte değerlendirin. VZ, 22.6% yıllıklandırılmış volatiliteye karşılık 45.4% ile gruptaki en derin düşüşü yaşamıştır. Daha sınırlı düşüş tarafında ise KO, 16.7% volatilite ile 20.9% oranında değer kaybetmiştir. Volatilite, ilgili dönemdeki her günün ortalamasıdır ve ortalamalar uzun süreli yavaş düşüşleri maskeleyebilir. Düşüş (drawdown) ise fiyatın fiilen izlediği en kötü seyirdir. İki yıl boyunca yavaşça değer kaybeden sakin bir varlık, dikkat çekmeyen bir volatilite değeriyle derin bir düşüş kaydedebilir.
Düşük volatilite anomalisi, sakin isimlerin uzun vadede nasıl hareket ettiğini incelemekte, Kelly kriteri ile pozisyon büyüklüğü belirleme ise düşüş toleransının nasıl pozisyon büyüklüğüne dönüştüğünü göstermektedir.
Rakamların söyleyemedikleri
Akılda tutulması gereken dört sınırlama mevcuttur:
- Bu sadece gerçekleşmiş tek bir yoldur. Aynı süreç, farklı bir çekilişte çok daha kötü bir rakam üretebilirdi.
- Örneklem uzunluğuna bağlıdır; bu nedenle iki düşüş (drawdown) ancak eşleşen pencereler üzerinden kıyaslanabilir.
- Örnekleme sıklığına bağlıdır. Ay sonu kapanışları gün içi en düşük seviyeleri gizler ve aynı dönemdeki günlük kapanışlara kıyasla daha küçük bir rakam üretir.
- Geleceğe dair hiçbir bilgi taşımaz. Bir zirvenin yüzde otuz altında olmak, otuz birinci puanın yarın gelip gelmeyeceği hakkında hiçbir şey söylemez.
Bu son sınırlama, otomatik bir sistemin bir düşüş eşiğinden ziyade bir düşüş politikasına ihtiyaç duymasının nedenidir. "Yüzde yirmide durdur" komutu tek bir soruyu yanıtlar ancak iki soruyu yanıtsız bırakır: durdurma anında açık pozisyonlara ne olacağı ve sistemin tekrar devreye girmesini sağlayacak kanıtın ne olduğu. İşlem botları için devre kesiciler, bu politikanın yapısını ele alır. Keyfi ve sabit bir kuralın maliyeti, sistemin dip seviyeye yakın durup geç yeniden başladığı ve yükselişi kaçırdığı toparlanma aşamasında ortaya çıkar. En iyi günleri kaçırmak, bu aritmetiği rakamlarla ortaya koyar.
İki rakamı kıyaslamadan önce bir ölçüm detayı önem taşır: bir fonun fiyat serisindeki düşüş ile gerçek bir hesaptaki düşüş, nakit giriş-çıkışı olduğunda ve temettüler hesaba yattığında farklılık gösterir; aylık getiriler nasıl ölçülür konusu bunu tüm detaylarıyla ele alır.
Maksimum düşüş (maximum drawdown) SSS
İyi bir maksimum düşüş oranı nedir?
Evrensel bir rakam yoktur; sadece bir kıyaslama ölçütü ve ölçüm aralığı vardır. 31 Temmuz 2026 tarihine kadar olan on yıllık dönemde, SPY'nin zirveden gördüğü en kötü düşüş günlük kapanışlar bazında 34.2% olarak ölçülmüştür. Daha kısa bir örneklem üzerinde daha küçük bir rakam sunan bir strateji, zorunlu olarak daha güvenli değildir.
Maksimum düşüş volatilite ile aynı mıdır?
Hayır. Volatilite tipik günlük hareketi tanımlar; maksimum düşüş ise zirveden dibe giden en kötü tekil yolu tanımlar. İki yıl boyunca istikrarlı bir şekilde değer kaybeden düşük volatiliteli bir varlık, sürekli yeni zirveler tazeleyen dalgalı bir varlıktan daha derin bir düşüş yaşayabilir.
Maksimum düşüşten toparlanmak ne kadar sürer?
Bu durum değişkenlik gösterir ve zirveye geri tırmanış genellikle sürecin daha uzun olan yarısıdır. 2016'dan bu yana SPY için, önceki bir zirvenin altında tamamlanan en derin dönem, zirveden yeni zirveye kadar 181 takvim günü sürmüş olup, bunun 33 günü düşüşle geçmiştir.
Maksimum düşüş gelecekteki kayıpları öngörür mü?
Hayır. Sadece gerçekleşmiş olan bir yolu tanımlar ve daha uzun bir örneklem neredeyse her zaman daha büyük bir rakam üretir. Bir stratejinin bugüne kadar neyi atlattığını kaydeder, ancak gelecekte ne olacağına dair bir sınır çizmez.
Yukarıdaki her panel, arkasındaki SQL sorgusunu barındırır. Birini açın, ticker sembolünü veya zaman aralığını değiştirin ve aynı düşüş hesaplamasını Strasmore terminalinde çalıştırın.