Strategies
SOL Spot Vol-Scaled Step-Ladder Trend Exposure: Add One 25% Equity Slice per +1-Sigma Move from the Last Rebalance Price, Remove One Slice per -1-Sigma Move, Flat at Zero Slices, Long-Only, No Leverage (SOLUSDT.BINANCE_SPOT 4H, pure OHLCV)
Outcome: Abandoned
SolSpotVolScaledStepLadder
Outcome Summary
SolSpotVolScaledStepLadder restated an FMZ price-step ladder as a vol-scaled, 25%-slice, long-only SOL spot trend follower on 4H bars. Its base backtest over about 5.7 years showed a large +2581% return, but with Sharpe 0.33, a 78.7% max drawdown, beta 0.63 and an information ratio of -0.54, meaning it underperformed simply holding SOL. After 2 iterations the analyst abandoned it at backtest review as beta without a trend edge, so optimization, analysis and risk review were never reached. The analyst also flagged a -7.43% avg_trade_return_pct that disagrees in sign with the positive PF and USD PnL, and asked for a harness check.
Hypothesis
Iteration 2 fixes only the critical sizing defect QA found. On the CASH account, get_account_equity() returns the USDT balance, which already excludes the SOL held. The old _slice_qty subtracted held*price from that balance a second time, which capped exposure near 56%. Now mtm = usdt + held*close and each slice is min(0.25*mtm, usdt*0.99). A guard requires held_value + notional <= mtm, so the CASH account is never over-asked. Four slices now reach about 100% of equity, as the hypothesis specifies. Signal, ladder and anchor logic are unchanged. On QA's ledger warning: adds and trims net into one position, so avg_trade_return_pct measures a whole multi-slice episode, not one slice. Judge the result on the equity curve and on fills-level fees instead. QA's edge concern still stands: a ladder has zero expectancy on a random walk. Any result depends on SOL trends persisting and may come mostly from the 2021 and 2023-24 bull runs.
Implementation
Long-only SOL spot 4H step ladder. It keeps an anchor price. Each +1 volatility step above the anchor adds a slice worth 25% of mark-to-market equity, up to 4 slices. The step is 1x the 30-day stdev of daily returns, clamped to 3-12%. Each -1 step below the anchor removes one slice, and zero slices means flat. The anchor resets to the close after every step.
Verification Results
Either return a small min_bars_required (e.g. 2) and gate trading on len(self._closes) == maxlen inside calculate_signal (return 0.0 until full), or compute the daily returns from the base template's self._bars buffer, which is already filled during warmup.
The vol buffer warms up twice. min_bars_required() returns 182, and the base template does NOT call calculate_signal() while len(self._bars) < min_bars (_maybe_process_primary returns early). So self._closes only starts filling on bar 183. For the next ~2 days, _daily_stdev() returns 0 and the step is clamped to step_min=3%. For about 30 more days after that, the step comes from fewer than 30 daily returns, not the 30-day window the hypothesis states. Ladder decisions in that stretch use a noisy or floored step. This happens once per backtest, and again after every paper-node restart, because the deque is not persisted.
Derive the slice count from the filled position (e.g. round(held*price / slice notional at add time)), or increment _slices in on_order_filled instead of at submit time.
Slice bookkeeping is optimistic in live trading. In should_exit the add path runs self._slices += 1 right after _submit_entry_instrument(), but that helper can silently drop the order (in-flight guard, market not ready, warmup). should_enter likewise sets _slices=1 and moves the anchor before the base template checks size and min notional. In the backtest, market orders fill in-event, so this does not change these results. Live, a dropped add leaves _slices ahead of what is actually held, and later trims then sell held/_slices, which is too small.
Analyst: judge on the equity curve and fills-level costs, not avg_trade_return_pct. Do not compare that field to the fee floor for this design.
The ledger shows a sign disagreement: avg_trade_return_pct is -7.43% while total_return is +2581% and PF is 1.36 (L116). I checked the dollar ledger and it reconciles exactly: 15 wins x $645.6k = $9.68M, 94 losses x $75.6k = $7.10M, net = $2.58M = 2581% of $100k, and PF 9.68/7.10 = 1.36. So this is not an accounting defect in the strategy. The negative pct mean comes from compounding (winners occur at much larger equity) and from multi-slice netting: one ledger 'trade' is a whole add/trim episode, with trades_count 938 fills vs 109 positions. avg_holding_bars=0.0 against a 15.8-day holding period is a harness metric artifact.
None required beyond the warm-up fix.
Static analysis flags min_bars_required as shadowing the base method. The override is deliberate and allowed by the base contract ('Override as needed'), but see the warm-up interaction above.
The sandbox numbers look more like leveraged-down SOL beta than a trend edge. Beta is 0.63 with correlation 0.85 to buy-and-hold, and the information ratio is -0.54, so the strategy underperforms simply holding SOL. Max drawdown is 78.7% (CI 72-99.8%), far above any spot drawdown floor, and it lasted 773 days. Every crisis stress window is negative: china_ban -48%, rate_shock -55%, FTX -44%. The results rest on 15 winning episodes out of 109, with up to 25 losses in a row, and a single winner of +$2.43M. Per-trade dollar PnL depends on compounding: the winners came when equity was large. For the analyst: (1) compare against a 95%-exposure buy-and-hold on the same span; (2) check per-year concentration in 2021 and 2023-24; (3) the drawdown floor is the likely binding gate, not fees. The steps are 3-12% against a ~0.2% spot round trip, so fee viability is not the issue.
Backtest Review
- Sharpe
- 0.33
- Total return
- 2581.22%
- Max drawdown
- 78.68%
- Trades
- 109
- Win rate
- 13.8%
- Profit factor
- 1.36
The mechanism is implemented as the hypothesis describes: long-only, a 25% slice ladder, vol-scaled steps, and a true flat state. entry_diag shows 109 entries, none dropped.
Fees are not the issue. Commission is 5.2% of gross and impact 12.1%, and 3-12% steps sit well above the ~0.2% spot round trip.
The trade sample is adequate: 109 episodes (938 fills) over 2,069 days.
The return looks like leveraged-down SOL beta, not a trend edge. Beta is 0.63, correlation to buy-and-hold 0.85, exposure 85%, average position 95% of equity, and the information ratio is -0.54, so it underperforms simply holding SOL. QA's concern is borne out.
Max drawdown is 78.7% (CI 72-99.8%) and lasted 773 days. Against SOL buy-and-hold's ~-95% 2021-22 drawdown that is about 0.8x, which triggers the beta screen (lesson 170). It is also far above the 15% spot default.
The Sharpe is not significant: 0.33, 95% CI -0.40 to 1.11, PSR 0.77. That is far below the base bar for optimizing (Sharpe >= 1.0 and PF >= 1.5; PF here is 1.36).
Profit is concentrated in a few years: +1834% in 2021 and +940% in 2023. 2020, 2022, 2025 and 2026 are all negative. Every crisis stress window is negative except the 2025 tariff window.
The payoff depends on rare wins: 13.8% win rate, up to 25 losses in a row, and 15 winning episodes carry the book, with the largest win alone at $2.43M.
The ledger does not agree with itself: avg_trade_return_pct is -7.43% while PF is 1.36 and avg_trade_pnl_usd is +$23.7k. This is probably a per-position denominator problem when slices are scaled in; the mechanism is not verified. Either way, the pct number fails the viability floor.
Iteration History
Outcome Summary
A long-only spot trend ladder that sits about 85% invested mostly carries the underlying's beta and drawdown, so check the information ratio against buy-and-hold before trusting headline returns. The avg_trade_return_pct sign mismatch on scaled-in positions should also go to a harness check.
At backtest review the analyst chose to abandon before optimization (premise_falsified / no_edge): the returns looked like scaled-down SOL beta rather than a trend edge, and the strategy missed every optimize-bar criterion (Sharpe, PF, Sharpe CI, drawdown vs the 15% spot default, information ratio, avg trade return). Profit came mostly from the 2021 and 2023 bull runs, and every crisis stress window except April 2025 lost money.
A long-only, unleveraged SOL spot 4H step ladder adapted from an FMZ chase-up/kill-down strategy: add one 25%-of-equity slice (max 4) for each +1-sigma move from the last rebalance price and remove one for each -1-sigma move, with the step set to the trailing 30-day daily-return stdev clamped to 3-12%, betting on multi-day SOL trend persistence.
Over 2,069 days (Aug 2020-Apr 2026) the base backtest ran 109 ladder episodes (938 fills) for a +2581% total return, but Sharpe was only 0.33 (95% CI -0.40 to 1.11), PF was 1.36, the win rate was 13.8% and max drawdown was 78.7% over 773 days. Beta was 0.63, correlation to buy-and-hold was 0.85, the information ratio was -0.54, and the reported avg_trade_return_pct was -7.43%.
Backtest and paper results are hypothetical. Trading involves risk of loss.