Option Volatility Surface with a Flexible, API-Driven Approach
In this post, we discuss how implied volatility (IV) is compared across different strikes, maturities. We’ll show how moneyness, log-moneyness, and delta quoting conventions help you visualize and interpret the “volatility smile.” Finally, we’ll highlight how an adaptable API—like Qytrees—streamlines retrieving and analyzing these data points.
Reminder: Why Implied Volatility?
Options grant holders the right (but not the obligation) to buy or sell an underlying asset at a specific strike on or before a certain date. Factors like the forward price, strike, maturity, and interest rates make raw option prices vary widely across assets, tenors or strikes. For example the price of a 1 month call option At the Money Forward strike for BTC/USD is as of writing of this blog around 5000 USD whereas for ETH/USD the price is around 150 USD.
Implied volatility (IV) simplifies this comparison by “reverse-engineering” volatility from the price using the Black–Scholes model. When plotted against strike, IV often forms a U-shaped (convex) volatility smile, shaped by market perceptions of risk (e.g., more demands for OTM puts in bear markets or OTM calls in bullish ones) and hedging strategies. Because IV is standardized, traders can compare options more directly—then convert IV back to a price when needed by using the BS pricing machinery.
Vol smile function of Strikes.
A consistent volatility smile is central to pricing more complex products and managing risk. (Check out our other posts here for in-depth discussions.)
Several Key Scales for the Vol Smile
Moneyness Definition
Moneyness = Strike / Forward
Rationale: Normalizes the strike relative to the forward price, simplifying comparisons across underlyings and maturities.
Vol smile function of Moneyness.
Log-Moneyness Definition
Log-Moneyness = Log(Strike / Forward)
Benefit: Creates a more symmetric shape around at-the-money, aligning better with certain pricing models.
Vol smile function of Log-Moneyness.
Delta-Based Delta Range
Calls typically span 0%–100%, while puts run –100%–0%.
Why It’s Useful: Plotting IV vs. delta (e.g., a “25-delta call”) is a common practice in FX and crypto, yielding a uniform yardstick across underlyings.
Different Delta Definitions: Market convention in FX vary by currency pair and sometimes by maturity (We’ll explore these in another post). In the crypto market, such conventions are not yet considered but FX Traders view can be applied on crypto as well.
Delta Call
Vol smile function of Delta Call.
Delta Put
Vol smile function of Delta Put.
FX Style representation of the Volatility smile
FX-Inspired Conventions: Traders often track 2, 5, 10, or 25 delta calls/puts at various maturities. Platforms like Bloomberg provide direct comparisons for these standard deltas.
ATM Variations: “At-the-money” may be forward-based or delta-neutral (DN). FX markets often prefer DN.
FX Style representation of Vol smile.
Streamlining Data Retrieval with an Adaptable API
Traditionally, retrieving volatilities or strikes for a specific convention can mean juggling forward prices, discount curves, or iterative solvers—especially under multiple delta definitions (premium-adjusted vs. spot, etc.). With Qytrees’ GraphQL-powered API, you can:
- When using delta call or delta put or fx style specify Your delta Convention**: Premium-adjusted, forward, spot, etc.
- Any Delta (e.g., a 23-delta put)
- Or choose any values for your chosen scales (exemple log-moneyness or strikes).
- Input the strikes in the scale that is suitable for you — or reverse it: give a strike, retrieve its delta or vice versa.
Key Benefits
- Request Exactly What You Need: Pull vol data for particular tenors, strikes, or deltas in a single request.
- Compare Scales: Pivot between strike-based, moneyness-based, log-moneyness-based, and delta-based quoting without extra queries.
- Focus on Analysis: Minimize tedious computations and emphasize market insights.
- Build a Vol Matrix: Easily create custom volatility grids for any maturity, strike, or delta convention.
- Vectorized & Parallel Computations: Fetch multiple maturities or valuation dates—in different time zones or cutoffs—just as quickly as for a single date.
- Parallel computation for valuation dates – allows you to do historical analysis in a smooth way by defining the range of historical data and the observation frequency
Qytrees' GraphQL Basics for Option Analytics
Qytrees' GraphQL endpoint allows you to build custom queries around a predefined schema. For option data, you typically define:
- baseAsset and quoteAsset
- An expiry node (to choose tenors, explicit dates, or listed exchange expiries)
- A strike node (to choose scale, moneyness, or delta conventions)
- Optional additional nodes (e.g., a payoff node for pricing) will be discussed in upcoming blogs.
Defining Expiries in One Node
The expiry node is especially powerful in Qytrees. Common use cases include:
- Tenor-Based An example below:
expiry: {
list: ["1M", "2M", "7W2D"],
cutTime: "8AM"
}
Specify rolling tenors (like 1M, 2M), and optionally set a cutTime (e.g., 8 AM). If cutTime is omitted, the system uses rolling tenors relative to the valuation date/time.
- Explicit Dates
expiry: {
list: ["21/04/2025 08:30", "21/06/2025 12:30"]
}
Provide exact date/times. If you omit times or cutTime, a default cutoff is used similar to listed option from the same data soure.
- Listed Exchange Expiries
expiry: {
selection: LISTED
}
Pulls only exchange-listed expiry dates (e.g., from Deribit).
By customizing expiry, you can retrieve precisely the volatility data you need—whether you’re after standard tenors, fixed calendar dates, or exchange-specific listings.
Controlling the Strike Node
Similarly, the strike node defines how you set or retrieve strikes:
- Delta Convention Example
strike: {
strikeType: {
scale: DELTA_CALL
deltaConvention: FORWARD
},
list: [0.12, 0.133, 0.543, 0.65]
}
This example node allows you to request strikes at specific call delta levels using a forward-based delta convention.
- Log-Moneyness Range
strike: {
strikeType: {
scale: LOG_MONEYNESS
},
range: [-1, 1.5, 0.1]
}
Here, you define a range for log-moneyness from –1 to 1.5 in increments of 0.1.
- FX-Style Delta
strike: {
strikeType: {
scale: FX_STYLE,
deltaConvention: SPOT
},
list: ["2P", "4P", "12P", "27P", "35P", "DNS", "25C", "10C", "5C"]
}
This approach follows an FX-style definition, specifying deltas such as “2P” (2-delta put) or “25C” (25-delta call). DNS refers to a Delta Neutral Straddle.
- Listed Strikes
strike: {
selection: LISTED
}
Fetches only strikes actively listed on your chosen exchange.
As shown, Qytrees supports a broad range of strike and expiry definitions, enabling direct access to both standard and more specialized quoting styles.
Conclusion
Implied volatility makes comparing options across diverse strikes, maturities, and underlyings more efficient. Whether you prefer moneyness, log-moneyness, or delta-based quoting, the critical decision is choosing a scale that fits your trading or research goals. With Qytrees’ flexible GraphQL API, you can:
- Define expiries in a single node (tenors, explicit dates, or listed calendars)
- Seamlessly request vol data in any scale—strike, moneyness, log-moneyness, or delta
- Stay focused on insights, risk, and strategy rather than data wrangling
Stay tuned for upcoming posts covering term structure, skew, and other advanced methods of analyzing volatility surfaces!
If you have specific questions or scenarios you’d like us to cover, let us know.