Strategies
Turtle Soup Plus-One (Raschke/Connors, via FMZ 发明者量化-小小梦) on 10 Liquid US ETFs, Daily, Long-Short: Fade a Failed 20-Session Donchian Break When Price Re-Crosses the Old Extreme the Next Session. PRE-STUDY FAILED, low priority, submitted for falsification only
Outcome: Abandoned
TurtleSoupPlusOneEtfBasket
Outcome Summary
TurtleSoupPlusOneEtfBasket applied Raschke/Connors' Turtle Soup Plus-One fade of failed 20-session Donchian breaks to a 10-ETF daily long-short basket. The hypothesis arrived with a failed pre-study (an edge of about 0 that decayed after 2016) and was submitted only for falsification. After 3 iterations, the last of which only fixed config consistency for the leverage parameter, the code still went over the 300s Layer 3 sandbox limit on about 20,000 bars, so the run was abandoned in the verification loop. No backtest, optimization or analyst review ever ran.
Hypothesis
Turtle Soup restated from first principles on US ETFs, the asset class it was written for, with honest gap fills. The pre-study is in the file. On OKX crypto perps the setup scores at or below drift. On the ETFs, with a realistic fill, per-trade means are about 0 (t of 0.6 or less), and the edge decays to about 0 after 2016. The full spec is written to workspace/outbox/research_lead/hypothesis_0bc51c25a4.json.
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 SPY.USEQ-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
Turtle Soup Plus-One on 10 US ETFs (daily, long-short). When a session closes beyond a 20-session Donchian extreme that is at least 4 sessions old, a stop order rests at the old extreme for the next session to fade the failed break. Exits use an ATR trailing stop, anchored to the entry ATR, and a max-hold time stop. One re-entry is allowed per setup. Size is 1% risk per trade, capped at 20% of equity per leg and 1.0x gross for the basket.
Iteration 3 fixes only the Layer-1.5 failure. Every fixed key in the optimization plan, now including leverage=1.0 as a float, is declared in parameters with the plan's exact value and type. The tunable bounds match _param_bounds. The leverage parameter now feeds the basket gross cap. Signal, entry and exit logic are unchanged. The pre-study expects about zero edge, so this run is for falsification.
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 SPY.USEQ-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 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - optimization_plan fixes leverage at 1.0
Outcome Summary
Multi-leg basket strategies should keep per-bar cost O(1) or O(log n): precompute or incrementally update channel extremes, ATR and gross exposure instead of rebuilding lists and rescanning history on every bar.
The run was abandoned in a verification loop after 3 iterations. The Layer 3 sandbox smoke test went over its 300s wall-clock limit on a window of about 20,000 bars (2,400 days of SPY.USEQ daily bars), which points to per-bar work that grows with the length of the history.
Long-short Turtle Soup Plus-One on 10 liquid US ETFs using daily bars: fade a failed 20-session Donchian breakout when price crosses back over the old extreme the next session. The hypothesis was flagged as a failed pre-study and was submitted only to be falsified.
There are no backtest or optimization results, because the strategy never got past verification. The research pre-study had already found per-trade means of about 0 (t of 0.6 or less) with a realistic fill on the ETFs, with the edge decaying to about 0 after 2016. On OKX crypto perps the setup scored at or below drift.
Analysis
龟汤交易法则
Backtest and paper results are hypothetical. Trading involves risk of loss.