Werkt Sell in May and Go Away?
Sell in May and Go Away getest over twee decennia S&P 500-seizoenen. Bekijk het zomergat en wat de switchregel in de praktijk kost, inclusief het gemiddelde rendement.
‘Sell in May and go away’ is de bekendste kalenderregel op de aandelenmarkt: verkoop eind april, houd gedurende de zomer cash aan en koop eind oktober weer in. Gemeten aan de hand van de koersen van een S&P 500-tracker vanaf de laatste slotkoers van april 2005 tot en met de laatste slotkoers van april 2026, levert de periode november tot en met april gemiddeld inderdaad een hoger rendement op dan de periode mei tot en met oktober. Het verschil is reëel, maar kleiner dan de spreuk suggereert. Ook de zomerperiode levert gemiddeld een positief rendement op. Daar loopt de regel als beleggingsplan vast.
Wat de regel zegt en hoe u die test
De uitdrukking komt voort uit een oude gewoonte in Londen om na de voorjaarskoersen de stad te verlaten en in het najaar terug te keren. In de moderne, toetsbare vorm is het een switchregel met twee datums. U houdt van de laatste handelsdag van oktober tot en met de laatste handelsdag van april een brede aandelenindex aan. De overige zes maanden houdt u geen positie aan.
Voor een test zijn twee zaken nodig die het gezegde zelf niet geeft: een prijsreeks en een vastgelegde periode. Alle onderstaande cijfers gebruiken SPY, de oudste ETF op de S&P 500, geprijsd op basis van minute bars tijdens reguliere handelsuren in de tabel global_markets.delayed_stocks_minute_aggs, vanaf de slotkoers van de laatste handelsdag van april 2005 tot en met de slotkoers van de laatste handelsdag van april 2026. Het rendement van een maand is hier uitsluitend gebaseerd op de laatste prijs tijdens reguliere handelsuren ten opzichte van die van de voorgaande maand. Dividenden worden verderop afzonderlijk behandeld. hoe maandrendementen worden gemeten legt uit waarom dat onderscheid het antwoord verandert.
Werkt sell in May and go away? Het resultaat van 2005 tot en met 2026
De exacte SQL achter elk getal
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 yearElk punt koppelt één zomer aan de daaropvolgende winter. De grafiek bevat 21 volledige paren. De reeks begint met de zomer van 2005 en eindigt met de winter die in april 2026 eindigde.
De twee lijnen lopen in de meeste afzonderlijke jaren uiteen en vallen alleen in het slechtste jaar samen. Tussen eind april en eind oktober bedroeg 2008 het rendement van de zomerhelft -29.81%, de sterkste daling in de reeks. De daaropvolgende winter kwam uit op -10.03%. Een belegger die in april verkocht, vermeed een forse daling, maar stapte vervolgens opnieuw in voor het laatste deel van de neerwaartse beweging. De kalender en de schade liepen slechts gedurende de helft van de periode gelijk.
Is de zomerkloof sinds 2015 verdwenen?
Gemiddelden zijn waar het gezegde werkelijk op berust, en de gekozen periode bepaalt waarop die gemiddelden zijn gebaseerd. Door de reeks bij 2015 te splitsen, ontstaan twee helften van vergelijkbare lengte die op dezelfde manier zijn berekend.
De exacte SQL achter elk getal
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 eraOver alle 21 seizoenen kwam het gemiddelde van mei tot en met oktober uit op 3.88% en dat van november tot en met april op 6.06%. Dat is een spread van 2.18 procentpunt. Die spread vormt de volledige onderbouwing van de regel. Kijk naar de zomerkolom: 16 van die zomers eindigde hoger dan zij begon. Wie gemiddeld uit de markt bleef, liep dus eerder een stijging mis dan een verlies.
De twee helften lopen uiteen. In de eerste periode bedroeg de spread 4.84 punten en in de latere periode -0.24. Populaire versies van het verhaal noemen wel een kloof, maar niet de jaren waarop die betrekking heeft. Juist die jaren zijn de kern van het argument. Elke seizoensstatistiek is een bewering over één historische periode. Die periode wordt gekozen door degene die de statistiek herhaalt.
Is er echt sprake van een augustus- en septembereffect?
Zes maanden vormen een grof meetinstrument. Door de kalender in maanden op te delen, kunt u nagaan of de zomerperiode over de hele linie zwak is of dat één maand het volledige resultaat bepaalt.
De exacte SQL achter elk getal
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))De zwakte zit in september. Deze maand kwam gemiddeld uit op -0.75% en eindigde in 12 van 21 jaar hoger, met een mediaan van 0.38%. Augustus kwam gemiddeld uit op 0.28%. Juli, midden in de periode waarin een verkoper niet belegt, kwam gemiddeld uit op 2.63%. Oktober, de laatste maand voordat de regel opnieuw aankopen doet, kwam gemiddeld uit op 0.97%.
Het effect in deze periode is beperkt: één zwakke fase aan het einde van de zomer, terwijl de omliggende maanden veel op de rest van de kalender lijken. Wie eind april uitstapt om september te vermijden, mist ook mei, juni, juli en augustus.
Wat de omschakeling werkelijk kost
De seizoenskloof is een bruto getal. Een strategie moet bestand zijn tegen haar eigen frictiekosten.
De exacte SQL achter elk getal
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 yearEen dollar die vanaf eind april 2005 in elk seizoen belegd bleef, groeide tot $6.21 aan het einde van april 2026. Diezelfde dollar die alleen van november tot en met april in de markt zat en de rest van de tijd ongebruikt bleef, groeide tot $3.14. Beide lijnen tonen uitsluitend koersrendementen, zonder aftrekposten. Dat geeft de omschakelstrategie een te gunstig beeld. Dit laat de grafiek buiten beschouwing.
- Twee transacties per jaar, in elk van de 21 seizoenen. Bij de meeste brokers is de transactiekosten doorgaans nul. De bid-ask spread die u bij iedere round trip betaalt, is dat niet.
- Belasting. Op een belastbare rekening realiseert de verkoop in april de winst die sinds november is opgebouwd. Een aanhoudperiode van november tot en met april is per definitie korter dan een jaar. Voor een Amerikaanse belastingplichtige valt de winst daardoor onder de short-term tarieven.
- Onbelegd cash. De winterstrategie kent het geld dat buiten de markt staat een rendement van nul toe. In werkelijkheid zou u dit geld aanhouden in een instrument dat rendement oplevert. Waar u onbelegd cash kunt parkeren behandelt de instrumenten die beleggers daarvoor gebruiken.
- Dividenden, waarvan het volgende paneel het effect berekent.
De exacte SQL achter elk getal
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 yearDe ex-dividenddata van SPY vallen in maart, juni, september en december. Twee van de vier vallen dus binnen de zes maanden waarin een belegger niet belegd is. In 2025 bedroegen de uitkeringen $3.592 per aandeel voor ex-dividenddata van mei tot en met oktober, tegenover $3.689 in de andere zes maanden. De twee kolommen volgen elkaar over de hele grafiek. Wie de helft van het kalenderjaar niet belegd is, loopt ieder jaar ongeveer de helft van de inkomsten van het fonds mis, boven op de koersontwikkeling in die maanden. De ex-dividenddatum bepaalt wie de uitkering ontvangt.
Er is nog een kostenpost zonder afzonderlijke regel in de berekening. Indexrendementen komen vaak geconcentreerd tot stand. Het missen van de beste beursdagen laat zien wat een handvol ontbrekende handelsdagen doet met een langetermijnsaldo. Zes maanden per jaar niet belegd zijn betekent dat u veel handelsdagen mist. Dezelfde berekening ligt ten grondslag aan dollar-cost averaging als discipline die tijd in de markt centraal stelt in plaats van het timen van de markt.
Waarom een bekende kalenderregel argwaan verdient
Twaalf maanden bieden 4.095 niet-lege mogelijkheden om een subset te selecteren waarin u belegd bent. Als u die mogelijkheden tegen één koershistorie afzet, zal er altijd wel iets opvallends uitkomen. Dat is een eigenschap van de zoekprocedure.
Sell in May heeft één eerlijk voordeel ten opzichte van een regel die vorige week uit de data is afgeleid: de regel was al bekend voordat deze steekproef begon. De jaren op deze pagina vormen daardoor een out-of-sample-test en geen gefit resultaat. De test laat een bescheiden verschil zien, dat geconcentreerd is in één maand. Dat verschil hoort bij een switching rule die over dezelfde periode achterblijft bij kopen en aanhouden. Lees meer over look-ahead bias bespreekt de manieren waarop een backtest ongemerkt vooraf het antwoord leert. Kalenderregels zijn daarvan het schoolvoorbeeld: de maanden worden geselecteerd nadat de rendementen bekend zijn.
FAQ
Werkt sell in May and go away nog steeds?
Op basis van SPY-koersen van april 2005 tot en met april 2026 kwam het gemiddelde voor november tot en met april uit op 6.06%, tegenover 3.88% voor mei tot en met oktober. Het seizoensverschil blijft dus in de volledige steekproef zichtbaar. De zomerhelft liet nog steeds gemiddeld een stijging zien: 16 van de 21 zomerperiodes eindigde hoger dan zij begon.
In welke maanden is de markt daadwerkelijk zwak?
In deze periode concentreerde de zwakte zich in september. Die maand kwam gemiddeld uit op -0.75% en eindigde in 12 van de 21 jaren hoger. Juli, een andere maand waarin de strategie niet belegd is, kwam over dezelfde periode gemiddeld uit op 2.63%.
Levert verkopen in mei meer op dan kopen en aanhouden?
Niet in deze steekproef. Een dollar die sinds eind april onafgebroken was belegd, groeide tot $6.21 in april 2026. Bij de winterstrategie, waarbij alleen in de wintermaanden wordt belegd, groeide die dollar tot $3.14. Deze vergelijking houdt geen rekening met transactiekosten, belasting of dividenden. De doorlopende belegging bedroeg bij aanvang 2005.
Wat gebeurt er met dividenden als u in mei verkoopt?
De ex-dividenddata van een fonds worden in de zomer niet opgeschort. Twee van de vier kwartaaldata van SPY vallen in de periode van mei tot en met oktober. Een belegger die op een ex-dividenddatum niet in het fonds belegd is, ontvangt die uitkering niet.
Is een seizoenspatroon hetzelfde als een voorspelling?
Nee. Een historisch gemiddelde over 21 seizoenen beschrijft wat er in een bepaalde periode is gebeurd. Individuele jaren wijken sterk van dat gemiddelde af, zoals de eerste grafiek laat zien. Ook de gekozen periode is een keuze.
Elk paneel hier is een opgeslagen query met de bijbehorende SQL. Wijzig de ticker, pas de periode aan en controleer op de Strasmore-terminal of het seizoensverschil standhoudt.