How Second-Order Greeks (Vanna, Vomma, Veta, Charm, Color) Drive Advanced Options Risk Management

Second-order Greeks measure how primary sensitivities like Delta, Vega, and Gamma shift when volatility, time, or price changes, enabling precise hedging of convexity, correlation risk, and non-linear time decay.

OptionStratLib implements a comprehensive suite of second-order Greeks that capture the subtle, non-linear risks first-order metrics miss. These calculations, found in src/greeks/equations.rs, allow traders to quantify how Delta responds to volatility shocks (Vanna), how Vega itself decays (Veta), and how Gamma erodes over time (Color)—critical inputs for dynamic hedging and portfolio construction.

What Are Second-Order Greeks?

Second-order Greeks are derivatives of derivatives. While Delta measures price sensitivity and Vega measures volatility sensitivity, second-order Greeks track how these primary Greeks change when market variables shift. In src/greeks/equations.rs, OptionStratLib implements five critical second-order metrics that form the backbone of sophisticated risk management.

Core Implementation in OptionStratLib

Each Greek is computed using Black-Scholes closed-form solutions and returns a Decimal scaled by option quantity, enabling direct portfolio aggregation.

Vanna (Delta-Volatility Sensitivity)

Vanna measures the rate of change of Delta with respect to volatility (∂Δ/∂σ), capturing correlation risk between spot moves and volatility shifts.

In src/greeks/equations.rs, the implementation follows the formula Vanna = e^{-qT}·N'(d1)·(d2/σ):

pub fn vanna(option: &Options) -> Result<Decimal, GreeksError> {
    // Computes d1, d2, n(d1), then:
    // e_rt * n_d1 * (d2 / implied_volatility) scaled by quantity
}

This function appears at lines 1298-1328, calculating d1 and d2 from the option parameters, computing the standard normal density N'(d1), and scaling by the dividend discount factor and quantity.

Vomma (Vega-Volatility Convexity)

Vomma (also called Volga) measures the sensitivity of Vega to changes in volatility (∂²V/∂σ²), indicating volatility convexity.

The implementation at lines 1416-1426 in src/greeks/equations.rs uses Vomma = Vega·(d1·d2/σ):

pub fn vomma(option: &Options) -> Result<Decimal, GreeksError> {
    // Reuses vega, d1, d2 and multiplies by quantity
}

High positive Vomma indicates the position gains Vega exposure as volatility rises—beneficial for long volatility strategies but risky for short volatility positions.

Veta (Vega-Time Decay)

Veta measures the rate of change of Vega with respect to time (∂V/∂t), quantifying how volatility sensitivity decays as expiration approaches.

Implemented at lines 1445-1468 in src/greeks/equations.rs:

pub fn veta(option: &Options) -> Result<Decimal, GreeksError> {
    // Builds on vega, d1, d2, incorporating risk-free rate, 
    // dividend yield, and time to expiration
}

The formula accounts for the complex interaction between time decay and volatility: Veta = -Vega·[ q + ((r‑q)·d1)/(σ√T) – (1+d1·d2)/(2T) ]. Strongly negative Veta warns that long Vega positions lose sensitivity rapidly as expiration nears.

Charm (Delta-Time Decay)

Charm (also called Delta decay) measures the rate of change of Delta over time (∂Δ/∂t), indicating how hedge ratios drift as expiration approaches.

Found at lines 1561-1580 in src/greeks/equations.rs:

pub fn charm(option: &Options) -> Result<Decimal, GreeksError> {
    // Uses d1, d2, dividend yield, risk-free rate, and quantity
}

Charm helps traders anticipate how often they must rebalance Delta hedges. High absolute Charm near expiration signals that Delta will shift rapidly, requiring more frequent hedge adjustments.

Color (Gamma-Time Decay)

Color (also called Gamma decay) measures the rate of change of Gamma with respect to time (∂Γ/∂t), showing how convexity erodes as expiration approaches.

Implemented at lines 1651-1668 in src/greeks/equations.rs:

pub fn color(option: &Options) -> Result<Decimal, GreeksError> {
    // Analogous to charm but for Gamma
}

Positive Color indicates Gamma is shrinking, reducing the benefit of long Gamma positions. This metric is crucial for gamma scalping strategies, where traders rely on stable or increasing Gamma to capture profits from price swings.

Aggregating Portfolio Risk with Chain Exposure

While individual option Greeks reveal position-level risk, portfolio management requires aggregate exposure. In src/chains/chain.rs, OptionStratLib provides methods to sum second-order Greeks across entire option chains:

  • vanna_exposure() (lines 1929-1962) – aggregates Vanna across all strikes and expirations
  • vomma_exposure() (lines 1964-1992) – aggregates Vomma exposure
  • veta_exposure() (lines 1994-2022) – aggregates Veta (Vega time decay)
  • charm_exposure() (lines 2024-2052) – aggregates Charm (Delta decay)
  • color_exposure() (lines 2054-2082) – aggregates Color (Gamma decay)

These methods enable risk managers to quantify non-linear sensitivities for complex strategies like strangles, butterflies, or iron condors. By summing Vanna across a chain, for example, traders can assess total correlation risk between spot moves and volatility shifts.

Visualizing Second-Order Greek Surfaces

Understanding how second-order Greeks vary across strikes and maturities requires visualization. OptionStratLib treats each Greek as an axis in src/model/axis.rs (BasicAxisTypes enum), enabling 3-D surface generation in src/surfaces/basic.rs.

To plot Vanna against strike and volatility:

use optionstratlib::model::axis::BasicAxisTypes;
use optionstratlib::surfaces::Surface;

let surfaces = chain.surfaces()?;                       // builds all surfaces
let vol_grid = vec![
    Positive::new(0.1).unwrap(),
    Positive::new(0.2).unwrap(),
    Positive::new(0.3).unwrap(),
];
let vanna_surface = surfaces.get_surface_volatility_versus(
    &BasicAxisTypes::Vanna, &option, vol_grid)?;
vanna_surface.plotly("Vanna Surface")?;                 // uses Plotly visualization

This generates a surface where height represents Vanna exposure across the strike-volatility plane, helping identify regions where correlation risk concentrates. Similar calls exist for Vomma, Veta, Charm, and Color surfaces.

Risk Management Applications

Vanna-Volga Hedging

The Vanna-Volga pricing method, implemented in src/metrics/composite/vanna_volga.rs, explicitly uses Vanna and Vomma to price exotic options and construct hedges. The VannaVolgaSurface trait produces a surface of hedge costs as a function of strike and volatility, directly leveraging these second-order Greeks to manage volatility smile risk.

Rebalancing Schedules and Charm

Charm (Delta decay) determines how quickly hedge ratios drift toward expiration. High absolute Charm near expiration signals that Delta will shift rapidly, requiring more frequent rebalancing. Risk managers use charm_exposure() to schedule hedge adjustments, avoiding unexpected Delta gaps that generate P&L volatility.

Gamma Scalping and Color

Color (Gamma decay) indicates how quickly convexity benefits erode. Positive Color means Gamma shrinks rapidly, reducing the profitability of gamma scalping strategies. Traders monitor color_exposure() to determine when to exit long Gamma positions or adjust scalping frequency as expiration approaches.

Summary

  • Vanna measures Delta's sensitivity to volatility changes, capturing spot-volatility correlation risk essential for dynamic hedging.
  • Vomma quantifies Vega's convexity to volatility shifts, indicating whether positions gain or lose volatility exposure as markets move.
  • Veta tracks how Vega decays over time, critical for managing long-volatility positions approaching expiration.
  • Charm reveals how Delta drifts with time, determining rebalancing frequency for hedge ratios.
  • Color shows how Gamma erodes over time, affecting the viability of gamma scalping strategies.

OptionStratLib implements these metrics in src/greeks/equations.rs, aggregates them via src/chains/chain.rs, and visualizes them through src/surfaces/basic.rs, providing a complete toolkit for sophisticated options risk management.

Frequently Asked Questions

What is the difference between Vanna and Vomma in options trading?

Vanna measures how Delta changes when implied volatility shifts (∂Δ/∂σ), capturing the correlation between price moves and volatility changes. Vomma measures how Vega itself changes when volatility moves (∂²V/∂σ²), indicating volatility convexity. While Vanna helps manage delta-hedging adjustments during volatility shocks, Vomma reveals whether a position gains or loses volatility exposure as markets become more turbulent.

How does Charm affect delta hedging frequency?

Charm, also known as Delta decay, measures how Delta changes as time passes (∂Δ/∂t). High absolute Charm near expiration indicates that hedge ratios will drift rapidly, requiring more frequent rebalancing to maintain delta-neutral positions. Traders use Charm exposure calculations to optimize hedging schedules, reducing transaction costs while preventing delta gaps that generate unwanted P&L volatility.

Why is Color important for gamma scalping strategies?

Color measures the rate of change of Gamma over time (∂Γ/∂t), effectively showing how convexity benefits decay as expiration approaches. Positive Color indicates that Gamma is shrinking rapidly, which reduces the profitability of gamma scalping—where traders profit from delta adjustments as the underlying moves. Monitoring Color exposure helps traders determine optimal exit points for long-Gamma positions or adjust scalping frequency before convexity benefits erode.

How does OptionStratLib calculate portfolio-level second-order Greek exposure?

OptionStratLib aggregates second-order Greeks across entire option chains using exposure methods in src/chains/chain.rs. Functions like vanna_exposure(), vomma_exposure(), veta_exposure(), charm_exposure(), and color_exposure() sum individual option Greeks across all strikes and expirations. This aggregation enables risk managers to quantify total portfolio sensitivity to volatility shocks, time decay, and spot-volatility correlations for complex multi-leg strategies.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →