Strategies
Stock-Connect Reopening Flow Rebound, Hong Kong Large-Cap Basket (HKEQ daily bars — buy the 10 highest-southbound-ownership H-shares on the last HK session while mainland Stock Connect is SUSPENDED for a Chinese public holiday, hold through the reopening of southbound flow, exit on the 3rd session after Connect resumes; mainland-session heartbeat read from a CNEQ bar stream, 2 parameters)
Outcome: Abandoned
StockConnectClosureFlowReboundHkeq
Outcome Summary
Hypothesis
No measurable edge (35 independent events, t = 0.90), three unwaivable hard validity failures, per-trade edge below the HKEQ floor once the uncharged statutory cost is netted, and no tunable path — the single mechanism parameter is a cliff and Connect suspensions are ~7/year by regulation, so no reframe adds independent observations. Not revise_hypothesis: the binding constraint is the mainland holiday calendar's event-count ceiling, which any HK-basket reframe inherits.
Implementation
Verification Results
Fall back to the latest HK session at-or-before the window end when no bar prints on the final closed weekday — still ex-ante, recovers ~6 events.
Entry fires only on the last mainland-closed WEEKDAY, not on the last HK SESSION inside the window. Replay shows 6 windows with 1-3 HK sessions inside the suspension are skipped because that final closed weekday is itself an HK holiday (2018-04-30..05-01, 2018-12-31..2019-01-01, 2019-10-01..07, 2022-04-04..05, 2025-05-01..05) — ~15% of tradeable events dropped, including a Golden Week. Conservative (no look-ahead), but it thins an already small sample.
Count closure-free weekdays since the most recent window end via bisect on the bar's own date, so the signal is a pure function of the timestamp.
`_resume_age` is uptime-anchored (seeded at resume_cap=60 in __init__) rather than derived from the bar's date. Backtest-safe, but a paper/live restart mid-hold yields signal -70 on the first bar and flattens the whole basket instead of holding to session 3; replay parity is impossible.
Note a minimum viable capital (~1M HKD) or round each leg down to its board lot.
HK equities trade in board lots (0700=100 sh ≈ HKD 60k/lot, 0939/1398=1000, 0386/0857=2000) but sizing is in single shares and the venue models no lot size. A 9% slot of the 100k HKD starting balance is below one board lot for most legs — the fills aren't executable at that capital.
Two things the analyst must weigh at backtest review. (1) COSTS ARE NOT CHARGED: HKEQ instruments are NautilusTrader `Equity` objects and `BacktestRunner._apply_fees` returns Equity unchanged (src/backtesting/runner.py:2178-2183), so the 0.1100%/side statutory cost declared for HKEQ in venue_configs.py is NEVER applied — the sandbox reports total_commission 0.0. The sandbox's avg_trade_return_pct 0.482% is therefore GROSS of ~0.22% round-trip stamp duty + levies and of the 8bp round-trip half-spread (impact_folded=false); true net per-trade is roughly 0.18%, only just above the 0.15% HKEQ floor, and ROUND_TRIP_COST_PCT['HKEQ']=0.10 understates the venue ~3x. (2) EFFECTIVE SAMPLE IS 35, NOT 350: I replayed the closure table against the real 0700.HKEQ series — exactly 35 entry events fire over 2018-01..2026-09; the 10 legs of each event are one correlated observation, so the holdout will hold ~7 events. Expect wide CIs and heavy deflation; raising min_closure_weekdays to its bound (4) cuts events to ~15.
Backtest Review
- Sharpe
- 0.25
- Total return
- 12.61%
- Max drawdown
- 9.28%
- Trades
- 350
- Win rate
- 58.6%
- Profit factor
- 1.28
Mechanism implemented faithfully and verified in the trade records: all 350 legs LONG, each event entering at the close of the last closed mainland weekday (e.g. 2018-02-21, final LNY closure weekday) and exiting on the 3rd HK session after Connect resumes (2018-02-26). Direction, timing and sizing all match the hypothesis; closure table is point-in-time, no lookahead.
Genuinely novel data estate (first HKEQ experiment in the corpus); not a member of any dead family.
Gross result is clean and not a leverage/compounding artifact: PF 1.28, win rate 0.586, DD 9.3%, avg_position_pct 9.1% (true equal-weight 10-leg basket).
Costs are structurally uncharged and the gap exceeds the edge: `_apply_fees` returns NautilusTrader `Equity` objects unchanged, so HKEQ's 0.11%/side never applies (total_commission 0.0, commission 0.0 on all 350 trades). Real HK round trip ≈0.22% statutory + ~0.08% spread ≈0.30%; net per-trade ≈0.19%, below the 0.30% HKEQ floor. ROUND_TRIP_COST_PCT['HKEQ']=0.10 understates the venue ~3x so the code floor is blind here.
Net economics round to zero: $12,608 gross − $2,986 unfolded impact (19.15% of gross) − ~$7,000 statutory ≈ $2,600 over 8.7 years ≈ 0.3%/yr vs the 1.46% gross CAGR.
No tuning path: gross_exposure only levers a sub-cost edge on a 1x CASH venue; hold_sessions_after_resume adds no per-trade margin; min_closure_weekdays at its bound (4) cuts 35 events to ~15.
Supporting: 35 independent events (not 350), sharpe_ci [-0.50, 1.03] straddles zero, PSR 0.536, Sortino 0.040, Calmar 0.157, DD duration 742 days, 5 of 9 years positive.
Analysis
Mechanism implemented faithfully and point-in-time clean: all 350 legs LONG, entries on the last mainland-closed weekday of each suspension, exits on the 3rd HK session after flow resumes.
Holdout technically positive (Sharpe 0.075, 70 trades) and consistent with WF-OOS (z = -0.50) — the failure is not holdout degradation.
Sensitivity flat in every structural parameter; drawdown small (2.7% optimized) and inside the pre-registered 15%; 4 of 6 pre-registered criteria met.
Genuinely novel estate (first HKEQ event-calendar run) — informative negative result.
Three unwaivable HARD failures: overfit (IS 0.910 -> OOS 0.493), OOS 0.493 < 0.5, PBO 0.656 > 0.5.
350 trades are really 35 events × 10 correlated legs. Per-event mean +0.41%, sd 2.67%, t = 0.90 — indistinguishable from zero; matches DSR 0.0157, sharpe_ci_low -0.48, failed programme FDR.
VERIFIED cost gap: every trade record shows commission 0.0 and total_commission 0.0 despite venue_configs.py setting HKEQ maker/taker = 0.0011 — _apply_fees() returns early for all NT Equity instruments. Netting the ~0.22% round trip (~$2,080 of $3,664 PnL at $2,702 avg notional) plus unfolded impact takes per-trade return 0.490% -> ~0.19%, below the 0.30% HKEQ floor.
Only mechanism lever is a cliff: hold_sessions_after_resume 2 -> 0.092, 3 -> 0.470, 4 -> 0.137; all other parameters inert.
OOS carried by one window (1.895 / 0.066 / -0.480); CAGR 1.46%, Calmar 0.174, 5 of 9 years positive, 742-day drawdown duration.
Benjamini-Hochberg at q=0.10 over 285 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.
Outcome Summary
Calendar-event strategies are capped by the event count itself — 35 holiday windows across 8.7 years with 10 correlated legs cannot produce a statistically distinguishable edge, and gross per-trade returns must be checked against real venue costs when the engine charges none.
The analyst returned abandon at ANALYZING after an earlier 'optimize' verdict at backtest review: three unwaivable hard validity failures (overfit, OOS Sharpe 0.493 below the 0.5 floor, PBO 0.656 above 0.5) plus the finding that the 350 legs are really 35 correlated events with per-event mean +0.41% and t = 0.90. Commissions were verified as never charged (total_commission 0.0 despite HKEQ maker/taker 0.11%), and netting the ~0.22% statutory round trip plus unfolded impact takes per-trade return from 0.490% to ~0.19%, below the 0.30% HKEQ floor.
Buy an equal-weighted basket of 10 high-southbound-ownership Hong Kong large caps (HKEQ daily bars) on the last HK session while mainland Stock Connect is suspended for a Chinese public holiday, holding through the reopening and exiting on the 3rd session after southbound flow resumes.
Over 2018-01 to 2026-09 the initial backtest produced 12.61% total return (CAGR 1.46%), Sharpe 0.245 (CI -0.50 to 1.03), 350 trade legs from 35 closure events, 58.6% win rate, profit factor 1.28 and 9.3% max drawdown, with gross avg trade return 0.490% of notional. After optimization: CAGR 0.469%, Sharpe 0.269, max drawdown 2.69%, walk-forward OOS Sharpe 0.493 vs IS 0.910, PBO 0.656, deflated Sharpe 0.0157, and a holdout that passed with Sharpe 0.075 on 70 trades.
Backtest and paper results are hypothetical. Trading involves risk of loss.