Pricing
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
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.
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
| Strike | 7d IV | 30d IV | 90d IV |
|---|
02 / The chain
Priced on the surface above, with the Greeks a trader actually reads: delta per dollar, vega per volatility point, theta per calendar day.
| Strike | IV | Call | Put | Δ call | Γ | Vega | Θ / day | P(ITM) |
|---|
03 / Verification
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.
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.
Checked across four strikes, three tenors and a live dividend yield. Parity catches almost every sign error that survives a casual read.
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.
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.
$ 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
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.
| Symbol | Testnet spot | ATM vol | IV30 index |
|---|