API Reference
Core Go packages and function signatures in floe.
Pricing (blackscholes)
BlackScholes
price := blackscholes.BlackScholes(floe.BlackScholesParams{
Spot: 100, Strike: 105, TimeToExpiry: 0.25,
RiskFreeRate: 0.05, Volatility: 0.20,
OptionType: floe.Call,
})
CalculateGreeks
g := blackscholes.CalculateGreeks(params)
fmt.Println(g.Price, g.Delta, g.Gamma, g.Theta, g.Vega, g.Rho)
fmt.Println(g.Vanna, g.Charm, g.Volga, g.Speed, g.Zomma, g.Color, g.Ultima)
CalculateImpliedVolatility
ivPercent := blackscholes.CalculateImpliedVolatility(
3.50, // option price
100, // spot
105, // strike
0.05, // risk-free rate
0.01, // dividend yield
0.25, // time to expiry (years)
floe.Call,
)
GetTimeToExpirationInYears
tte := blackscholes.GetTimeToExpirationInYears(expirationMs, time.Now().UnixMilli())
Statistics (statistics)
cdf := statistics.CumulativeNormalDistribution(1.96)
pdf := statistics.NormalPDF(0)
Volatility Surfaces (volatility)
GetIVSurfaces
surfaces := volatility.GetIVSurfaces(
floe.SmoothingTotalVariance,
chain,
time.Now().UnixMilli(),
)
GetIVForStrike
ivAtK := volatility.GetIVForStrike(surfaces, expiryMs, floe.Call, 450)
SmoothTotalVarianceSmile
smoothed := volatility.SmoothTotalVarianceSmile(
[]float64{440, 445, 450, 455, 460},
[]float64{23, 21, 19, 20, 22},
0.08,
)
Dealer Exposure (exposure)
CalculateGammaVannaCharmExposures
variants := exposure.CalculateGammaVannaCharmExposures(
chain,
surfaces,
floe.ExposureCalculationOptions{AsOfTimestamp: time.Now().UnixMilli()},
)
for _, v := range variants {
fmt.Println(v.Expiration, v.Canonical.TotalNetExposure)
}
CalculateSharesNeededToCover
cover := exposure.CalculateSharesNeededToCover(900_000_000, totalNetExposure, spot)
fmt.Println(cover.ActionToCover, cover.SharesToCover, cover.ImpliedMoveToCover)
Hedge Flow (hedgeflow)
ComputeHedgeImpulseCurve
curve := hedgeflow.ComputeHedgeImpulseCurve(
canonicalExposure,
callSurface,
hedgeflow.HedgeImpulseConfig{RangePercent: 3, StepPercent: 0.05, KernelWidthStrikes: 2},
time.Now().UnixMilli(),
)
ComputeCharmIntegral
charm := hedgeflow.ComputeCharmIntegral(
canonicalExposure,
hedgeflow.CharmIntegralConfig{TimeStepMinutes: 15},
time.Now().UnixMilli(),
)
AnalyzeHedgeFlow
analysis := hedgeflow.AnalyzeHedgeFlow(
canonicalExposure,
callSurface,
hedgeflow.HedgeImpulseConfig{},
hedgeflow.CharmIntegralConfig{},
time.Now().UnixMilli(),
)
Implied Probability (impliedpdf)
EstimateImpliedProbabilityDistribution
result := impliedpdf.EstimateImpliedProbabilityDistribution(
"QQQ",
502.5,
callOptions,
time.Now().UnixMilli(),
)
EstimateImpliedProbabilityDistributions
dists := impliedpdf.EstimateImpliedProbabilityDistributions(
"QQQ",
502.5,
allOptions,
time.Now().UnixMilli(),
)
Query helpers
prob := impliedpdf.GetProbabilityInRange(dist, 495, 510)
cum := impliedpdf.GetCumulativeProbability(dist, 500)
q90 := impliedpdf.GetQuantile(dist, 0.90)
IV vs RV (iv, rv, volresponse)
Model-free IV
near := iv.ComputeVarianceSwapIV(nearTermOptions, spot, 0.05, time.Now().UnixMilli())
targetDays := 1
interp := iv.ComputeImpliedVolatility(nearTermOptions, spot, 0.05, time.Now().UnixMilli(), farTermOptions, &targetDays)
Realized volatility
rvResult := rv.ComputeRealizedVolatility(observations)
Vol response z-score
obs := volresponse.BuildVolResponseObservation(currentIV, currentRV, currentSpot, nowMs, prevIV, prevSpot)
result := volresponse.ComputeVolResponseZScore(series, volresponse.VolResponseConfig{})