From dca5fea6799bbf232209df142e0d6077eca3c8d1 Mon Sep 17 00:00:00 2001 From: Manohar Date: Fri, 19 Jun 2026 14:07:24 +0530 Subject: [PATCH] feat: add Analysis tab with position intelligence engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 1 of the position-tracker → analysis port: Backend: - src/ai/types.ts — shared types (AnalysisInput, ClassifiedPosition, AnalysisResult, etc.) - src/ai/greeks.ts — added calcTheoreticalPrice() export for scenario analysis - src/ai/classifier.ts — pure-function position classifier (DEAD_WEIGHT/WORKING/UNDER_PRESSURE/HEDGE/DANGER_SHORT) with module-level hysteresis Map - src/ai/portfolio-greeks.ts — aggregates per-unit Greeks × quantity into portfolio totals - src/ai/risk-assessor.ts — naked short detection, concentration, side imbalance, Greeks breach checks - src/ai/scenario.ts — P&L grid at ±100..±1000 spot moves per underlying - src/ai/analyze.ts — orchestrator: maps Position[] → AnalysisInput[], reads spot from market_cache, stores JSON in analysis_snapshots - src/db/client.ts — analysis_snapshots table + index - src/tracker/poll.ts — runAnalysis() called after every pollTick + forcePoll - src/api/server.ts — GET /api/analysis endpoint Frontend (public/index.html): - Multi-page nav with Dashboard | Analysis tabs (showView()) - Analysis view: summary cards (delta/theta/vega/risk level), action list (urgent positions sorted by urgency score), classification table with urgency bars, risk assessment details, scenario P&L grid per underlying - loadAnalysis() + renderAnalysis() wired to tab switch Co-Authored-By: Claude Sonnet 4.6 --- public/index.html | 173 ++++++++++++++++++++++++++++- src/ai/analyze.ts | 97 ++++++++++++++++ src/ai/classifier.ts | 156 ++++++++++++++++++++++++++ src/ai/greeks.ts | 222 +++++++++++++++++++++++++++++++++++++ src/ai/portfolio-greeks.ts | 54 +++++++++ src/ai/risk-assessor.ts | 144 ++++++++++++++++++++++++ src/ai/scenario.ts | 64 +++++++++++ src/ai/types.ts | 106 ++++++++++++++++++ src/api/server.ts | 15 +++ src/db/client.ts | 8 ++ src/tracker/poll.ts | 9 +- 11 files changed, 1045 insertions(+), 3 deletions(-) create mode 100644 src/ai/analyze.ts create mode 100644 src/ai/classifier.ts create mode 100644 src/ai/greeks.ts create mode 100644 src/ai/portfolio-greeks.ts create mode 100644 src/ai/risk-assessor.ts create mode 100644 src/ai/scenario.ts create mode 100644 src/ai/types.ts diff --git a/public/index.html b/public/index.html index c79b6dc..82e2d0c 100644 --- a/public/index.html +++ b/public/index.html @@ -136,6 +136,11 @@ .exp-tab{padding:2px 9px;border-radius:7px;font-size:.65rem;font-weight:600;border:1px solid var(--border2);cursor:pointer;background:transparent;color:var(--text2);transition:all .12s;font-family:'Geist Mono',monospace;} .exp-tab:hover{border-color:var(--coral);color:var(--text)} .exp-tab.active{background:var(--coral);border-color:var(--coral);color:#fff} + .nav-tabs{display:flex;gap:3px} + .nav-tab{padding:5px 14px;border-radius:9px;font-size:.72rem;font-weight:600;border:1px solid var(--border2);cursor:pointer;background:transparent;color:var(--text2);transition:all .12s;font-family:'Geist',sans-serif} + .nav-tab:hover{color:var(--text);border-color:var(--coral)} + .nav-tab.active{background:var(--coral);border-color:var(--coral);color:#fff} + @media(max-width:768px){.a-sum-grid{grid-template-columns:1fr 1fr!important}} @@ -145,15 +150,20 @@ +
Unrealised P&L
Open positions MTM
Realised P&L
Partial + full exits today
@@ -290,7 +300,46 @@
+ + +