mirror of
https://github.com/Mihirkansara/nexus-quant-terminal.git
synced 2026-11-02 09:36:11 +00:00
Volatile instruments
- Add XAGUSD (SI=F, silver lease rate as r_f), BTCUSD and ETHUSD end to end:
pair metadata, live rates/OHLC/signals, CFTC positioning mappings
- Asset-class calendars: crypto annualised on 365 days, FX/metals on 252,
threaded through the signal engine
- Pair switch loads a typical ATM vol, rescales legs by moneyness, and
strategy templates use a ~1%-of-spot strike step
Vol Lab tab
- /api/vol/crypto/{BTC,ETH}: Deribit book summaries -> raw SVI fit per
expiry with Durrleman butterfly-arbitrage check, ATM / 25d RR / 25d BF
(Black-76 forward delta), DVOL, 30d constant-maturity IV, realised vol
and vol risk premium; cached 60s, 503 when Deribit is unreachable
- /api/vol/cone/{pair}: Burghardt-Lane realised-vol cone on the asset's
calendar
- UI: KPIs, cone with implied term-structure overlay, per-expiry smile
(market vs SVI), term-structure table with 'Use' to load T/sigma/RR/BF
into pricing and the Vol Smile tab
Fixes in the signal engine
- OU half-life divided by 252 twice; stationary sd used sqrt(252k) not sqrt(2k)
- Fallback realised vol returned decimals under *_pct keys
Tests: backend/tests (pytest) validate SVI recovery, exact 25d strikes,
cone calibration on both calendars and the endpoints with mocked feeds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FpiqUMAyo4RL5DdQHMWbwE
18 lines
842 B
Python
18 lines
842 B
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from .routers import greeks, surface, market, montecarlo, scenarios, strategies, export, forex, institutional, news, livedata, smile, vol
|
|
|
|
app = FastAPI(title="QuantRisk FX Terminal API",
|
|
description="Forex options risk analytics — Garman-Kohlhagen model.",
|
|
version="3.0.0")
|
|
|
|
app.add_middleware(CORSMiddleware, allow_origins=["*"],
|
|
allow_credentials=True, allow_methods=["*"], allow_headers=["*"])
|
|
|
|
for router in [greeks, surface, market, montecarlo, scenarios, strategies, export, forex, institutional, news, livedata, smile, vol]:
|
|
app.include_router(router.router, prefix="/api")
|
|
|
|
@app.get("/")
|
|
def root():
|
|
return {"status": "ok", "version": "3.0.0", "model": "Garman-Kohlhagen (1983)", "docs": "/docs"}
|