gammanexus/docs/architecture.md

56 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# GammaDesk Architecture
## Product layers
GammaDesk has four main layers:
1. **Data ingestion**: ORATS option-chain, volatility, summary, and IV-rank data.
2. **Gamma engine**: Per-strike GEX, net GEX, walls, HVL/gamma flip, expiration aggregation, and screener metrics.
3. **API layer**: Stable JSON routes used by the React dashboard, NinjaTrader 8 indicator, and future charting adapters.
4. **User interfaces**: Web dashboard now, NinjaTrader indicator now, optional TradingView-style overlay later.
## Frontend flow
The React app uses TanStack Query to fetch from the Express routes:
- `Dashboard` pulls summary and GEX profile data.
- `Gamma Levels` focuses on strike-level GEX levels.
- `Expiry Matrix` shows selected-alone and cumulative expiration views.
- `Screener` ranks symbols by gamma regime, IV rank, and distance to walls.
- `Settings` explains ORATS configuration and keeps any typed key in React state only.
Hash routing is used through Wouter so the app works correctly after deployment.
## Backend flow
The backend currently serves deterministic mock data:
```text
routes.ts -> marketData.ts -> shared schema-shaped JSON
```
The future live path is:
```text
routes.ts -> oratsClient.ts -> ORATS API -> normalizer -> gamma engine -> shared schema-shaped JSON
```
The frontend should not need to change when ORATS is connected.
## Data contracts
Keep these contracts stable:
- `MarketSummary`
- `GexProfile`
- `ExpirationRow`
- `ScreenerRow`
- `SymbolMeta`
If ORATS adds fields, add them as optional fields rather than breaking the existing route shape.
## Chart integrations
NinjaTrader 8 and future adapters should consume GammaDesks own API instead of calling ORATS directly. This keeps API keys private, centralizes caching, and lets the server enforce the chosen GEX sign convention.