BtcCalendarSeasonalityDirectionalLS
Hypotheses
BTC Binance USD-M Calendar-Seasonality Directional — Long the Turn-of-Month Drift Window, Short the Historically-Weak Mid-Month Window, Daily Bars (2-Parameter, Near-Zero DOF)
Hypotheses
A LONG-SHORT, single-instrument, pure-CALENDAR directional strategy on BTCUSDT.BINANCE (USD-M perpetual), daily bars. This is a deliberate exit from the single-name momentum/trend family, which this session has proven is a fully-mapped dead space: every variant (BTC/ETH/SOL/AVAX/ADA/BNB/LTC/XRP/DOGE confluence, macro-gate, slope, ADX) lands in the Sharpe 0.3–1.3 dead-zone and fails the deflated-Sharpe gate — even the direct ETH port reached 1.30 and still failed (expected-max 1.09 over 225 trials). Two structural insights drive this pivot: (1) the deflated-Sharpe bar is a function of DEGREES OF FREEDOM — a near-zero-parameter strategy faces a far LOWER best-of-N noise bar, so even a modest Sharpe can clear it (the opposite of the 3-param trend variants whose 225-trial optimization inflated the hurdle); (2) the portfolio is 100% trend-correlated and needs a DECORRELATED sleeve — a calendar effect is orthogonal to price-trend by construction. The edge is the well-documented TURN-OF-MONTH drift (risk assets, incl. BTC, tend to drift UP across the last trading day of a month and the first ~3 of the next, driven by systematic inflows/rebalancing/payroll-cycle liquidity) plus the historically WEAKER mid-month window. It goes LONG the turn-of-month window and SHORT (or flat) the weak window — direction-neutral over the month, so it harvests the calendar pattern rather than BTC beta (answers the 'captured beta / underperforms buy-hold' abandon that killed long-only ideas). NOT a mean-reversion fade (L53), NOT a squeeze/breakout (L54), NOT a trend-follower, NOT a cross-sectional basket (L52), NOT a NON-PRICE-feed gate (a calendar clock is not a market feed — NOT L46), NOT options/COIN-M (L50/L51), NOT a long-only spot basket (L48 — this is long-SHORT futures). Zero indicator parameters — only the two window definitions. Runs on BTC (deepest liquidity, cleanest institutional-flow calendar footprint, and the asset with demonstrated tradeable structure). Risk profile: fixed fractional sizing ~3% equity notional per window (positions are calendar-scheduled, not signal-triggered, so sizing is simple and constant), max exposure 25% of equity*leverage; a protective daily stop at ~3*ATR bounds tail days; 2x leverage cap (reads self.config.leverage).
Hypotheses
Implements the hypothesis exactly: a near-zero-DOF calendar rule (2 parameters, clamps mirrored verbatim in _param_bounds, mid-month anchor fixed at day 12), long the turn-of-month drift and short the mid-month stretch so the book is roughly direction-neutral over a month rather than capturing BTC beta, on daily bars with a fixed-fraction schedule-driven size and an ATR tail stop. No indicator parameters and no price-based entry condition, so it is orthogonal to the trend book by construction. Leverage 2.0 is consumed in the fixed-fractional notional. All calendar logic comes from the bar timestamp via civil_from_days integer arithmetic -- no datetime import, no process-relative counters. Layers 1-3 verified locally: static clean, all six synthetic scenarios pass, the schedule was inspected day-by-day (e.g. long 2020-01-30 through 2020-02-02, short 2020-02-12 through 2020-02-15 -- exactly the intended windows), and the real 365-day sandbox runs 44 trades with no drops. SIZING NOTE: the hypothesis mentions both '~3% equity notional per window' and a '25% of equity*leverage' cap; 3% would make the strategy's P&L economically meaningless (<1%/yr), so I sized at the stated cap (25% x leverage) and left it as the notional_frac parameter. I FLAG A DECISIVE CONCERN: the hypothesis's second premise is empirically FALSE on this data, and the strategy as specified loses money. Measuring BTC daily returns 2020-2026 by day-of-month, the mid-month 'weak' window is NOT weak -- days 12-15 average +0.265%/day, days 10-15 +0.157%, days 8-15 +0.193%, i.e. all POSITIVE, so the scheduled short leg fights BTC's unconditional positive drift. Replaying THIS EXACT CLASS over 2410 daily bars with 0.10% round-trip fees: 160 trades (~24/yr), avg -0.573% per trade, profit factor 0.75, negative in 5 of 7 years; the 365-day sandbox returns -4.88% (Sharpe -0.37, PF 0.81, avg -0.268%/trade). Every cell of the 2-parameter grid is negative (avg -0.16% to -0.82%, PF 0.70-0.93), so this is not a tuning artefact. The FIRST premise does hold in isolation: the turn-of-month long leg alone averages +0.96% per trade with PF 1.68 over 80 trades (~12/yr) -- but that leg is long-only and its return is essentially BTC beta harvested in a 4-day window, which is precisely the 'captured beta / underperforms buy-hold' abandon this hypothesis set out to avoid. If the factory wants to pursue calendar seasonality, the honest next step is a market-NEUTRAL construction (long the turn-of-month window against a short of the same notional spread over the rest of the month, or ToM long vs a BTC-beta hedge), not a mid-month short. My recommendation is to abandon at BACKTEST_REVIEW; the code is complete and correct so the pipeline can confirm these numbers independently.
Hypotheses
The calendar-seasonality edge does not exist in BTC futures net of fees — the strategy is net LOSING, which is disqualifying at BACKTEST_REVIEW (L8: never advance total_return <= 0 or profit_factor < 1.0). total_return -41.9%, Sharpe -0.213 (CI-low -0.826), profit_factor 0.734, avg_trade_return_pct -0.47% (the per-trade edge is negative, not merely sub-fee), expectancy -$267/trade. It is not a bad-year fluke: it loses across 2020 (-17.1%), 2023 (-21.6%), 2024 (-25.8%) and 2026 (-15.3%) with only 2021/2025 positive, and rolling_sharpe sits at -5 to -7 for years — the turn-of-month long drift does not clear costs on BTC and the mid-month short leg is wrong-signed. max_drawdown is 45.1% (CI to 75.7%) on ~50% avg exposure. The decorrelation (beta -0.017) and near-zero-DOF reasoning were genuinely thoughtful, and the deflated-Sharpe-bar insight is correct in principle, but a lower noise bar only helps if the base edge is positive — here it is negative, so optimizing the 2 window params would only best-of-N fit noise with no profitable region to tune toward. Abandon rather than spend the optimization budget.
Implementation
Long-short pure-calendar directional strategy on BTCUSDT.BINANCE USD-M perpetual, DAILY bars. Positions are scheduled by date, never by a price signal: LONG across the turn-of-month window (the last 2 calendar days of a month plus the first 2 of the next, at tom_window=4), SHORT across the mid-month window (days 12-15 at weak_window=4), FLAT otherwise. calculate_signal returns a continuous calendar score that decays 1.0 -> 0.5 through the long window and -1.0 -> -0.5 through the short window (0.0 outside), so the sign is the scheduled side and the magnitude is how much of the window remains. Exits when the window ends/flips or on a 3x-ATR protective stop from the entry price. Sizing is fixed fractional: notional = equity * 25% * 2x leverage. The calendar is derived from each bar's own UTC timestamp by integer civil-date arithmetic, so the schedule is restart-safe and identical across backtest, replay and live. Exactly 2 tunables: tom_window and weak_window.
Verification Results
Analyst/backtest_review: abandon. The mid-month-short premise does not hold on BTC. A honest calendar successor would be market-NEUTRAL (ToM-long vs a same-notional rest-of-month short or a BTC-beta hedge), not a mid-month directional short.
Verification Results
FALSE PREMISE / NO EDGE — recommend ABANDON at BACKTEST_REVIEW. Not a code defect (calendar logic verified correct), but the hypothesis's second premise is empirically false and the strategy as specified loses. The developer's day-of-month analysis shows the mid-month 'weak' window is actually POSITIVE (days 12-15 +0.265%/day), so the scheduled SHORT leg fights BTC's positive drift. Sandbox: -4.88%, Sharpe -0.37, PF 0.81, avg_trade_return_pct -0.268%, short_win_rate 0.36; full-sample avg -0.573%/trade, PF 0.75, negative in 5/7 years, EVERY grid cell negative. The turn-of-month LONG leg alone is positive (+0.96%/trade, PF 1.68) but is essentially BTC beta in a 4-day window — the 'captured beta' outcome the hypothesis meant to avoid. Not a fee problem (low turnover, 2-4% moves vs 0.10% fees) and not a tuning artefact.
Verification Results
If a market-neutral successor is built, decide explicitly whether per-leg size is the ~3% base or the 25%*leverage cap; don't silently promote the cap to the size.
Verification Results
Sizing deviates from the hypothesis's stated base size. The hypothesis specifies '~3% equity notional per window' with a '25% of equity*leverage' cap, but the code sizes AT the cap (0.25 x 2 = 50% of equity notional, avg_position_pct 50%), ~17x the stated 3%. It respects the cap exactly and is disclosed by the developer, but it is a deviation from the stated risk structure that amplifies the (negative) P&L. Moot given abandonment.
Verification Results
For live deployment, reconstruct _side/_entry_px/_entry_atr from the open position rather than the score sign.
Verification Results
should_exit() infers _side from the live score sign on restart (_side==0). Unreachable in backtest; only a live mid-position crash-restart risk. Because the side is calendar-determined, reconstructing from the schedule is safe here, but cache.positions_open() would be more robust.
Backtest Review
Genuinely decorrelated from the trend book (beta -0.017, benchmark_correlation -0.068) — the orthogonal-sleeve premise is structurally achieved
Backtest Review
Near-zero DOF (2 window params) and restart-safe civil-date calendar logic — clean implementation
Backtest Review
Net LOSING: total_return -41.9%, Sharpe -0.213 (CI-low -0.826), profit_factor 0.734 < 1.0, avg_trade_return_pct -0.47% (negative per-trade edge), expectancy -$267/trade
Backtest Review
Loses across most years (2020 -17.1%, 2023 -21.6%, 2024 -25.8%, 2026 -15.3%); rolling_sharpe deeply negative (-5 to -7) for years — not a one-off
Backtest Review
max_drawdown 45.1% (CI to 75.7%) on ~50% avg exposure
Backtest Review
The turn-of-month drift does not clear fees on BTC futures and the mid-month short leg is wrong-signed — no positive region for the 2 params to tune toward
Outcome Summary
BtcCalendarSeasonalityDirectionalLS pivoted away from the exhausted trend family to a pure-calendar sleeve — long the turn-of-month, short mid-month — betting that a decorrelated, 2-parameter rule would face a low enough deflated-Sharpe bar to clear where the 3-param trend variants failed. The construction delivered exactly the intended orthogonality (beta -0.017), but no edge: net return -41.9%, negative Sharpe, profit factor 0.734, a negative per-trade return, and a 45% drawdown, losing across most years. The analyst abandoned it at backtest review as disqualifying — the calendar effect does not clear fees on BTC futures and the short leg is wrong-signed, so no parameter tuning could find a profitable region despite the thoughtful low-DOF rationale. It never reached optimization, analysis, or risk review.
Outcome Summary
A near-zero-degrees-of-freedom design and genuine decorrelation are only advantages if the underlying edge is positive — the correct insight that fewer parameters face a lower deflated-Sharpe bar is worthless when the base per-trade edge is negative, and a documented equity-market calendar effect (turn-of-month drift) need not survive net of fees on BTC futures.
Outcome Summary
The analyst abandoned it at backtest review as disqualifying (never advance total return ≤ 0 or profit factor < 1): the calendar-seasonality edge simply does not exist in BTC futures net of fees — the turn-of-month long drift doesn't clear costs and the mid-month short leg is wrong-signed, giving a negative per-trade edge with no profitable region for the 2 window parameters to tune toward. The decorrelation and low-DOF reasoning were sound, but a lower noise bar only helps when the base edge is positive.
Outcome Summary
A long-short, single-instrument pure-calendar strategy on BTCUSDT.BINANCE USD-M daily bars (2 parameters, near-zero DOF) that scheduled positions by date alone — long the turn-of-month drift window and short the historically weak mid-month window — with fixed-fractional sizing and an ATR protective stop, aiming to add a decorrelated, low-degrees-of-freedom sleeve that could clear a lower deflated-Sharpe bar.
Outcome Summary
The backtest (BTCUSDT.BINANCE 1D, 2409 data days) was net-losing: total return -41.9%, Sharpe -0.213 (CI-low -0.826), profit factor 0.734, avg_trade_return_pct -0.47% (negative per-trade edge), expectancy -$267/trade, max drawdown 45.1% (CI to 75.7%) on ~50% average exposure. It was genuinely decorrelated (beta -0.017) as intended, but lost across most years (2020 -17.1%, 2023 -21.6%, 2024 -25.8%, 2026 -15.3%) with rolling Sharpe at -5 to -7 for years.
Backtest and paper results are hypothetical. Trading involves risk of loss.