Mayıs’ta Sat ve Uzak Dur Kuralı İşe Yarıyor mu?
S&P 500’de iki on yıllık test, kasım-nisan döneminin üstünlüğünü ve yaz aylarında nakitte beklemenin pratikte ne kadara mal olduğunu ortaya koyuyor.
“Mayıs’ta sat ve uzak dur” borsa takvimindeki en bilinen kurallardan biridir: Nisan sonunda satış yapılır, yaz boyunca nakitte beklenir ve ekim sonunda yeniden alım yapılır. Son Nisan 2005 kapanışından son Nisan 2026 kapanışına kadar S&P 500’ü izleyen ürünlerin fiyatları üzerinden yapılan ölçümde, yılın kasım-nisan dönemi mayıs-ekim dönemine kıyasla ortalama olarak daha yüksek getiri sağlamaktadır. Fark gerçektir; ancak bu ifade kadar büyük değildir. Yaz dönemi de ortalama olarak kazanç sağlar. Kuralın bir strateji olarak zayıfladığı nokta budur.
Kural ne diyor ve nasıl test edilir?
Bu ifade, ilkbahardaki yarış toplantılarının ardından Londra’dan ayrılıp sonbaharda geri dönme alışkanlığından kaynaklanır. Günümüzde test edilebilir biçimi, iki tarihli bir geçiş kuralıdır. Geniş kapsamlı bir hisse endeksi, ekimin son işlem gününden nisanın son işlem gününe kadar elde tutulur. Diğer altı ay boyunca pozisyon alınmaz.
Bu kuralı test etmek için özdeyişin sağlamadığı iki unsur gerekir: bir fiyat serisi ve belirlenmiş bir dönem. Aşağıdaki tüm rakamlar, en eski S&P 500 exchange traded fund olan SPY için global_markets.delayed_stocks_minute_aggs tablosundaki normal seans dakika çubuklarından alınmıştır. Veri, Nisan 2005’in son kapanışından Nisan 2026’nın son kapanışına kadar uzanır. Buradaki aylık getiri, yalnızca fiyat bazında, ayın son normal seans fiyatının önceki ayın son fiyatına göre değişimidir. Temettüler aşağıda ayrı bir bölümde ele alınır. aylık getirilerin nasıl ölçüldüğü başlığı, bu ayrımın sonucu neden değiştirdiğini açıklar.
Mayıs ayında satıp piyasadan çekilmek işe yarar mı? 2005-2026 dönemi
Her verinin arkasındaki tam SQL
WITH monthly AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(close, window_start) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-04-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-04-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
)
SELECT toYear(apr_m.month_start) AS year,
round(100 * (toFloat64(oct_m.month_close) / toFloat64(apr_m.month_close) - 1), 2) AS may_oct_pct,
round(100 * (toFloat64(apr_next.month_close) / toFloat64(oct_m.month_close) - 1), 2) AS nov_apr_pct
FROM monthly AS apr_m
INNER JOIN monthly AS oct_m ON oct_m.month_start = addMonths(apr_m.month_start, 6)
INNER JOIN monthly AS apr_next ON apr_next.month_start = addMonths(apr_m.month_start, 12)
WHERE toMonth(apr_m.month_start) = 4
ORDER BY yearHer nokta bir yaz mevsimini, onu izleyen kış dönemiyle eşleştirir. Grafik, 21 tam eşleşmeyi kapsar; 2005 yazıyla başlar ve Nisan 2026 sonunda sona eren kışla kapanır.
İki çizgi, çoğu tekil yılda farklı sonuç gösterir ve en kötü yılda aynı yönde hareket eder. Nisan sonu ile Ekim sonu arasında 2008 yaz dönemi -29.81% ölçümünü kaydetti; bu, serideki en derin gerilemeydi. Ardından gelen kış dönemi -10.03% ölçümünü kaydetti. Nisan ayında satış yapan bir yatırımcı sert düşüşün büyük bölümünden kaçındı, ardından düşüşün son aşaması için yeniden pozisyon aldı. Takvim ile kayıp, dönemin yalnızca yarısında aynı yönde gerçekleşti.
Yaz dönemi farkı 2015'ten bu yana azaldı mı?
Asıl iddia ortalamalara dayanır; bu ortalamaların dayandığı dönem de belirleyicidir. Dönem 2015'te ikiye bölündüğünde, aynı yöntemle hesaplanmış ve uzunlukları birbirine yakın iki bölüm elde edilir.
Her verinin arkasındaki tam SQL
WITH monthly AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(close, window_start) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-04-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-04-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
pairs AS (
SELECT toYear(apr_m.month_start) AS season_year,
toFloat64(oct_m.month_close) / toFloat64(apr_m.month_close) - 1 AS may_oct,
toFloat64(apr_next.month_close) / toFloat64(oct_m.month_close) - 1 AS nov_apr
FROM monthly AS apr_m
INNER JOIN monthly AS oct_m ON oct_m.month_start = addMonths(apr_m.month_start, 6)
INNER JOIN monthly AS apr_next ON apr_next.month_start = addMonths(apr_m.month_start, 12)
WHERE toMonth(apr_m.month_start) = 4
),
tagged AS (
SELECT may_oct,
nov_apr,
arrayJoin(['All seasons 2005-2025',
if(season_year <= 2014, 'First half 2005-2014', 'Second half 2015-2025')]) AS era
FROM pairs
)
SELECT era,
count() AS season_count,
round(100 * avg(may_oct), 2) AS avg_may_oct_pct,
round(100 * avg(nov_apr), 2) AS avg_nov_apr_pct,
round(100 * (avg(nov_apr) - avg(may_oct)), 2) AS winter_minus_summer_pct,
countIf(may_oct > 0) AS summers_positive
FROM tagged
GROUP BY era
ORDER BY eraToplam 21 sezonun tamamında, Mayıs-Ekim dönemi ortalama 3.88%, Kasım-Nisan dönemi ise ortalama 6.06% getiri sağladı; aradaki fark 2.18 yüzde puandı. Kuralın dayandığı bütün gerekçe bu farktır. Yaz sütununa bakıldığında, bu yazların 16 oranı başlangıç seviyesinin üzerinde tamamlandı. Dolayısıyla ortalama olarak piyasada beklemek, kayıptan çok kazançtan vazgeçmek anlamına geldi.
İki bölüm birbirinden ayrışıyor. İlk bölümde fark 4.84 puan olurken, sonraki bölümde -0.24 puan oldu. Popüler anlatımlar, farkı arkasındaki yılları belirtmeden aktarır. Oysa asıl tartışma yıllara dayanır. Her mevsimsel istatistik, tarihin belirli bir dönemi hakkında ileri sürülen bir iddiadır. Bu dönemi, istatistiği aktaran kişi seçer.
Gerçekten ağustos ve eylül etkisi mi?
Altı aylık dönem kaba bir ölçüttür. Takvimi aylara bölmek, yaz döneminin genel olarak zayıf mı seyrettiğini yoksa sonucun tek bir aydan mı kaynaklandığını ortaya koyar.
Her verinin arkasındaki tam SQL
WITH monthly AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(close, window_start) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-04-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-04-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
month_returns AS (
SELECT m1.month_start AS month_start,
100 * (toFloat64(m1.month_close) / toFloat64(m0.month_close) - 1) AS ret_pct
FROM monthly AS m1
INNER JOIN monthly AS m0 ON m0.month_start = addMonths(m1.month_start, -1)
)
SELECT formatDateTime(month_start, '%b') AS label,
count() AS readings,
round(avg(ret_pct), 2) AS avg_return_pct,
round(quantileDeterministic(0.5)(ret_pct, cityHash64(month_start)), 2) AS median_return_pct,
countIf(ret_pct > 0) AS positive_readings
FROM month_returns
GROUP BY label
ORDER BY min(toMonth(month_start))Zayıflık eylülde yoğunlaşıyor. Eylül ortalama -0.75% getiri sağladı ve 21 yılın 12 yılında yükselişle tamamlandı; medyan getiri 0.38% oldu. Ağustosta ortalama getiri 0.28% seviyesindeydi. Satış yapan yatırımcının atladığı dönemin ortasında yer alan temmuzda ortalama getiri 2.63%, kuralın pozisyonu yeniden aldığı tarihten önceki son ay olan ekimde ise 0.97% oldu.
Bu dönemdeki etkinin yapısı dar kapsamlıdır: Yaz sonlarında tek bir zayıf dönem görülür ve çevresindeki aylar takvimin geri kalanına büyük ölçüde benzer. Eylülü atlamak için nisan sonlarında pozisyondan çıkmak, mayıs, haziran, temmuz ve ağustos aylarını da kaçırmak anlamına gelir.
What the switch actually costs
The seasonal gap is a gross number. A rule has to survive its own frictions.
Her verinin arkasındaki tam SQL
WITH monthly AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(close, window_start) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-04-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-04-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
pairs AS (
SELECT toYear(apr_m.month_start) + 1 AS year,
toFloat64(oct_m.month_close) / toFloat64(apr_m.month_close) AS summer_ratio,
toFloat64(apr_next.month_close) / toFloat64(oct_m.month_close) AS winter_ratio
FROM monthly AS apr_m
INNER JOIN monthly AS oct_m ON oct_m.month_start = addMonths(apr_m.month_start, 6)
INNER JOIN monthly AS apr_next ON apr_next.month_start = addMonths(apr_m.month_start, 12)
WHERE toMonth(apr_m.month_start) = 4
)
SELECT year,
round(exp(sum(log(summer_ratio * winter_ratio)) OVER (ORDER BY year)), 2) AS buy_and_hold_growth,
round(exp(sum(log(winter_ratio)) OVER (ORDER BY year)), 2) AS winter_only_growth
FROM pairs
ORDER BY yearA dollar held through every season from the end of April 2005 grew to $6.21 by the end of April 2026. The same dollar in the market only from November through April, idle the rest of the time, grew to $3.14. Both lines are price only with nothing deducted, which flatters the switching rule. Here is what the chart leaves out.
- Two trades every year, in every one of the 21 seasons. The ticket is free at most brokers now. The bid ask spread paid on each round trip is not.
- Tax. In a taxable account the April sale realizes whatever gain built up since November. A November to April holding period runs under a year by construction, which places the gain at short-term rates for a US taxpayer.
- Idle cash. The winter-only line credits the sidelined money with zero. A real holder would park it, and where to park idle cash covers the instruments people use for that.
- Dividends, which the next panel prices out.
Her verinin arkasındaki tam SQL
SELECT toYear(ex_dividend_date) AS year,
round(sumIf(cash_amount, toMonth(ex_dividend_date) >= 5 AND toMonth(ex_dividend_date) <= 10), 3) AS may_oct_dividends_usd,
round(sumIf(cash_amount, toMonth(ex_dividend_date) < 5 OR toMonth(ex_dividend_date) > 10), 3) AS nov_apr_dividends_usd
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND cash_amount > 0
AND ex_dividend_date >= toDate('2005-01-01')
AND ex_dividend_date <= toDate('2025-12-31')
GROUP BY year
ORDER BY yearSPY's ex-dividend dates land in March, June, September and December, so two of the four fall inside the six months a seller sits out. In 2025, $3.592 per share of distributions carried a May to October ex-date, against $3.689 in the other six months. The two columns track each other across the whole chart. Sitting out half the calendar forgoes roughly half the fund's income every year, on top of whatever the price does in those months. The ex-dividend date is the cutoff that decides who gets paid.
One more cost carries no line item. Index returns arrive in clusters, and missing the best days puts numbers on what a handful of absent sessions does to a long-run balance. Six months out of every year is a lot of absent sessions. That is the same arithmetic behind dollar cost averaging as a discipline about time in the market rather than timing.
Ünlü bir takvim kuralı neden kuşkuyla karşılanmalı
On iki ay, yatırım yapılacak bir alt küme seçmek için boş olmayan 4.095 farklı kombinasyona izin verir. Bu uzay tek bir fiyat geçmişi üzerinde tarandığında, bir şeyin çarpıcı görünmesi kaçınılmazdır. Bu, aramanın doğal bir özelliğidir.
Sell in May kuralının geçen hafta veri madenciliğiyle bulunmuş bir kurala göre dürüst bir avantajı vardır: Bu kural, kullanılan örneklem dönemi başlamadan çok önce ünlüydü. Bu nedenle bu sayfadaki yıllar, uyarlanmış bir sonuçtan ziyade örneklem dışı test işlevi görür. Test, tek bir ayda yoğunlaşan mütevazı bir fark ortaya koyuyor. Aynı dönemde bu kural, alıp elde tutma stratejisinin gerisinde kalıyor. İleriye dönük yanlılık, bir backtest’in yanıtı nasıl fark ettirmeden önceden öğrendiğini açıklıyor. Takvim kuralları bunun ders kitabı niteliğindeki örneğidir: Aylar, getiriler bilindikten sonra seçilir.
SSS
Mayıs ayında satıp piyasadan uzak durmak hâlâ işe yarıyor mu?
Nisan 2005 ile Nisan 2026 arasındaki SPY fiyatlarında, kasımdan nisana kadar olan dönem ortalama 6.06% getiri sağlarken mayıstan ekime kadar olan dönemde ortalama 3.88% getiri elde edildi. Bu nedenle mevsimsel fark, tüm örneklemde varlığını koruyor. Yaz döneminin ikinci yarısı yine de ortalama kazanç sağladı; 21 yaz döneminin 16 kadarı başlangıç seviyesinin üzerinde tamamlandı.
Gerçekte hangi aylar zayıf?
Bu dönemde zayıflık eylül ayında yoğunlaşıyor. Eylül ayı ortalama -0.75% getiri sağladı ve 21 yılın 12 kadarını yükselişle tamamladı. Stratejinin pozisyon taşımadığı diğer ay olan temmuzda ise aynı dönem için ortalama 2.63% getiri elde edildi.
Mayısta satmak, alıp elde tutma stratejisinden daha iyi sonuç veriyor mu?
Bu örneklemde hayır. Nisan sonundan itibaren kesintisiz tutulan bir dolar, Nisan 2005 itibarıyla Nisan 2026 döneminde $6.21 seviyesine yükseldi. Yalnızca kış döneminde pozisyon taşıyan stratejide ise sonuç $3.14 oldu. Bu karşılaştırmada işlem maliyetleri, vergiler ve temettüler dikkate alınmıyor.
Mayısta satış yapılırsa temettülere ne olur?
Bir fonun ex-dividend date tarihleri yaz dönemi nedeniyle durmaz. SPY’nin dört çeyreklik ex-dividend date tarihinden ikisi mayıs-ekim dönemine denk gelir. Ex-dividend date tarihinde fonda pozisyonu olmayan yatırımcı bu dağıtımı alamaz.
Mevsimsel bir örüntü, tahminle aynı şey midir?
Hayır. 21 mevsim boyunca hesaplanan tarihsel ortalama, belirli bir dönemde ne olduğunu gösterir. İlk grafik de görüldüğü üzere, tek tek yılların sonuçları bu ortalamanın çevresinde geniş bir aralıkta dağılır. Ayrıca incelenen dönem de bir tercihtir.
Buradaki her panel, SQL sorgusu eklenmiş kayıtlı bir sorgudur. Ticker değiştirilebilir, dönem yeniden belirlenebilir ve mevsimsel farkın Strasmore terminalinde geçerliliğini koruyup korumadığı kontrol edilebilir.