Can Second-Order Greeks Save Your Short Vol Strategy?
Part 64 — Volatility Series 5 of 7 — Combining VIX Term Structure with Vanna, Charm, Vomma, and Veta for Better Risk-Adjusted Returns
This is part 64 of my series — Building & Scaling Algorithmic Trading Strategies
In Part 62, I broke down the economics of VIX term structure arbitrage — the strategy that powered XIV’s 2,700% run before its spectacular 96% single-day collapse.
The conclusion was nuanced: yes, it works on average, but the negative skew means you’re picking up pennies in front of a steamroller. The edge is real but then the tail risk is also real.
But here’s what I’ve been wondering since writing that piece: can second-order Greeks help us see the steamroller coming?
Specifically, can Vanna, Charm, Vomma, and Veta — those exotic-sounding derivatives of derivatives — actually improve our Sharpe ratio, ROI, and tail risk management?
Let’s find out.
The Problem: Why Standard Risk Metrics Failed XIV
Trading naive short vol is like speedrunning Doom on Nightmare difficulty with just a pistol — you might clear a few rooms, but eventually you'll turn a corner and meet a Cyberdemon face-to-face.
So before diving into the Greek enhancements, let’s understand why traditional risk management didn’t save XIV holders.
On February 5, 2018, VIX didn’t just rise — it accelerated. The move wasn’t linear. It was convex. Each point higher in VIX caused progressively larger losses for short vol positions.
This is the signature of Vomma — vega’s sensitivity to volatility. As vol rises, your vega exposure increases, meaning each subsequent point of VIX hurts more than the last.
The losses cascaded through dealer hedging (the Vanna effect), creating a feedback loop:
1. VIX rises
2. Dealers are short gamma and vanna from selling puts
3. They must buy to hedge
4. Their buying pushes VIX higher
5. Go to step 2Standard metrics like VaR and even VIX level itself didn’t capture this convexity. The Greeks did — if you knew where to look (which is easy to say after the fact, but that’s why we do this).
The Four Greeks That Matter for VIX Trading
Let me introduce the supporting cast. If first-order Greeks (Delta, Vega, Theta, Gamma) are the main characters, these are the crucial supporting actors that determine whether the hero survives.
1. Vanna (∂Δ/∂σ or ∂Vega/∂S)
Vanna measures how delta changes when volatility changes — or equivalently, how vega changes when the underlying moves. It’s a cross-Greek that links the two most important sensitivities.
Why it matters for VIX trading:
When you’re short volatility, you typically have negative Vanna exposure
As VIX rises, your delta shifts against you
Market-wide Vanna from dealer hedging can predict cascade events
Vanna = -e^(-qT) × N'(d₁) × d₂ / σ
Key insight: Vanna peaks for slightly OTM options and
decays toward zero for deep ITM/OTMThe critical signal: market-wide Vanna exposure. When dealers are heavily short Vanna (from selling puts to nervous investors), the market is primed for a cascade. SpotGamma and similar services track this, but you can approximate it from options open interest data.
Practical threshold: When estimated market Vanna is below -$400M, reduce short vol allocation by 50%.
2. Charm (∂Δ/∂T) — Delta Decay
Charm tells you how delta changes as time passes — essentially, the rate at which your delta position “melts” toward its terminal value.
Why it matters for VIX trading:
VIX futures converge to spot as expiration approaches
The rate of convergence accelerates (this is Charm!)
Weekend effects are significant — theta decay over weekends is ~3× daily
Charm = -N'(d₁) × [2rT - d₂σ√T] / [2Tσ√T]
Key insight: Charm is highest for ATM options
approaching expirationFor calendar spreads on VIX, Charm dictates your “roll timing.” The front month decays faster than the back month, but the rate of this differential changes. Understanding Charm helps you:
Time entries to capture maximum roll yield
Exit before expiration when Charm reverses sign
Account for weekends in position sizing
Practical application: Reduce position size by 25% when front-month DTE < 7. The Charm dynamics become unstable.
3. Vomma (∂Vega/∂σ) — The Convexity Killer
This is the big one. Vomma measures how vega itself changes as volatility moves. It’s what makes a vol spike exponentially worse than you’d expect.
Why it matters for VIX trading:
When you’re short vega, you want LOW Vomma
Positive Vomma means your vega exposure grows as vol rises
This creates the convex loss profile that killed XIV
Vomma = Vega × d₁ × d₂ / σ
Key insight: Vomma is highest for ATM options
and wings have lower VommaHere’s the math that XIV holders didn’t respect:
Without Vomma (linear assumption):
VIX: 15% → 50%
Expected loss: -35 × initial_vega
With Vomma (reality):
VIX: 15% → 50%
Actual loss: -35 × initial_vega × (1 + 0.5 × Vomma_factor)
The extra 50%+ comes from vega increasing as you loseThe VVIX tells you this story. VVIX (the VIX of VIX) is essentially a market-implied Vomma indicator:
VVIX < 85: Low Vomma environment → Safe for short vol
VVIX 85-100: Moderate → Reduce allocation
VVIX > 100: High Vomma → Danger zone, consider exiting
On February 5, 2018, VVIX was already elevated before the crash began. It was screaming “convexity risk.”
4. Veta (∂Vega/∂T) — Time Decay of Vega
Veta measures how vega changes as time passes. Options lose vega sensitivity as they approach expiration.
Why it matters for VIX trading:
Near-term VIX options have less vega than longer-dated
Calendar spreads have net positive Veta (gain from time passing)
Understanding Veta helps size roll trades correctly
Veta = Vega × [r × d₁/(σ√T) - (1 + d₁d₂)/(2T)]
Key insight: Veta is typically negative (vega decays),
but calendar spreads can be net positive VetaPractical application: For VIX calendar spreads (long back month, short front month), monitor the Veta differential. When it narrows significantly, the trade’s edge is diminishing.
Building the Enhanced Strategy
Now let’s put it all together. The goal is to use these Greeks as filters on our base VIX term structure strategy.
The Base Strategy (From Part 62)
When VIX term structure in contango:
→ Short VIX (via SVXY, short VXX, or futures spread)
Position size: 10-20% of portfolio max
Profit target: Take profits at 50% of expected roll yield
Stop loss: Exit if VIX/VIX3M > 1.0 (inversion)The Greek Enhancements
Here’s the decision tree with Greek filters:
STEP 1: Check Term Structure
VIX/VIX3M < 0.90 → Contango, proceed
VIX/VIX3M 0.90-0.98 → Weak contango, reduce size
VIX/VIX3M > 0.98 → Flat/inverted, no new positions
STEP 2: Check Vomma (via VVIX)
VVIX < 85 → Low convexity risk, full allocation
VVIX 85-100 → Moderate risk, 75% allocation
VVIX > 100 → High risk, 50% allocation or less
STEP 3: Check Vanna (if available)
Market Vanna > -200M → Normal, no adjustment
Market Vanna -200 to -400M → Elevated, reduce 25%
Market Vanna < -400M → Danger, reduce 50%
STEP 4: Timing via Charm
Front month DTE > 14 → Full allocation
Front month DTE 7-14 → Roll or reduce
Front month DTE < 7 → Exit or roll immediatelyThe Combined Allocation Matrix
Position sizing is like always keeping a Town Portal scroll ready when you’re playing Diablo. You need an exit strategy before you need an exit strategy. So your allocation strategy is super important.
| Low VVIX | Med VVIX | High VVIX |
| (< 85) | (85-100) | (> 100) |
--------------------|-----------|-----------|-----------|
Strong Contango | 100% | 75% | 50% |
(ratio < 0.88) | | | |
--------------------|-----------|-----------|-----------|
Normal Contango | 75% | 50% | 25% |
(0.88-0.95) | | | |
--------------------|-----------|-----------|-----------|
Weak/Flat | 50% | 25% | 0% |
(0.95-1.0) | | | |
--------------------|-----------|-----------|-----------|
Backwardation | 0% | 0% | LONG VOL |
(> 1.0) | | | |Simulated Results
I built a Python framework to test this approach. Here’s what the backtest shows over a 6-year period (2019-2024) (simulated 1000-day period with realistic vol spike distributions):
Metric | Naive Strategy | Greek-Enhanced |
--------------------|----------------|----------------|
Annual Return | 12.0% | 9.0% |
Sharpe Ratio | 0.45 | 0.72 |
Max Drawdown | -55% | -22% |
Sortino Ratio | 0.50 | 0.95 |
Calmar Ratio | 0.22 | 0.41 |
1% VaR (daily) | -4.2% | -2.1% |Key observations:
Lower raw return, higher risk-adjusted return. The Greek filters reduce exposure during the highest-return periods, but those periods are also the highest-risk.
Max drawdown cut by 60%. This is the big win. The strategy survives events that would have wiped out naive short vol.
Sharpe ratio improved by 60%. From 0.45 to 0.72. Not amazing, but much more investable.
Sortino nearly doubled. This measures return per unit of downside volatility — exactly what we care about for negatively skewed strategies.
The return distribution’s left tail is truncated. The 1% VaR improved from -4.2% to -2.1%. Still painful, but survivable.
The naive strategy — constant short vol exposure regardless of conditions — gets destroyed by the vol spikes. The Greek-enhanced version, which scales back when VVIX is elevated or term structure weakens, not only survives but generates positive risk-adjusted returns.
Key improvements:
Sharpe: -0.79 → +0.50 (from losing money to making money)
Max Drawdown: -86% → -16% (survivable vs. wipeout)
99% VaR: -11.6% → -3.2% (tail risk cut by 73%)
The win rate actually drops from 55% to 47% — but that’s the point. We’re giving up some of the small wins (by sitting out when signals are yellow/red) to avoid the catastrophic losses.
I’d say that’s perfect acceptable but then your risk appetite need not be the same as mine.
The Code
I’ve packaged the full framework into a Python module you can use for your own analysis.
Quick start:
# Install dependencies
pip install numpy pandas scipy matplotlib yfinance
# Check current market conditions
from vix_greeks_trading import VIXGreeksDashboard
dashboard = VIXGreeksDashboard()
dashboard.update()
dashboard.print_signals()
# Output:
# ============================================================
# VIX GREEK-ENHANCED TRADING DASHBOARD
# ============================================================
# --- SIGNALS ---
# 🟢 VIX Level: 14.32
# 🟢 VIX/VIX3M Ratio: 0.87
# 🟡 VVIX (Vomma): 92.15
# 🟢 Term Slope: 1.82
#
# --- RECOMMENDATION ---
# Allocation: 75%
# Reason: Term structure: strong_contango, VVIX state: med_vvix
# ============================================================Run your own backtest:
from vix_greeks_trading import run_backtest
results = run_backtest(
start_date='2019-01-01',
end_date='2024-12-31',
plot=True
)Calculate Greeks for any option:
from vix_greeks_trading import BSGreeks
# ATM call, 3 months out, 20% vol
greeks = BSGreeks.all_greeks(S=100, K=100, T=0.25, r=0.05, sigma=0.20)
print(f"Vanna: {greeks['vanna']:.4f}") # Delta sensitivity to vol
print(f"Vomma: {greeks['vomma']:.4f}") # Vega convexity
print(f"Charm: {greeks['charm']:.4f}") # Delta decay rateWhat’s in the code:
Component Description
─────────────────────────────────────────────────────────────────────
BSGreeks All first and second-order Greeks
(analytical Black-Scholes)
VIXGreeksDashboard Real-time signal dashboard with
traffic-light indicators
AllocationCalculator Term structure × VVIX allocation matrix
VIXStrategyBacktester Compare naive vs. enhanced strategies
VIXDataFetcher Pull live data from Yahoo Finance
(VIX, VIX3M, VVIX) Download the code: vix_greeks_trading.py
Daily Checklist (Printable)
I built out a simple dashboard to check before any short vol position:
┌────────────────────────────────────────────────────────────┐
│ VIX GREEK-ENHANCED DAILY CHECKLIST │
├────────────────────────────────────────────────────────────┤
│ │
│ Date: ___________ │
│ │
│ □ VIX Level: _______ │
│ [< 15 = 🟢] [15-25 = 🟡] [> 25 = 🔴] │
│ │
│ □ VIX/VIX3M Ratio: _______ │
│ [< 0.90 = 🟢] [0.90-0.98 = 🟡] [> 0.98 = 🔴] │
│ │
│ □ VVIX Level: _______ │
│ [< 85 = 🟢] [85-100 = 🟡] [> 100 = 🔴] │
│ │
│ □ Term Slope (M2-M1): _______ │
│ [> 1.5 = 🟢] [0.5-1.5 = 🟡] [< 0.5 = 🔴] │
│ │
│ □ Front Month DTE: _______ │
│ [> 14 = 🟢] [7-14 = 🟡] [< 7 = 🔴] │
│ │
├────────────────────────────────────────────────────────────┤
│ SIGNAL COUNT: ___🟢 ___🟡 ___🔴 │
│ │
│ ALLOCATION: │
│ 5 Green → 100% │
│ 4 Green → 75% │
│ 3+ Yellow → 50% │
│ Any Red → 25% max │
│ 2+ Red → NO POSITION │
│ │
│ TODAY'S DECISION: _________________________ │
│ │
└────────────────────────────────────────────────────────────┘The Honest Caveats
Before you implement this, some important limitations:
1. This is simulated, not live-traded
The backtest uses realistic assumptions, but it’s still a backtest. Real markets have slippage, gaps, and events that models don’t capture. Seriously — backtests work until they don’t
2. Market Vanna data is expensive
SpotGamma and similar services charge significant fees for market-wide Greek exposure data. Without it, you’re relying on VVIX as a proxy. Which is fine if you are trading small capital but if you are scaling, get better data.
3. The edge is smaller than it looks
After transaction costs, bid-ask spreads on VIX products, and the opportunity cost of reduced allocation, the actual improvement is probably 30-40% of what the backtest shows.
4. Greeks change intraday
During Feb 5, 2018, the signals would have gone from “yellow” to “red” to “purple” within hours. If you’re checking once daily, you might still get caught. For all of these models, you need a continuous monitoring system.
5. Correlation breakdown
In a true crisis, all these metrics become correlated. VVIX spikes because there’s a cascade, not before. The warning often comes late.
The Bottom Line
Can second-order Greeks improve VIX term structure trading?
Yes, but modestly. The improvements are:
Sharpe: +60% (0.45 → 0.72)
Max DD: -60% (-55% → -22%)
Raw return: -25% (12% → 9%)
Is this worth it? Depends on your utility function.
If you’re running a systematic strategy where survival matters more than maximizing returns, the Greek filters add genuine value. They won’t save you from every spike, but they’ll help you avoid the worst of them.
If you’re a gambler looking for maximum expected value and you’re fine with occasional blowups, the naive strategy actually has higher EV. You just need to size appropriately (≤10% of portfolio) and accept that you’ll occasionally give back years of gains in a week.
Ultimately, if I were to do this, I would build out a simplified version of this — basically the VVIX filter plus term structure. When VVIX > 100 AND VIX/VIX3M > 0.95, I’m flat or slightly long vol. Everything else, I’d maintain a modest short vol bias through put credit spreads.
The Greeks don’t eliminate the steamroller. They just give you a slightly better chance of hearing it coming.
Formulas Reference
Vanna
─────
Vanna = -e^(-qT) × N'(d₁) × d₂ / σ
Interpretation: How delta changes with vol (or vega with spot)
For short vol: Negative Vanna = delta shifts against you when vol rises
Charm
─────
Charm = -N'(d₁) × [2rT - d₂σ√T] / [2Tσ√T]
Interpretation: Delta decay rate
For VIX futures: Accelerates convergence to spot near expiry
Vomma
─────
Vomma = Vega × d₁ × d₂ / σ
Interpretation: Vega convexity
For short vol: Higher Vomma = losses accelerate in spikes
Veta
────
Veta = Vega × [r × d₁/(σ√T) - (1 + d₁d₂)/(2T)]
Interpretation: Vega time decay
For calendars: Net positive Veta = profit from time passingWhat’s Next
Part 64: How to actually calculate market-wide Vanna from options data
Part 65: Building a real-time Greek dashboard with Python
Remember: The backtest is always lying to you about something. And the steamroller doesn’t care about your Greeks.
The material presented here is for informational purposes only — this is not financial or investment advice. Short volatility strategies can result in losses exceeding your initial investment. Size appropriately.
And finally, my analyses probably contain errors. If you find them, let me know!









As an aside, these are my favorite kind of side-quests. Where I ask a question and can go test some hypotheses. Often times, I learn a lot and I try to understand why/how something behaves the way it does!