Strategies
SOL Turn-of-the-Month Long on Daily Bars
Outcome: Abandoned
SolDailyTurnOfMonthLong
Outcome Summary
This strategy exploited the turn-of-the-month anomaly by simply buying SOL around month boundaries, a clean deterministic rule grounded in DCA/index-rebalance flow. It was implemented exactly as specified and showed a spectacular +653% headline — but that came almost entirely from 2021's SOL mania (with two +60% single days), after which it lost money in 2024, 2025, and 2026 as rolling Sharpe fell from +8 to -6, all atop a 74.9% drawdown and ~110% volatility. The analyst abandoned it at the backtest-review gate on its second iteration as a decayed seasonal indistinguishable from long-beta, with no optimizable surface and a holdout sure to land in the negative recent regime, so it never advanced to optimization or risk review.
Hypothesis
Iteration-2 minimal fix for the Layer-2 TypeError (_dt() takes 1 positional argument but 2 were given). Root cause is identical to the open-interest case: the datetime helper was a @staticmethod, but the Layer-2 _StrategyProxy rebinds class callables onto a stand-in instance, which discards the staticmethod descriptor and passes the proxy instance as an injected first positional argument, so the 1-param helper is called with 2 args and raises. The fix moves _dt out of the class to a module-level function (_tom_dt); module functions are never bound to an instance, so no self can be injected, and _is_tom now calls _tom_dt directly. Nothing else changed: imports stay clean (Layer 1 green), and the calendar/TOM-window/signal/entry/exit/sizing logic the harness exercised is byte-identical, so no earlier-layer regression. Venue and leverage (BINANCE USD-M futures, 1.0) are unchanged.
Implementation
Long-only turn-of-the-month calendar strategy on SOLUSDT.BINANCE USD-M futures, 1-DAY bars, OHLCV-only. Enters LONG during the turn-of-month window (last 4 calendar days of a month plus first 3 of the next) and exits when the bar leaves that window, with a max-holding safety net and a 12% stop floor. Pure deterministic calendar trigger driven by bar timestamps; the continuous signal is a price-ROC + in-window proxy for frozen-signal detection. leverage 1.0.
Verification Results
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['min_notional', 'position_pct', 'stop_loss_pct', 'exit_days_after', 'max_holding_days', 'entry_days_before'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - steady_downtrend: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - flat_ranging: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - volatility_spike: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - zero_volume: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000) - price_gap: TypeError: SolDailyTurnOfMonthLong._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
Backtest Review
- Sharpe
- 0.95
- Total return
- 653.79%
- Max drawdown
- 74.94%
- Trades
- 74
- Win rate
- 50.0%
- Profit factor
- 1.15
Implemented correctly and deterministically: 74 turn-of-month entries, 0 dropped, all long — trades exactly as the calendar hypothesis specifies (no code bug)
Edge is dead/reversed: annual returns +1055% (2021) and +141% (2023) front-load the entire +653%, then NEGATIVE three straight years — 2024 -46.5%, 2025 -34.1%, 2026 -19.7%; rolling Sharpe collapses from ~+8 to ~-6
Headline is a 2021 SOL-mania artifact, not a TOM edge: two +60% single days (Jan/Feb 2021), return_skew 4.47, kurtosis 35, profit_factor only 1.15 (thin), win_rate 0.50
Unacceptable risk: max_drawdown 74.9% (CI up to 88.8%), annualized_volatility 110%, downside_deviation 51%, avg_position_pct ~101% (full-equity), max_drawdown_duration 699 days
No optimization surface: a pure day-of-month calendar rule with only 2 tunable window params — the optimizer cannot manufacture an edge from a decayed seasonal effect and would refit to the 2021/2023 bulls
Holdout lands in the negative recent regime (2026 -19.7%), so post-optimization validation would fail with near-certainty; sample is also thin (74 trades / ~13/yr)
Outcome Summary
A deterministic calendar anomaly on a high-beta crypto major can masquerade as edge while really being long-beta exposure — a +653% headline concentrated in 2021 with a 75% drawdown and three straight negative recent years is a decayed/reversed seasonal, and a pure-calendar rule has no signal to optimize once the effect dies.
The backtest-review analyst issued an 'abandon' verdict: the strategy was implemented correctly, so this is a premise failure — the turn-of-month effect on a high-beta major is indistinguishable from long-SOL beta that captured the 2021 mania and has since decayed/reversed, the headline is a 2021 artifact carrying a 75% drawdown, and a pure 2-parameter calendar rule offers no optimizable signal (optimization would refit the windows to the 2021/2023 bulls and fail the negative recent holdout).
A long-only, deterministic turn-of-the-month calendar strategy on SOLUSDT daily Binance futures (1.0x leverage, 0.95 position) — buying SOL during the last 4 calendar days of each month plus the first 3 of the next, exiting when out of that window (with a 12% stop and 12-day safety cap) — to capture monthly DCA/index-rebalance bid pressure, with no indicators or filters.
Across 74 trades it posted a +653.8% headline with Sharpe 0.95, profit factor 1.15 and a 50% win rate, but the return was front-loaded into 2021 (+1055%) and 2023 (+141%) and then lost money three straight years (2024 -46.5%, 2025 -34.1%, 2026 -19.7%), with rolling Sharpe collapsing from ~+8 to ~-6; risk was extreme — 74.9% max drawdown (CI to 88.8%), ~110% annualized vol, full-equity sizing, skew 4.47, kurtosis 35.
Backtest and paper results are hypothetical. Trading involves risk of loss.