Skip to content

View translation

BtcDeribitWeekendOtmStrangleCalendarThetaHarvest1H

Hypotheses

Weekend Calendar-Time Theta Harvest on Deribit BTC Weekly Options — Short ~3%-OTM Strangle Opened Friday 09:00 UTC, Closed Monday 08:00 UTC (crypto weekend realized vol runs below calendar-priced implied; cross-venue BTCUSDT.BINANCE 1H reference/stop leg, no IV gate, 3-parameter)

Hypotheses

A MARKET-NEUTRAL, CROSS-VENUE, CALENDAR-GATED short-volatility strategy on DERIBIT BTC weekly options, using BTCUSDT.BINANCE 1-HOUR perp bars only as the reference/stop leg. The mechanism is NOT a VRP/IV-rank harvest (that family is already in flight on ETH/BTC Deribit and is explicitly avoided): it is a CALENDAR-TIME vs CLOCK-TIME mismatch. Listed option time value decays on calendar days, but crypto realized volatility is measurably lower on Saturday/Sunday (institutional desks, CME, TradFi hedging flow and most spot volume are absent). A position that is SHORT premium only across the Fri->Mon window collects two calendar days of theta against a weekend whose realized variance is structurally below the pro-rata implied variance, then stands flat all week. NO IV filter, NO trend filter, NO regime gate — the entry is a pure calendar rule, which is what makes it hard to overfit. FEE ARITHMETIC: 7-day BTC option at ~45% IV → 7-day sigma 6.2% of spot; a ~3%-OTM strangle costs ~1.4% of spot per leg (~2.8% the pair); holding 3 of 7 calendar days consumes ~25-28% of value = GROSS theta ~0.70-0.78% of underlying notional; if weekend realized vol runs ~0.8x priced, the gamma bill eats ~60-65%, leaving EXPECTED NET ~0.25-0.35% per cycle vs ~0.12% Deribit round trip (2 legs open+close) = 2.1-2.9x costs. Near-the-money strikes are deliberate: Deribit charges on UNDERLYING notional, so far-OTM strangles are structurally fee-dead. ~52 cycles/yr, 694 BTC expiries in catalog back to 2018. DEVELOPER NOTE: build the expiry→strike table ONCE in __init__ and use bisect — a prior BTC Deribit options hypothesis died at Layer-3 sandbox timeout from per-bar chain rescans.

Hypotheses

Iteration 3 starts from the iteration-2 code and makes two targeted changes; everything that passed Layers 1-3 (imports, class structure, the continuous band signal, the O(1) period windowing that avoids the known Deribit wall-clock timeout, the calendar-anchored Friday 09:00 -> Monday 08:00 schedule, the no-smoke-path rule) is byte-preserved. (1) THE RESIDUAL LOOK-AHEAD IS REMOVED AT THE SOURCE. QA's iteration-1 critical was a look-ahead entry FILTER; iteration 2 deleted the filter but left the contamination that produced it. src/data/option_chain.discover_deribit_chain picks each leg's strike from _price_at(entry_stamp) over Deribit DAILY candles, and Deribit's TradingView chart ticks are OPEN-stamped - so with dte_target=7 the entry stamp (previous Friday 08:00 UTC) resolved to the candle stamped Friday 00:00, whose CLOSE is Friday 23:59. Every strike in the sample was therefore centred on a price unknown until ~15h after the Friday 09:00 entry, quietly re-centring the strangle around Friday's end-of-day print and reducing the chance of being run over by Friday afternoon's move. No in-strategy gate can launder that. Setting rolling_options.dte_target=8 moves the schedule stamp back one day to Thursday 08:00 UTC, so the grid is rounded off Thursday's daily close - public from Friday 00:00, strictly before entry. The TRADE is unchanged in every pre-registered respect: still a ~3%-OTM BTC weekly strangle, still opened Friday 09:00 UTC with ~7 DTE (6.96d), still covered Monday 08:00 UTC; the entry instant is pinned by the bar's own UTC weekday/hour guard, not by the schedule stamp, and the delay from that stamp is simply 25h instead of 1h (the entry window is now measured from the entry instant rather than from the stamp, so the two constants no longer interact). (2) BOTH-LEGS-OR-NEITHER IS NOW ENFORCED AFTER THE FILL, not only before it. The base template can silently drop an entry (dropped_no_market / dropped_entry_inflight), which would leave exactly the naked short option the code's own invariant forbids; on the bar after entry the strategy now counts open leg positions and, if some but not all legs are live, closes the remainder and abandons the cycle (counted as naked_leg_aborts in the on_stop summary). Parameter surface is unchanged at two tunables and _param_bounds declares exactly the two clamps the code applies. Note for the record: QA's earlier edge_concerns about the engine charging Deribit's 0.03% on premium rather than underlying notional, and avg_trade_return_pct being measured on premium notional, are options-infrastructure measurement issues that cannot be fixed inside a strategy - the analyst should restate per-cycle return on underlying notional.

Hypotheses

artifact: total_commission = $0.0004 (commission_pct_of_gross = 0.0) on $4,943,734 of underlying notional traded - the engine charges Deribit's 0.03% against PREMIUM instead of UNDERLYING (cap not binding), understating the true bill by ~70x, and that understatement is the whole margin. Recomputed on the realized trade tape: venue-true commission $2,966 against gross PnL $4,355 leaves $1,389 net = +0.69% over 732 days on a $200,000 book (~0.35%/yr), and the unmodeled options bid/ask (202 legs x 2 crossings on $61,452 of entry premium, ~$2.5k at 2%/crossing) turns that negative. On the fee-comparable basis the per-leg edge is 0.0839% of underlying against a 0.06%/leg round trip and the 0.10% DERIBIT floor - a 1.4x cost ratio, not the pre-registered 2.1-2.9x. Optimization cannot close this: notional_pct scales PnL and commission identically so the ratio is size-invariant, and breach_band_pct only trims tails. QA's edge concern is confirmed and quantified rather than refuted. Note for the Research Lead: the weekend calendar-decay effect itself IS real on this sample (mean +0.084%/leg, PF 1.28, 67% win rate, positive in 2024, 2025 and 2026) - it is simply ~1.4x a round trip that is paid four times per cycle. Any revisit needs a structure that pays Deribit's underlying-notional commission far fewer times per unit of harvested theta (e.g. one weekly entry/exit rather than four option crossings), not a re-tune of this one. Also worth fixing in the engine independently: Deribit commission should be charged on underlying notional with the 12.5%-of-premium cap, otherwise every short-premium options hypothesis will keep reading as profitable.

Implementation

Calendar-time theta harvest on Deribit BTC weekly options. Every Friday at 09:00 UTC (one hour after the weekly settlement, so the new front week is listed and quoting) the strategy SELLS a ~3%-OTM strangle on the weekly expiring the FOLLOWING Friday 08:00 UTC - short one call ~3% above spot and one put ~3% below spot, ~6.96 days to run - and buys both legs back at 08:00 UTC on Monday, standing flat for the rest of the week. No IV filter, no IV-rank gate, no trend/regime filter and no strike-moneyness filter: the entry is a pure calendar rule read off the bar's own UTC weekday/hour, and every week whose schedule delivers a structurally valid strangle is traded. BTCUSDT.BINANCE 1-HOUR perp bars are the cross-venue reference clock and stop leg and are NEVER traded; the only instruments traded are the two Deribit option legs resolved by the rolling-options chain expander. Iteration 3 sets rolling_options.dte_target to 8 so the expander picks each week's strike grid from a DAILY candle whose close is public BEFORE the Friday 09:00 entry (the trade time itself is unchanged, pinned by the bar's UTC stamp) - the last residual look-ahead is removed at the source. Risk control: each leg is sized to notional_pct of equity in underlying-equivalent terms; both legs are entered or neither, and the invariant is re-checked AFTER the fill so a silently dropped order can never leave a naked short option; if the Binance hourly close moves more than breach_band_pct from the observed ENTRY spot while the structure is live, both legs are closed immediately; and the roll buffer closes anything still open 72h before settlement. Two tunables (notional_pct, breach_band_pct), both clamps declared in _param_bounds.

Verification Results

lookback_days=730 caps the resolved chain to the last 2 years regardless of backtest window (~104 cycles, one regime); WF windows and holdout all sit inside that slice.

Verification Results

Post-fill both-legs-or-neither check is consumed on the first bar after entry (rec['checked']=True unconditionally); if neither fill has landed yet (n_open==0) it never re-runs, so a late single fill could be carried naked.

Verification Results

Naked short strangle's only tail control is an hourly-close band stop measured on a different venue's perp; per-cycle worst case is not bounded by breach_band_pct.

Verification Results

_leg_size rounds to 2dp (e.g. 0.25 BTC) but Deribit BTC options trade in 0.1-contract increments — backtest/live size mismatch.

Verification Results

Economics must be restated on UNDERLYING notional. The engine models Deribit options as a linear-USD CurrencyPair on USD-premium bars and charges 0.03% of qty x PREMIUM, whereas Deribit charges 0.03% of UNDERLYING notional (capped at 12.5% of premium) — for a ~3%-OTM weekly (premium ~1.4% of spot) the backtest charges roughly 1/70th of the venue-true commission (commission_pct_of_gross = 0.0, total_commission = 0.0004 confirm it). avg_trade_return_pct 7.58% is % of PREMIUM notional; converted, ~0.11% of underlying per leg, ~0.21% per 2-leg cycle GROSS against a venue-true ~0.12% round trip = ~0.09%/cycle net, i.e. 2.5-3x thinner than the pre-registered 0.25-0.35%, and before any options bid/ask (not modeled). Payoff shape is the expected short-vol one (avg_loss 236 > avg_win 147, max_drawdown 0.73) and the 730-day chain lookback contains no 2020/2021-class weekend shock, so the left tail is likely under-sampled.

Backtest Review

The code implements the pre-registered mechanism exactly: 101 weekend cycles / 202 short legs (101 calls + 101 puts), entries Friday 09:00 UTC, 162 of 202 legs exited at the Monday 08:00 UTC calendar stamp, the rest on the spot band stop. No mechanism mismatch.

Backtest Review

The weekend calendar-decay effect is measurably present but small: mean +0.0839% per leg on UNDERLYING notional, profit factor 1.28, 67.3% win rate, positive in all three calendar years.

Backtest Review

Sample is adequate and reliable (202 legs, 732 days), and per-bar cost is fine (208s run, no timeout).

Backtest Review

Commission accounting is broken for this structure and it is load-bearing: total_commission = $0.0004 and commission_pct_of_gross = 0.0 against $4,943,734 of underlying notional traded. The engine models Deribit options as a linear-USD pair and charges 0.03% of PREMIUM; Deribit charges 0.03% of UNDERLYING per side (the 12.5%-of-premium cap does not bind: $1,483/side actual vs a $7,681/side cap). Venue-true commission = $2,966.

Backtest Review

Against gross PnL of $4,355, those true fees take 68% of the edge, leaving $1,389 = +0.69% over two years (~0.35%/yr) on the $200,000 book. Options bid/ask is not modeled at all; at a conservative 2% of premium per crossing over 202 legs x 2 crossings on $61,452 of entry premium that is ~$2.5k, i.e. more than the entire remaining net. Venue-true expectancy is zero to negative.

Backtest Review

The fee-comparable per-trade figure is 0.0839% of underlying vs the DERIBIT floor of 0.10% and a 0.06%/leg round-trip cost - a 1.4x gross-to-cost ratio, versus the 2.1-2.9x the hypothesis pre-registered. Realized net per cycle is ~0.048% against the promised 0.25-0.35%.

Backtest Review

The headline report units mislead: total_return 2.1775 is +2.18% (equity 200,000 -> 204,355), max_drawdown 0.7338 is 0.73%, and avg_trade_return_pct 7.58% is % of PREMIUM notional, ~90x the fee-comparable number. The strategy is economically immaterial even before the fee correction.

Backtest Review

Neither tunable can fix this. notional_pct scales PnL and commission identically (both are linear in underlying notional), so the gross-to-cost ratio is invariant to size; breach_band_pct only trims tails. There is no parameter region where optimization lifts 0.0839%/leg above cost.

Outcome Summary

BtcDeribitWeekendOtmStrangleCalendar-adedc950e1

Outcome Summary

Iteration 3 of this strategy finally cleared the look-ahead problems in strike selection (moving dte_target to 8 so strikes were rounded off a Thursday close known before the Friday 09:00 entry) and produced a clean backtest: 202 short legs across 101 weekend cycles, 67.3% win rate, profit factor 1.279, Sharpe 1.585 and +2.18% over 732 days, positive in all three calendar years. The backtest-review analyst then found that the headline profitability rested on a commission artifact — the engine billed Deribit's 0.03% against premium rather than underlying, reporting $0.0004 of commission on $4.94M of underlying notional and understating the true bill by roughly 70x. Recomputed on the realized trade tape, venue-true fees of $2,966 against $4,355 gross PnL left ~0.35%/yr before any bid/ask, and the per-leg edge of 0.0839% of underlying sat below the 0.10% DERIBIT floor at only 1.4x round-trip cost. The run was abandoned at BACKTEST_REVIEW, so optimization, analyst review and risk review were never reached; the analyst flagged both the fee-model bug and the fact that the weekend decay effect itself is genuine but too small for a four-crossing structure.

Outcome Summary

The weekend calendar-decay effect is real on this sample, but any revisit must use a structure that pays Deribit's underlying-notional commission far fewer times per unit of harvested theta — four option crossings per cycle consume an edge of this size regardless of parameters.

Outcome Summary

The backtest-review analyst returned `abandon` before optimization, finding the reported commission was an artifact — total_commission of $0.0004 on $4,943,734 of underlying notional, because the engine charges Deribit's 0.03% against premium instead of underlying. Recomputed venue-true fees of $2,966 against $4,355 gross PnL leave $1,389 (~0.35%/yr), which unmodeled options bid/ask (~$2.5k) turns negative, and neither tunable can fix it since notional_pct scales PnL and commission identically.

Outcome Summary

Harvest the calendar-time vs clock-time mismatch by selling a ~3%-OTM Deribit BTC weekly strangle every Friday 09:00 UTC and covering Monday 08:00 UTC, collecting two calendar days of theta across a weekend whose realized volatility is structurally lower, with BTCUSDT.BINANCE 1H bars as the reference/stop leg.

Outcome Summary

The backtest ran 202 short option legs (101 calls + 101 puts, 101 weekend cycles) over 732 days with a 67.3% win rate, profit factor 1.279, Sharpe 1.585 and a reported total return of 2.1775 (+2.18% on the $200,000 book). On the fee-comparable basis the per-leg edge was only 0.0839% of underlying notional, below the 0.10% DERIBIT floor and just 1.4x the 0.06%/leg round trip, versus the 2.1-2.9x pre-registered.

Iteration History

Verification failed (Layer 4 — QA review) [class=code_defect]:
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.