Strategies
Cross-Sectional SMART-MONEY POSITIONING Rotation, Long-Only (BINANCE USD-M, 8 Majors, WEEKLY Hold Top-3 by TOP-TRADER Long/Short Account-Ratio Conviction — the Deployed Momentum-Rotation STRUCTURE but Ranked by a NON-PRICE Positioning Key, with an Absolute Cash Gate; 2-Parameter)
Outcome: Abandoned
SmartMoneyGatedFundingRotationLong
Cross-Sectional SMART-MONEY POSITIONING Rotation, Long-Only (BINANCE USD-M, 8 Majors, WEEKLY Hold Top-3 by TOP-TRADER Long/Short Account-Ratio Conviction — the Deployed Momentum-Rotation STRUCTURE but Ranked by a…
Hypothesis
verification_loop: sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Implementation
Long-only weekly cross-sectional rotation over 8 Binance USD-M majors (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP) ranked by a NON-PRICE key: each name's own top-trader (smart-money) long/short ratio, converted to its own trailing percentile so the names are comparable. Every 7 calendar days the book holds the top-3 names by that conviction percentile; an absolute cash gate requires a name's percentile to clear entry_level to be held at all, so when the informed cohort is de-risked across the universe nothing qualifies and the book sits in cash. Equal 30% notional per name (0.9x gross, no leverage).
Verification Results
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Iteration History
Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL, Bars processed: 363 Diagnostics: should_enter() returned a side 0 times over 324 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.
Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Sandbox is non-informative: metrics_reliable=false, total_trades=1, PF 0.0, one position held 2135 days with end_unrealized 118%. The +140% return is single-name buy-and-hold beta (benchmark_correlation 0.77), not a rotation edge — no performance read is possible. - Core edge absent and contradicted: the hypothesis ranks by each name's OWN top-trader long/short account ratio and explicitly excludes funding-carry, but the code substitutes per-name FUNDING as the ranking key (infeasible per-name metrics → no metrics_by_instrument). It implements exactly the carry signal the hypothesis says it is NOT, overlapping a deployed basket. - The weekly 8-major top-3 rotation degenerated to single-name buy-and-hold (1 trade, 2135-day hold, ~30% single leg). Likely cause: funding_rates_by_instrument key mismatch for the 7 extra legs leaves only the BTC fallback wired → ranked has one entry → k=min(3,1)=1 → buys BTC once, never rotates.
Backtest and paper results are hypothetical. Trading involves risk of loss.