Pricing

One flat volatility per name is how venues get liquidated.

Equity options do not trade flat in strike. Downside puts are persistently richer than upside calls, because that is where the demand for protection lives. A venue that prices every strike off a single number misprices its own wings, and the margin engine built on top of it cannot be trusted with anyone's collateral.

01 / The surface

Skew and term structure, both priced

Volatility is a function of strike and expiry, not a constant. The surface carries a negative skew term, so protection costs more than upside, and a term slope, so longer dated vol sits above short dated vol.

Log moneyness is scaled by the square root of time, which keeps the smile stable as expiry changes rather than letting it flatten out on its own.

surface
k = ln(K / S) / sqrt(T)
sigma = atm(T) * (1 + skew*k + curve*k^2)

skew   -0.12  puts richer than calls
curve  +0.35  smile, not a straight line
term   +0.04  per log unit of tenor
Table view
Strike7d IV30d IV90d IV

02 / The chain

Live chain

Priced on the surface above, with the Greeks a trader actually reads: delta per dollar, vega per volatility point, theta per calendar day.

StrikeIVCallPut Δ callΓVega Θ / dayP(ITM)

03 / Verification

Anybody can check the pricer, so we made that easy

A derivatives venue that will not show its pricing tests is asking for trust it has not earned. These run in the repo and in this browser.

Anchored to published values

The textbook case, S and K at 100, one year, 5% rates, 20% vol, prices to 10.450583572185565 for the call and 5.573526022256971 for the put. Asserted to within 1e-10.

Put-call parity across the grid

Checked across four strikes, three tenors and a live dividend yield. Parity catches almost every sign error that survives a casual read.

Greeks against numerical derivatives

Vega compared to the central difference of price in vol, gamma to the second difference in spot. An analytic Greek that disagrees with its own numerical derivative is wrong, whatever the formula looks like.

The solver admits what it cannot know

Implied vol returns nothing rather than a confident number when vega is negligible. A deep in the money option at low vol is worth intrinsic whatever the vol is.

A bug this caught, written up rather than buried

The first version of the delta inverter had the put branch backwards, and it produced 25 delta put strikes above spot. Delta falls as strike rises for calls and puts alike, so there should only ever have been one branch. Writing a separate case for puts is exactly how the sign got flipped. The test that caught it is still in the suite.

run it
$ npm test
  101 passing   21 pricing, 24 margin and perps

$ node --test 'test/options.test.js'
  Black-Scholes, Greeks, parity, the solver

$ node --test 'test/perp.test.js'
  stress grid, margin netting, collateral

04 / Listing

A symbol exists the moment an adapter does

Listing is not a committee. A symbol can be traded once a price adapter for it has been proposed, bonded, run in shadow, and ratified. The same lifecycle the resolution layer already uses.

That is what makes "every market" a real claim rather than a slogan. The constraint is adapter coverage, and adapter coverage is open to anyone.

Crypto is the easier half. The underlying is already onchain, so an index over onchain venues is directly observable rather than reported, there is no session close to disagree about and no corporate actions to adjust for. Staking yield enters the pricer as the continuous dividend yield with no change to the model.

SymbolTestnet spotATM volIV30 index
Synthetic testnet marks. No market data is fetched and nothing settles against a real exchange.