The idea (Sven's): sell an iron condor; when one side runs into loss, the OTHER side must be strongly in profit โ so you "shift" (re-center) the whole condor onto the new spot, lock in the net, and collect fresh premium. Repeat up to a few times. Hypothesis: this is easier on LONGER tenors (month/quarter) with slightly WIDER OTM strikes โ more room and more time to manage. We tested exactly that.
Setup: sell IC (call-spread +OTM% / put-spread โOTM%, wing = max(3%, OTM/2)); re-center when |spot/centerโ1| โฅ OTM (spot reaches the short-strike region), same expiry, max 2 shifts (N2) vs static (N0). Tenors 30/60/90d, OTM 5/8/12%, M2 model 2024-26, per-trade % of notional (weekly entries).
| tenor | OTM | N0 /trade | N0 worst | N2 /trade | N2 worst | avg shifts | N2 by-year |
|---|---|---|---|---|---|---|---|
| Monat (30d) | 5% | -0.033 | -2.69 | -0.369 | -4.00 | 1.9 | -25/-5/-10 |
| Monat (30d) | 8% | -0.022 | -3.09 | -0.199 | -6.86 | 1.6 | -17/+7/-12 |
| Monat (30d) | 12% | +0.186 | -5.70 | -0.108 | -7.92 | 0.9 | -22/+14/-4 |
| 2-Monat (60d) | 5% | +0.046 | -2.35 | -0.257 | -2.66 | 2.0 | -9/-14/-6 |
| 2-Monat (60d) | 8% | +0.059 | -2.55 | -0.172 | -5.17 | 1.9 | -15/-4/-0 |
| 2-Monat (60d) | 12% | -0.190 | -4.92 | -0.210 | -9.66 | 1.5 | -43/+21/-1 |
| Quartal (90d) | 5% | -0.215 | -2.13 | -0.187 | -2.80 | 2.0 | +1/-20/-1 |
| Quartal (90d) | 8% | -0.299 | -2.34 | -0.303 | -3.99 | 2.0 | +1/-32/-3 |
| Quartal (90d) | 12% | -0.371 | -4.17 | +0.047 | -8.87 | 1.7 | -23/+31/-3 |
Green N2 cell = shifting beat static; red = shifting hurt. Mostly red. The one "green" BTC cell (90d/12%) is +0.05/trade with a 2024/25/26 swing of โ23/+31/โ3 โ pure noise, not a signal.
| tenor | OTM | N0 /trade | N0 worst | N2 /trade | N2 worst | avg shifts | N2 by-year |
|---|---|---|---|---|---|---|---|
| Monat (30d) | 5% | +0.018 | -2.12 | -0.305 | -2.85 | 2.0 | -4/-26/-3 |
| Monat (30d) | 8% | -0.141 | -3.63 | -0.872 | -7.76 | 1.9 | -34/-50/-13 |
| Monat (30d) | 12% | -0.514 | -4.70 | -0.623 | -8.59 | 1.6 | -20/-40/-9 |
| 2-Monat (60d) | 5% | -0.255 | -1.53 | -0.216 | -2.14 | 2.0 | -8/-14/-2 |
| 2-Monat (60d) | 8% | -0.542 | -3.54 | -0.871 | -5.45 | 2.0 | -35/-50/-12 |
| 2-Monat (60d) | 12% | -1.002 | -3.74 | -0.810 | -5.79 | 1.9 | -23/-70/+4 |
| Quartal (90d) | 5% | -0.201 | -1.29 | -0.256 | -2.19 | 2.0 | -1/-25/-2 |
| Quartal (90d) | 8% | -0.466 | -3.09 | -0.586 | -5.21 | 2.0 | -18/-43/-4 |
| Quartal (90d) | 12% | -1.098 | -3.17 | -0.709 | -4.43 | 2.0 | +6/-95/+10 |
ETH long-tenor IC selling is broadly negative (โ0.5 to โ1.1/trade at 60โ90d) โ and shifting makes it worse and roughly doubles the worst week.
1. No premium to harvest at long tenor. The variance risk premium is concentrated in short-dated realized variance (Dew-Becker et al., JFE 2017: seller-Sharpe ~+1.3 short-dated, ~0 beyond 3 months). Selling 60โ90d crypto vol means selling something you are barely paid for โ so even the static IC bleeds. 2. Shifting realizes losses in trends. The intuition "one side's loss = the other side's gain" is true bar-to-bar, but when you re-center you BUY BACK the breached (losing) side and re-sell at the new level โ if the move continues (a trend, common over 1โ3 months) you keep locking in losses and re-selling into it. Two shifts already fatten the worst week 1.5โ2ร. 3. Threshold fragility. The weekly 28d/5% cell that looked good (+0.21/trade) used a fixed 4% trigger; with the structure-scaled 5% trigger the same family is negative โ a sign flip on a tiny parameter change is the signature of an overfit, not a real effect.
| entry | shifts | PnL | path (event @ spot) |
|---|---|---|---|
| 2024-01-05 | 2 | -4.68% | open@43,918 โ shif@49,939 โ shif@56,392 โ expi@66,220 |
| 2024-02-16 | 2 | +2.29% | open@51,855 โ shif@58,262 โ shif@65,328 โ expi@66,303 |
| 2024-03-29 | 2 | +2.06% | open@69,974 โ shif@61,291 โ shif@68,716 โ expi@60,879 |
| 2024-05-10 | 2 | +2.01% | open@63,050 โ shif@71,482 โ shif@62,877 โ expi@57,234 |
| 2024-06-21 | 2 | +1.85% | open@63,638 โ shif@55,750 โ shif@62,487 โ expi@61,949 |
| 2024-08-02 | 2 | -0.17% | open@64,594 โ shif@56,158 โ shif@63,006 โ expi@72,288 |
| 2024-09-13 | 2 | -4.29% | open@57,963 โ shif@65,238 โ shif@73,195 โ expi@100,989 |
| 2024-10-25 | 2 | -3.75% | open@67,670 โ shif@75,830 โ shif@85,908 โ expi@102,212 |
Each "shift@" is a forced re-center: the IC is closed at its current (often loss) value and re-opened around the new spot. You can see the shifts cluster in the trending windows โ exactly where they hurt.
Source: run_sprint_shift_long.py (+ run_sprint_shift_ic.py), SPRINT_LOG.md.