Skip to content

Turn-of-Month (H4)

A stretch candidate and a deliberate calibration probe: the turn-of-month effect is one of the best-documented equity-index seasonals, so running it through the loop tests whether the harness gives a known anomaly a fair hearing — and whether the effect actually survives, net of fees, out-of-sample on MES/MNQ. Code: turn_of_month.py.

Pre-registration. The calendar rule and pass bar were fixed before the run; there are no fitted parameters to pre-register (it is a pure calendar prior). Only Results were filled afterward.

Hypothesis and rule

Equity-index returns have historically clustered around the month boundary (month-end rebalancing, cash flows, window dressing). Being long across that window should capture the seasonal drift.

Rule. Long/flat, single entry per cycle: enter on the second-to-last session of the month; exit on the third session of the next month. No features, no gate, no fitted parameters — a pure fixed calendar prior. The entry/exit dates are a calendar fact (which session is the month's second-to- last is set by the exchange calendar), precomputed by turn_of_month_dates and passed as date sets.

Pass bar

The campaign bar: beat both buy-and-hold and the re-fit swing_breakout baseline on OOS Sharpe, on both MES and MNQ, bootstrap 90% CI excluding 0, drawdown no worse than buy-and-hold. With no fitted parameters the walk-forward grid is a single fixed configuration, so in-sample and out-of-sample differ only by the split boundaries.

Results

Real-data walk-forward, 2019-05-06 → 2026-07-12 (stitched OOS 2020-12 → 2026-03), US$100k, 1 contract.

MES OOSMNQ OOS
turn_of_month Sharpe−0.14 (CI [−0.72, 0.50], incl. 0)−0.25 (CI [−0.82, 0.35], incl. 0)
swing_breakout−0.07−0.01
buy_and_hold0.550.37
Total return−1.3%−4.4%
Max drawdown−4.4%−8.0%
Trades6363
Exposure14.9%14.9%
Fee drag0.17%0.17%

Reading

Turn-of-month fails the bar on both symbols — no tradable edge here. OOS Sharpe is negative on both MES (−0.14) and MNQ (−0.25), below the baseline and well below buy-and-hold, with CIs spanning 0. Full-period Sharpe is ≈ 0 (0.03 MES), so this is not a walk-forward artifact — the effect simply does not produce a positive net return over 2019–2026 daily bars.

The likely culprits: the strategy trades often (63 OOS entries at ~15% exposure) for a tiny per-trade edge, so the flat per-contract fee (its fee drag is the highest of any campaign candidate) eats what little seasonal drift remains — and the well-known anomaly may simply have decayed. As a calibration result this is the useful part: the harness gave a documented effect a fair, pre-registered test and correctly returned "no edge," rather than rubber- stamping a famous name. It is a fail in the ledger alongside the regime/positioning overlays.

Caveats

  • Live calendar: entry/exit dates are recovered from the realized bar index here; a live deployment would use the exchange's published holiday calendar (known ahead), which is equivalent barring unscheduled closures.
  • No fitted parameters means nothing to overfit, but also nothing to rescue the effect — the fixed-calendar rule is the whole hypothesis.
  • Margin headroom: 1 contract, ~2.8% (MES) / ~4.4% (MNQ) peak initial-margin utilization, same as the rest of the campaign.