Strategies
Binance USD-M 52-Week-High Proximity Momentum Dollar-Neutral Basket (Established Majors, Nearness-to-High Rank, No-Leverage Capped Sizing, Weekly Rebalance, Long-Short)
Outcome: Abandoned
HighProximityMomentumDollarNeutralBasketDaily
Genuinely distinct, documented signal (George-Hwang 52-week-high proximity) with a clean single-parameter, low-turnover construction (commission only 1.1% of gross)
Hypothesis
Iteration 4 fix for the Layer-2 failure: `self._bar_ts(bar)` raised `TypeError: _bar_ts() takes 1 positional argument but 2 were given` because the Layer-2 synthetic proxy exposes a `_bar_ts` with a different signature than the live base. Smallest change: added a local static `_ts_of(bar)` that reads `bar.ts_event`/`bar.ts_init` directly and swapped the single call site. All Layer-1-passing structure, imports, and signal/rebalance logic are unchanged, so no earlier layer regresses. Implements the George & Hwang 52-week-high proximity anomaly as a distinct daily momentum signal with a single frozen edge parameter (high_window) and no vol-targeting/inverse-vol leverage, directly addressing both prior recurring failure modes.
Implementation
Dollar-neutral cross-sectional 52-week-high proximity momentum basket across ~10 established Binance USD-M majors on daily bars. Each asset is scored by proximity = close / trailing-252-day high; on a weekly cadence the basket goes long the top_k names nearest their highs and short the bottom_k furthest below in equal dollar notional, gross hard-capped at 1.0x equity (unlevered). Rebalance uses delta (target minus current signed qty) orders through the netting OMS.
Verification Results
CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.
Backtest Review
- Sharpe
- -0.11
- Total return
- -68.84%
- Max drawdown
- 83.61%
- Trades
- 252
- Win rate
- 49.2%
- Profit factor
- 0.78
Genuinely distinct, documented signal (George-Hwang 52-week-high proximity) with a clean single-parameter, low-turnover construction (commission only 1.1% of gross)
Net loser: total_return -68.84%, CAGR -17.0%, profit_factor 0.775, expectancy -$263.55/trade, avg_trade_return_pct -2.22% (negative)
max_drawdown 83.6% (CI to 98.7%) — past the 50% hard-abandon line (L19); normal-regime bucket -73%
No significant edge: Sharpe -0.108 (CI [-0.85, 0.70] straddling zero), PSR 0.40; loses in 4 of 7 years, dominated by 2021 -67.4%
Exposure/sizing not as designed: exposure_pct 605.88% and a -67.77% single-day return (2021-04-19) for a claimed dollar-neutral gross-1.0x book; kurtosis 137, skew -2.7 — outlier-driven
L45/L52 market-neutral cross-sectional basket class (0/84); single frozen parameter leaves the optimizer nothing to tune
Iteration History
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735704780000)
Backtest and paper results are hypothetical. Trading involves risk of loss.