Skip to content
All strategies

Strategies

Developed-Market Turn-of-the-Month Flow Window, Disjoint-Universe Replication: long an equal-weight EWG/EWJ/EWU/EFA basket from the open of the month's last NYSE session to the open of the 4th session of the new month, vol-targeted, flat otherwise (USEQ 1-DAY, long-only calendar event, frozen rule)

Outcome: Abandoned

DevelopedEtfTurnOfMonthBasket

Outcome Summary

DevelopedEtfTurnOfMonthBasket tested the promoted turn-of-the-month flow window on a separate universe: four developed-market country and region ETFs, traded long-only on USEQ daily bars with next-open fills. The pre-study expected +0.215% gross per window. In the backtest the 1996-2020 development period gave only +0.043% per window, an average trade of 0.041%, Sharpe 0.05 and a 35.5% drawdown, with negative windows after 2010. The analyst abandoned it at backtest review after one iteration, before optimization, because the window added no return over simply holding the basket on random days and its expectancy was below the USEQ cost floor.

Hypothesis

Original Research Lead hypothesis. It is a frozen-rule, disjoint-universe replication (lesson L228: a transfer is a fresh test) of the turn-of-the-month (TOM) flow window. That window has been promoted twice on USEQ: the SPY TOM rule (paper, 401 trades, average trade 0.25%) and the emerging-market country-ETF TOM basket EWZ/EWY/EWT/FXI/INDA (paper, 1,379 trades, average trade 0.44%, Sharpe 0.61). Mechanism (Lakonishok-Smidt 1988; McConnell-Xu 2008, who found the effect in 30 of 35 countries): month-end pension,……Show moreShow less

Original Research Lead hypothesis. It is a frozen-rule, disjoint-universe replication (lesson L228: a transfer is a fresh test) of the turn-of-the-month (TOM) flow window. That window has been promoted twice on USEQ: the SPY TOM rule (paper, 401 trades, average trade 0.25%) and the emerging-market country-ETF TOM basket EWZ/EWY/EWT/FXI/INDA (paper, 1,379 trades, average trade 0.44%, Sharpe 0.61). Mechanism (Lakonishok-Smidt 1988; McConnell-Xu 2008, who found the effect in 30 of 35 countries): month-end pension, payroll and 401k contributions, plus index and mandate rebalancing, land in the last session of the month and the first 3 sessions of the next. The new universe is the four DEVELOPED-market country/region ETFs in the platform universe, selected by a rule: every non-US developed-market country or region ETF in config/us_equities_universe.txt. That gives EWG (Germany), EWJ (Japan), EWU (UK) and EFA (EAFE). EWG/EWJ/EWU have daily bars from 1996-03 and EFA from 2001-08. None of them overlaps the SPY or EM runs. These are fixed listed ETFs that all still trade, so there is no point-in-time membership issue. A leg joins the basket from its first bar. Execution: USEQ is a session venue, so a decision made at session N's close fills at session N+1's OPEN (next_open_fill, supported). The rule is: at the close of the second-to-last NYSE session of the month, order the basket; it fills at the open of the month's LAST session. At the close of the 3rd session of the new month, order the exit; it fills at the open of the 4th session. That holds 4 sessions open-to-open. Trading days and month boundaries come from the platform session calendar (src.strategies.helpers.sessions), never hard-coded dates. PRE-REGISTERED PRE-STUDY (fixed rule, catalog open prices, NYSE calendar, 1996-03 to 2026-10). 367 distinct month windows (the independent unit, per L238; the per-name trade count of about 1,400 overstates the evidence). Equal-weight basket gross window return: mean +0.215%, hit rate 0.59, t = 1.72. Per-session drift is 0.054% inside the window vs 0.012% outside it. Sub-periods: 2010+ mean +0.076% over 201 months; 2018+ mean +0.227% over 105 months. The effect is real but weaker than on the EM basket. The non-TOM drift is positive, so a short arm outside the window would lose money (consistent with L230); the design stays long-or-cash. Incremental test (L217): the comparator is the same basket held only on random 4-session blocks, whose expected return is 4 x 0.012% = 0.05%. The window should add about +0.16% per month over that. COSTS: USEQ has zero commission; the spread plus impact is about 0.02-0.05% per round trip on these liquid ETFs. The 0.215% gross per window is about 4-5x that cost.

Quota position: USEQ is 9.7% of the corpus and long-only is over-represented. I tested and rejected several under-represented alternatives before choosing this one, each on its own data. HKEQ TOM on 2800.HK: +0.36% per window against a ~0.30% statutory round trip, under 2x the cost. A VIX-minus-realized VRP timer on SPY: no Sharpe gain over buy-and-hold (0.56 vs 0.57), and its short arm loses. The crypto funding-settlement, weekend, confluence, NR7, volume-share and gold-session families are already saturated in the corpus. This hypothesis earns its slot as a mechanism-level breadth test that lessons L227/L228 ask for: one rule, frozen from a promoted run, measured on a disjoint universe. Its success criteria are pre-registered from a fixed-rule pre-study, and the independent sample is stated as 367 distinct month windows (L238).

negative_expectancy: on 291 month windows (1996-2020 development period), the frozen turn-of-the-month rule on the developed-market ETF basket EWG/EWJ/EWU/EFA averages 0.041% per trade against the 0.05% USEQ floor. PF is 1.01, Sharpe 0.05, and total return +2.7% over 24 years. The basket window return is +0.043% (t 0.30), which does not beat the hypothesis's own random 4-session-block comparator (about +0.05%), and it is negative in 2010-2020 (-0.14% and -0.09% per window in the two sub-periods). Drawdown is 35.5% against the pre-registered 20%. QA's edge concern is borne out. Trade timing matches the rule exactly, so this is not a code defect, and optimization can only shift or scale the same window. Not the reason for this verdict: statistical significance, family history, drawdown on its own. This verdict covers this disjoint-universe replication on developed-market ETFs only. It is not a verdict on the promoted SPY or EM-basket turn-of-the-month runs, though it suggests the flow effect does not transfer to developed ex-US ETFs traded open-to-open from the US.

Implementation

Long-or-cash turn-of-the-month basket on the four developed-market country/region ETFs EWG/EWJ/EWU/EFA (USEQ daily). At the close of the session before the month's last NYSE session (entry_offset=0) it orders an equal-weight basket that fills at the open of the last session (next_open_fill); at the close of the 3rd session of the new month it orders the exit, which fills at the open of the 4th session (exit_session=4). Gross = min(gross_cap=1.0, target_vol_ann / annualised 20-session realised vol of the equal-weight basket), split equally across legs listed and printing at the decision session. Flat otherwise. Trading days and month boundaries come from src.strategies.helpers.sessions only.

Frozen-rule transfer of the promoted EM country-ETF TOM basket (same code path, renamed to the plan's parameter names: entry_offset, exit_session, target_vol_ann tunable; gross_cap=1.0, vol_lookback=20, min_history_bars=21 fixed) onto the disjoint developed-market universe chosen by rule. Execution uses the supported next_open_fill: decisions on session N's close fill at session N+1's open, giving the 4-session open-to-open hold. point_in_time_universe=True so the window starts at the 1996 history and EFA joins from its first bar (2001-08). Risk route (b): calendar time exit plus capped unlevered sizing (gross <= 1.0 equity, ~25% per leg), leverage 1.0; vol scaling is clamped by gross_cap. Signal is the continuous window clock for the next session (positive = sessions left inside the window, negative = sessions until it opens). Every leg is its own order/position, so the ledger books ~4 trades per month window (~1,400 over the history), but the independent sample is the ~367 month windows.

Verification Results

Optional: drop that leg's previous close (or skip its return) when its bar for the session is missing.

When a listed leg prints no bar at a decision session, its stored _leg_prev_close is kept. The next return for that leg then spans two sessions and is averaged into the basket series as one day, which slightly inflates the realised vol. The base point-in-time barrier makes this rare on these ETFs.

Skip _submit_exit_position when cache.orders_open(instrument_id=iid) already holds a closing order.

Extra-leg exits are re-submitted on every bar while signal <= 0 and a position is still open. In the backtest the next-open fill closes the position before the next decision bar, so this is harmless there. In paper, an exit still in flight could be duplicated, though reduce-only handling makes this at most a warning.

Pre-study evidence is thin: mean +0.215% per window at t=1.72 on 367 windows, and only +0.076% over 2010+ (201 months). The post-2010 figure is close to the random-block comparator (~0.05%) and only about 1.5-4x the 0.02-0.05% USEQ round-trip cost. Vol targeting at 10-20% annual on a basket with ~15-20% realised vol will often set gross below 1, which shrinks dollar PnL but leaves per-trade % unchanged. The analyst should measure the window's return over the random-4-session-block comparator (L217) on the full history and by sub-period, not the raw average trade.

Backtest Review

Sharpe
0.12
Total return
17.66%
Max drawdown
35.46%
Trades
1397
Win rate
54.6%
Profit factor
1.06

The code does what the hypothesis says. All 291 basket entries fill at the open of the month's last NYSE session (dates 26th-31st) and exit at the open of the 4th session of the new month (6-7 calendar days). The basket is long-only, equal-weight, about 0.33x per leg with three legs (EFA joins in 2001-08), and vol-targeted gross falls to about 0.22x per leg in high-vol periods.

The sample is large and reliable: 291 independent month windows and 1,101 leg trades over 1996-2020. Zero commissions. Input audit is clean.

Measured net expectancy is not positive after costs. Average trade is 0.041% of notional, below the USEQ floor of 0.05%. PF is 1.01, Sharpe 0.05, and total return +2.7% over 24 years (CAGR 0.11%).

Per-window equal-weight basket return over the development period is +0.043% (t 0.30, hit rate 0.54, n=291). By sub-period: 1996-2002 +0.06%; 2003-2009 +0.27% (t 1.0); 2010-2014 -0.14%; 2015-2020 -0.09%. Post-2010 it is negative.

QA's concern is borne out. The window's return (+0.043%) does not beat the hypothesis's own random 4-session-block comparator (about +0.05%), so the window adds no incremental return over simply being long.

Drawdown is 35.5% against the pre-registered 20% constraint, and the longest drawdown lasted 3,411 days. 13 of 25 calendar years were negative.

The backtest is well below the pre-study's +0.215% gross per window, even after allowing for the pre-study including later years. I have not checked the cause (for example, how the pre-study measured windows versus engine fills at catalog opens), so it is not asserted here.

Outcome Summary

A calendar-flow edge that works on SPY and emerging-market ETFs does not automatically carry over to developed ex-US ETFs traded open-to-open from the US, so a pre-study's gross estimate (+0.215% per window here) should be checked against engine fills and the incremental comparator before it is trusted.

The analyst abandoned it at backtest review for negative expectancy. The basket's window return of +0.043% (t 0.30) did not beat the hypothesis's own random 4-session comparator of about +0.05%, it was negative after 2010, and drawdown was 35.5% against the pre-registered 20% limit. Trade timing matched the rule, so it was not a code defect, and optimization was not run.

This was a frozen-rule test of whether the turn-of-the-month flow effect, already promoted on SPY and on an emerging-market ETF basket, also shows up in developed ex-US ETFs (EWG/EWJ/EWU/EFA). The rule held an equal-weight, vol-targeted long basket from the open of the month's last NYSE session to the open of the 4th session of the new month, and stayed in cash otherwise.

In the 1996-2020 development period the backtest review counted 291 month windows. The average trade was 0.041% of notional, below the 0.05% USEQ floor, with profit factor 1.01, Sharpe 0.05 and total return +2.7%. The full-history report shows 1,397 trades, an average trade of 0.087%, Sharpe 0.12, total return 17.7% and maximum drawdown 35.5%.

Backtest and paper results are hypothetical. Trading involves risk of loss.