A yield vault with a small, disciplined directional bet.
Ninety percent of capital earns USDC lending yield on Kamino. The remaining ten percent runs a signal-driven BTC perp strategy derived from Deribit options positioning data. When trades profit, gains sweep back to lending; the bucket resets to 10% at each +20% realized gain. We don't predict price; we detect imbalance in options positioning and fade it.
- Backtest APY
- ~21%
- Stress APY
- ~12%
- Worst vault DD
- -0.25%
- Alpha vs BTC
- +40.8%
Backtest window Apr 2025 — Mar 2026 · 11 months · 20,000 Monte-Carlo paths. Strategy version v2 · April 2026.
Seven deterministic steps.
- 01Deribit BTC options data (hourly)
- 02Feature engineering (positioning metrics)
- 033 signal strategies (A / B / C)
- 04Regime filter — trade only when conditions are favorable
- 05Execute on BTC perp (1× leverage)
- 06Rebalance to 90/10 at +20% realized gain
- 07Trading bucket capped at 10% of NAV
Parameters
- Base asset
- USDC
- Lending
- 90% — overcollateralized lending on Solana
- Trading
- 10% — BTC perp via Jupiter Perps or Flash, 1× leverage
- Sweep
- Rebalance to 90/10 at +20% realized trading gain
- Cost
- ~7.5 bps per round-trip trade
Four positioning metrics, threshold-crossing rules.
When options traders hedge aggressively with puts, it signals fear; BTC historically bounces. When call speculation dominates, it signals greed; BTC pulls back. Four metrics engineered from hourly Deribit data capture this imbalance.
Signal metrics
| Metric | Formula | Captures |
|---|---|---|
tail_skew | Deep OTM put vol vs deep OTM call vol (smoothed) | Hedging demand |
iv_skew | IV of puts vs calls across strike surface (smoothed) | Fear premium |
skew_composite | −tail_skew + iv_skew | Unified skew — combines both |
net_dw | Delta-weighted net options flow (calls − puts) | Smart-money direction |
Strategy logic
ENTER LONG when tail_skew ≤ T1 AND iv_skew ≥ T2 EXIT when tail_skew ≥ T3 OR iv_skew ≤ T4
Both metrics confirm bullish positioning to enter. Either reverting triggers exit.
ENTER SHORT when tail_skew ≥ T5 EXIT when tail_skew ≤ T6
Single-metric rule, triggered when upside speculation is extreme.
ENTER LONG when net_dw ≤ T7 AND skew_composite ≥ T8 EXIT LONG when net_dw ≥ T9 OR skew_composite ≤ T10 ENTER SHORT when net_dw ≥ T11 AND skew_composite ≤ T12 EXIT SHORT when net_dw ≤ T13 OR skew_composite ≥ T14
FLAT → LONG → FLAT → SHORT. AND to enter, OR to exit.
Thresholds T1–T14 are determined by robust plateau grid search and frozen in production. Values withheld.
Winning more often, winning bigger.
- Portfolio trades
- 217
- Win rate
- 78%
- Avg W/L ratio
- 2.2×
- Cost / trade
- 7.5 bps
Average win is 2.2× the average loss. The edge isn't in winning occasionally — it's in winning 78% of the time AND winning bigger than we lose.
BTC buy & hold returned -21.4% in the same window; the vault returned +19.4%. That's +40.8% alpha over passive holding.
One per category — best after stress testing.
Long · dual confirmation
Enters long when two independent positioning metrics both confirm bullish imbalance. Fewer but higher-quality entries.
- Trades
- 94
- Win rate
- 79%
- Return
- +342%
- W/L
- 1.8×
- Avg hold
- 1.7d
- Per month
- 9
- Best trade
- +13.3%
- Worst trade
- -8.4%
- Strat max DD
- -15.9%
- Vault impact
- -0.25%
Short · contrarian
Enters short when positioning shows extreme upside speculation. Simplest rule, best win/loss ratio — fades the crowd.
- Trades
- 83
- Win rate
- 76%
- Return
- +320%
- W/L
- 2.8×
- Avg hold
- 1d
- Per month
- 8
- Best trade
- +11.5%
- Worst trade
- -7.3%
- Strat max DD
- -10.4%
- Vault impact
- -0.22%
Flip · state machine
Bidirectional FLAT → LONG → FLAT → SHORT. Both signals must agree to enter (AND); either can trigger exit (OR). Most selective, highest win rate.
- Trades
- 40
- Win rate
- 82%
- Return
- +81%
- W/L
- 2.5×
- Avg hold
- 0.8d
- Per month
- 4
- Best trade
- +4.0%
- Worst trade
- -1.2%
- Strat max DD
- -1.6%
- Vault impact
- -0.05%
No single strategy controls more than 4% of total vault NAV (10% trading bucket × 40% max sub-allocation).
Three rules + a regime filter.
Capped exposure
Only 10% of vault capital is ever at risk. A total wipeout of the trading bucket costs 10% of NAV — nothing more.
Profit locking
When the trading bucket realizes +20% gain, rebalance to 90/10. Realized profits move to lending, safe from future trades. Trading bucket resets.
Rebalance cap
Trading bucket cannot silently grow beyond 10% of NAV. Excess is swept to lending automatically.
Trend filter (moving average) + volatility filter (rolling realized vol) gate entries, blocking trades during extreme volatility or choppy markets. Tested across 5 gate combinations and 12 strategies to confirm the detection is stable, not fragile.
Baseline vs stress, and why 90/10.
Baseline vs stress · 11-mo vault
| Metric | Baseline | Stress (alpha halved + 5% lending) |
|---|---|---|
| Vault return | +19.4% | +9.6% |
| APY | ~21% | ~11% |
| Total trades | 217 | — |
| Portfolio win rate | 78% | — |
| Worst trade vault impact | -0.25% | — |
Per-strategy breakdown
| Strategy | Trades | Win rate | Return | Max DD | Vault impact |
|---|---|---|---|---|---|
| §A | 94 | 79% | +342% | -15.9% | -0.25% |
| §B | 83 | 76% | +320% | -10.4% | -0.22% |
| §C | 40 | 82% | +81% | -1.6% | -0.05% |
Why 90/10? — allocation sweep
We tested 70/30 through 95/5 on the same 3-strategy portfolio. 90/10 clears the 10% stress-APY floor while capping drawdown under −0.4%. Going wider doubles drawdown; going narrower kills stress yield.
- APY
- ~83%
- Stress APY
- ~25%
- Max DD (p5)
- -1.19%
- APY
- ~58%
- Stress APY
- ~18%
- Max DD (p5)
- -0.80%
- APY
- ~21%
- Stress APY
- ~11%
- Max DD (p5)
- -0.39%
- APY
- ~20%
- Stress APY
- ~8%
- Max DD (p5)
- -0.18%
Five scenarios, one projected-drawdown matrix.
Stress tests applied
| Stress test | What it simulates | Still profitable? |
|---|---|---|
| Higher costs (15 bps) | Slippage during volatile markets | Yes |
| Execution delay (1-bar) | Can't always execute instantly | Yes |
| Signal edge weakens 50% | Markets adapt over time | Yes (~11% APY) |
| Split-sample (half vs half) | Is the edge stable or a fluke? | Yes (nearly identical) |
| Combined (all above) | Everything degrades at once | Yes (~11% APY) |
Projected max drawdown · Monte Carlo · 20,000 paths
| Scenario | Median | p5 (worst 5%) | p1 (worst 1%) |
|---|---|---|---|
| Baseline (8% lending, full signal) | -0.17% | -0.31% | -0.41% |
| Stress (5% lending, signal halved) | -0.23% | -0.39% | -0.49% |
We tested each dimension until the vault broke.
Headroom per dimension
| Dimension | We test at | Breaks at | Headroom |
|---|---|---|---|
| Signal decay | 50% | Never (still +0.4% APY at 95%) | 45%+ |
| Trading cost | 15 bps | Never (still +15.8% APY at 50 bps) | 35+ bps |
| Lending APY | 5% | Never (still +28.2% APY at 2%) | 3%+ |
Combined stress — when it actually breaks
| Signal decay | Trading cost | Result |
|---|---|---|
| 50% | 50 bps (6.7×) | +15.8% — still fine |
| 70% | 30 bps (4×) | +9.0% — still fine |
| 75% | 50 bps (6.7×) | −1.3% — first break |
No single stress dimension breaks the vault. It only breaks when extreme scenarios combine simultaneously — at roughly 75% signal decay combined with 50 bps cost (6.7× baseline friction).