Strategies
Overnight-Return Daytime-Reversal Frequency, Dollar-Neutral Long-Short on 30 US Large Caps (USEQ 1-DAY, Akbas-Boehmer-Jiang-Koch tug-of-war)
Outcome: Abandoned
OvernightDaytimeTugOfWar
Outcome Summary
OvernightDaytimeTugOfWar attempted to capture an overnight-versus-daytime reversal-frequency edge through a dollar-neutral US equity basket. Sandbox results showed a 0.0258% average net trade return, near-zero Sharpe, and substantial modeled impact, which QA treated as advisory profitability concerns. After six iterations, the strategy was abandoned during verification because staged replacements introduced an unauthorized extra session of delay; full backtesting and optimization were not reached.
Hypothesis
Quota check: BINANCE is 62% (far above the 40% cap) and long-only is 83.5% (far above the 55% cap). This is a USEQ, long-short, dollar-neutral, multi-instrument proposal, so it moves both of the most over-limit dimensions in the right direction and adds no BTC or Binance exposure. It avoids the dead families in the lessons: no options (L102), no supplementary-gated perp (L111), no calendar-date trigger (L179; rebalancing is a bar-count cadence, and the signal is an observed return pattern), and no sub-fee fast mean reversion. Data was verified per leg (L186): all 30 USEQ 1-DAY dirs exist, with histories starting 1970-2012 and running through 2026-09-30/10-01. Leverage is deliberately left out of optimization_plan.fixed, because recent runs died at Layer 1.5 on 'optimization_plan fixes leverage'. Per-bar work must be O(1) with deques (two USEQ basket runs timed out). I first looked at OKX tokenized-stock perps against USEQ underlyings, but those have only about 7 months of history (from 2026-02/03), so I dropped that idea.
Implementation
Ranks 30 US large caps by trailing negative-overnight/positive-daytime minus positive-overnight/negative-daytime frequency. Targets equal-dollar long and short baskets with 50% gross equity per side, whole shares, daily-close catastrophe stops and confirmed-exit staged rotations.
Iteration 6 replaces duplicated XNYS holiday rules with cached closures from sessions.is_trading_day and platform session dates. The same fixed-1970-epoch session ordinal drives rotation and consecutive-session checks, preserving exceptional closures and historical rules without importing src.data. Passing rolling signals, ranking, reservations and execution are unchanged. QA timing warning remains an explicit research-specification deviation: exits decided at session N close fill at N+1 open; replacements decided after confirmed exits at N+1 close fill at N+2 open. The brief does not explicitly authorize this reduced-exposure session; research approval or a verified immediate-replacement execution path remains required. No claim of exact next-open basket replacement is made. The description specifies all 30 names although market_context.instruments lists only 20; the full prior universe is preserved.
Verification Results
Implement and verify coordinated rotation execution at N+1 open, preserving the intended equal-dollar baskets and capacity constraints, or obtain an explicitly revised hypothesis authorizing staged exits and replacements with the intervening reduced exposure.
Basket rotations introduce an unauthorized additional session before replacements. At session N close, changed holdings receive exit orders that fill at N+1 open. ENTRY_PENDING requires a subsequent synchronized close, so replacements are submitted at N+1 close and fill at N+2 open. Even initial deployment waits an additional session. This changes the scheduled strategy's exposure, can temporarily destroy dollar neutrality when only some holdings change, and does not implement replacement at the next open following the ranking decision. The strategy documentation and configuration acknowledge that research authorization is still missing; disclosure does not authorize the deviation.
Reconcile the research contract with the explicitly specified 30-name universe before further evaluation.
The hypothesis description explicitly specifies 30 names, which the configuration includes, but research_contract.instruments lists only 20. The submitted universe follows the description, while the frozen contract remains inconsistent.
Analysis
Iteration History
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['k_per_side', 'lookback_days', 'resize_drift_pct', '_optimization_plan', 'gross_per_side_pct', 'min_eligible_names', 'rebalance_sessions', 'catastrophe_stop_pct'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000) - steady_downtrend: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000) - flat_ranging: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000) - volatility_spike: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000) - zero_volume: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000) - price_gap: AttributeError: 'NoneType' object has no attribute 'client_order_id' (bar timestamp: 1739394000000)
Use src.strategies.helpers.sessions.is_trading_day to build and cache the timestamp-derived session ordinal from a fixed epoch. Use the same platform calendar for consecutive-session checks; do not import src.data directly.
The duplicated XNYS calendar does not match the platform calendar over the required full history. It omits closures including 1972-11-07, 1972-12-28, 1973-01-25 and 1977-07-14, and applies post-1970 Washington's Birthday and Memorial Day rules to 1970. These errors change the session ordinal used for rotation dates. They also make _update clear valid trailing samples after actual exchange closures, incorrectly treating them as missing sessions.
Clarify whether this staged rotation is authorized by the research specification. If immediate next-open basket replacement is required, implement it through a verified execution path that preserves capacity and confirmed position state.
Replacement entries require a subsequent complete session close after rotation exits. With next-open execution, exits decided at session N close fill at N+1 open, while replacement entries are decided at N+1 close and fill at N+2 open. This adds a session of reduced exposure to the stated rebalance procedure.
Outcome Summary
Verify that basket execution matches the authorized rebalance timing and that the research contract agrees with the configured universe.
After six iterations, Layer 4 QA rejected an unauthorized rotation delay: exits filled at N+1 open, while replacements waited until N+2 open, changing exposure and potentially disrupting dollar neutrality. QA also flagged an inconsistent universe: 30 names in the description and configuration versus 20 in the research contract.
Rank 30 US large-cap stocks by negative-overnight versus positive-overnight daytime-reversal frequency, buying the highest scores and shorting the lowest in equal-dollar, dollar-neutral baskets.
QA reported a sandbox average net trade return of 0.0258%, near-zero Sharpe, and substantial modeled impact. Full backtest and optimization stages were not reached.
Abandon Reason
Analysis
max_drawdown_pct
max_drawdown_pct constraint failed or lacks evidence
Backtest Review
- Sharpe
- 0.29
- Total return
- 22.73%
- Max drawdown
- 18.59%
- Trades
- 1557
- Win rate
- 49.8%
- Profit factor
- 1.08
Backtest and paper results are hypothetical. Trading involves risk of loss.