Gumagana ba ang Sell in May and Go Away?
Sinuri ang Sell in May and Go Away sa dalawang dekada ng S&P 500. Alamin ang laki ng summer gap at aktuwal na gastos ng seasonal switch.
Ang “Sell in May and go away” ang pinakakilalang calendar rule sa stock market: magbenta sa pagtatapos ng April, manatili sa cash sa buong summer, at muling bumili sa pagtatapos ng October. Batay sa mga presyo ng S&P 500 tracker mula sa huling pagsasara ng April 2005 hanggang sa huling pagsasara ng April 2026, mas mataas nga sa average ang return ng November hanggang April kaysa sa May hanggang October. Totoo ang agwat, ngunit mas maliit ito kaysa ipinahihiwatig ng kasabihan. May average gain din ang summer half, kaya hindi gumagana ang rule bilang isang investment plan.
Ano ang sinasabi ng rule at paano ito sinusuri
Nagmula ang parirala sa isang lumang kaugalian sa London na umalis ng lungsod pagkatapos ng mga spring race meeting at bumalik pagsapit ng taglagas. Sa makabagong anyo nito na maaaring subukan, isa itong switching rule na may dalawang petsa. Hawak mo ang isang broad stock index mula sa huling trading day ng October hanggang sa huling trading day ng April. Wala kang hawak sa natitirang anim na buwan.
Dalawang bagay ang kailangan sa pagsusuri nito na hindi kailanman ibinibigay ng kasabihan: isang price series at isang tinukoy na window. Lahat ng bilang sa ibaba ay gumagamit ng SPY, ang pinakamatandang S&P 500 exchange traded fund, na naka-presyo batay sa regular-hours minute bars sa global_markets.delayed_stocks_minute_aggs table, mula sa final April 2005 close hanggang sa final April 2026 close. Ang monthly return dito ay ang huling regular-hours price ng buwan kumpara sa price ng nakaraang buwan lamang. May hiwalay na seksyon para sa mga dibidendo sa ibaba, at ipinapaliwanag ng kung paano sinusukat ang monthly returns kung bakit nagbabago ang resulta dahil sa pagkakaibang iyon.
Gumagana ba ang sell in May and go away? Ang record mula 2005 hanggang 2026
Ang eksaktong SQL sa likod ng bawat numero
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 yearAng bawat punto ay nagtutugma ng isang summer sa winter na sumunod dito. May 21 kumpletong pares ang chart. Nagsisimula ito sa summer ng 2005 at nagtatapos sa winter na nagtapos noong Abril 2026.
Hindi nagtutugma ang dalawang linya sa karamihan ng mga indibidwal na taon, at nagtugma lamang sa pinakamasamang taon. Sa pagitan ng katapusan ng Abril at katapusan ng Oktubre, ang summer half na 2008 ay nagtala ng -29.81%, ang pinakamalalim na reading sa buong saklaw. Ang sumunod na winter ay nagtala ng -10.03%. Ang holder na nagbenta noong Abril ay nakaiwas sa matinding pagbaba noong taglagas, ngunit muling pumasok para sa huling bahagi ng pagbaba. Kalahati lamang ng buong biyahe ang tinugma ng kalendaryo at ng pinsala.
Humina na ba ang summer gap mula noong 2015?
Ang mga average ang tunay na ipinapahiwatig ng kasabihan, at ang time window ang pinagbabatayan ng mga average na iyon. Sa paghahati ng serye noong 2015, nagiging dalawang halos magkasinghaba na bahagi ito na parehong paraan ang pagkukuwenta.
Ang eksaktong SQL sa likod ng bawat numero
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 eraSa lahat ng 21 season, ang average mula May hanggang October ay 3.88%, habang ang average mula November hanggang April ay 6.06%, na may spread na 2.18 percentage points. Ang spread na iyon ang buong batayan ng rule. Tingnan ang summer column sa tabi nito: 16 ng mga summer na iyon ay nagtapos nang mas mataas kaysa sa panimulang antas, kaya ang average na pag-iwas sa merkado ay nakaligtaan ang gain sa halip na umiwas sa loss.
Magkaiba ang dalawang bahagi. Ang naunang block ay may spread na 4.84 points, habang ang sumunod ay -0.24. Madalas banggitin ng mga popular na salaysay ang gap nang hindi tinutukoy ang mga taong pinagbabatayan nito, ngunit ang mga taon ang mismong argumento. Ang anumang seasonal statistic ay pahayag tungkol sa isang takdang yugto ng kasaysayan, at ang pagpili sa yugtong iyon ay ginagawa ng sinumang umuulit nito.
August at September effect nga ba ito?
Masyadong malawak na sukatan ang anim na buwan. Kapag hinati ang calendar ayon sa buwan, malalaman kung pantay-pantay bang mahina ang summer window o kung isang bahagi nito ang bumubuo sa buong resulta.
Ang eksaktong SQL sa likod ng bawat numero
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))Sa September nakapokus ang kahinaan. Nag-average ito ng -0.75% at nagtapos na mas mataas sa 12 sa 21 taon, na may median na 0.38%. Nag-average naman ang August ng 0.28%. Ang July, na nasa gitna ng panahong nilalaktawan ng seller, ay nag-average ng 2.63%, habang ang October, ang huling buwan bago muling bumili ang rule, ay nag-average ng 0.97%.
Makitid ang anyo ng effect sa window na ito: isang mahinang bahagi sa bandang huli ng summer, habang ang mga buwang nakapaligid dito ay halos katulad ng iba pang bahagi ng calendar. Ang pag-exit sa katapusan ng April upang malaktawan ang September ay nangangahulugan ding hindi paghawak sa May, June, July at August.
Ang aktuwal na gastos ng paglipat
Gross number ang seasonal gap. Kailangang kayanin ng isang rule ang sarili nitong mga friction.
Ang eksaktong SQL sa likod ng bawat numero
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 yearAng isang dollar na hawak sa buong bawat season mula sa katapusan ng Abril 2005 ay lumago sa $6.21 pagsapit ng katapusan ng Abril 2026. Ang parehong dollar na nasa market lamang mula Nobyembre hanggang Abril, at idle sa natitirang panahon, ay lumago sa $3.14. Price-only ang dalawang linya at walang ibinawas, kaya nagmumukhang mas maganda ang switching rule kaysa sa aktuwal. Narito ang hindi ipinapakita ng chart.
- Dalawang trade bawat taon, sa bawat isa sa 21 season. Karaniwang libre na ang ticket sa karamihan ng brokers. Pero may bayad sa bid-ask spread sa bawat round trip.
- Tax. Sa taxable account, isinasakatuparan sa April sale ang anumang gain na naipon mula Nobyembre. Ayon sa disenyo, wala pang isang taon ang November-to-April holding period, kaya short-term rates ang ipapataw sa gain para sa US taxpayer.
- Idle cash. Ang winter-only line ay nag-a-assume ng zero return para sa perang hindi ginagamit. Sa aktuwal, maaaring ilagak ito ng holder, at tinatalakay sa kung saan ilalagak ang idle cash ang mga instrumentong ginagamit para rito.
- Mga dibidendo, na kinakalkula sa susunod na panel.
Ang eksaktong SQL sa likod ng bawat numero
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 yearAng ex-dividend dates ng SPY ay pumapatak sa Marso, Hunyo, Setyembre at Disyembre, kaya dalawa sa apat ang nasa loob ng anim na buwang hindi hawak ng seller ang fund. Sa 2025, $3.592 bawat share ng distributions ang may ex-date mula Mayo hanggang Oktubre, kumpara sa $3.689 sa kabilang anim na buwan. Magkakasunod ang galaw ng dalawang column sa buong chart. Ang hindi paghawak sa fund sa kalahati ng calendar ay nangangahulugang hindi nakokolekta ang humigit-kumulang kalahati ng income nito bawat taon, bukod pa sa anumang galaw ng presyo sa mga buwang iyon. Ang ex-dividend date ang cutoff na nagtatakda kung sino ang babayaran.
May isa pang gastos na walang hiwalay na line item. Dumarating nang magkakumpulan ang index returns, at ipinapakita ng pagkawala sa pinakamagagandang araw kung ano ang epekto ng ilang sesyon na hindi nadaluhan sa long-run balance. Mahaba ang anim na buwang hindi namumuhunan sa bawat taon. Ito rin ang arithmetic sa likod ng dollar cost averaging bilang disiplina sa tagal ng pananatili sa market, sa halip na pagtatangkang hulaan ang tamang timing.
Bakit dapat pagdudahan ang isang sikat na calendar rule
May 4,095 na non-empty na paraan upang pumili ng subset ng 12 buwan kung kailan mamumuhunan. Kapag hinanap ang pinakamagandang pattern sa isang price history, may tiyak na magmumukhang kapansin-pansin. Katangian ito ng mismong paghahanap.
May isang tapat na bentahe ang Sell in May kumpara sa isang rule na minina lamang noong nakaraang linggo: sikat na ito bago pa magsimula ang sample na ito. Kaya ang mga taon sa pahinang ito ay nagsisilbing out-of-sample test, hindi fitted result. Nagpakita ang test ng maliit na agwat na nakasentro sa isang buwan. Kaugnay ito ng switching rule na nahuhuli sa buying and holding sa parehong panahon. Ipinapakita ng Look-ahead bias kung paano tahimik na natututuhan ng isang backtest ang sagot nang mas maaga. Ang calendar rules ang textbook case nito: pinipili ang mga buwan matapos malaman ang mga return.
FAQ
Gumagana pa ba ang “sell in May and go away”?
Sa presyo ng SPY mula Abril 2005 hanggang Abril 2026, nag-average ang Nobyembre hanggang Abril ng 6.06% kumpara sa 3.88% para sa Mayo hanggang Oktubre. Kaya nananatili ang seasonal gap sa buong sample. Nag-average pa rin ng gain ang summer half, at 16 ng 21 summers ang nagtapos nang mas mataas kaysa sa kanilang panimulang antas.
Aling mga buwan talaga ang mahina?
Sa window na ito, nakasentro ang kahinaan sa Setyembre. Nag-average ito ng -0.75% at nagtapos nang mas mataas sa 12 ng 21 taon. Ang Hulyo, isa pang buwang iniiwasan ng rule, ay nag-average ng 2.63% sa parehong panahon.
Mas mahusay ba ang pagbebenta sa Mayo kaysa sa pagbili at patuloy na paghawak?
Hindi sa sample na ito. Ang isang dollar na patuloy na hinawakan mula sa katapusan ng Abril 2005 ay lumago sa $6.21 pagsapit ng Abril 2026. Samantala, naging $3.14 ito sa winter-only switch. Hindi kasama sa paghahambing na ito ang trading costs, buwis, at mga dibidendo.
Ano ang nangyayari sa mga dibidendo kapag nagbenta ka sa Mayo?
Hindi humihinto ang ex-dividend dates ng isang fund pagsapit ng summer. Dalawa sa apat na quarterly ex-dates ng SPY ay nasa loob ng window mula Mayo hanggang Oktubre. Kapag wala sa fund ang holder sa ex-date, hindi niya matatanggap ang distribution na iyon.
Ang seasonal pattern ba ay kapareho ng prediction?
Hindi. Inilalarawan ng historical average sa loob ng 21 seasons kung ano ang nangyari sa isang itinakdang window. Malaki ang pag-iiba-iba ng mga indibidwal na taon kumpara sa average na iyon, gaya ng ipinapakita ng unang chart. Ang mismong window ay isa ring piniling parameter.
Ang bawat panel dito ay stored query na may kalakip na SQL. Palitan ang ticker, baguhin ang window, at tingnan kung nananatili ang seasonal gap sa Strasmore terminal.