Skip to content

Dark theme, persistent ticker, Heston calibration fix, and plain-English explanations#14

Merged
SecondOrderEdge merged 3 commits into
mainfrom
claude/tab-population-KygrS
May 24, 2026
Merged

Dark theme, persistent ticker, Heston calibration fix, and plain-English explanations#14
SecondOrderEdge merged 3 commits into
mainfrom
claude/tab-population-KygrS

Conversation

@SecondOrderEdge
Copy link
Copy Markdown
Owner

Summary

A UX + correctness pass across the Streamlit app, plus one real quant bug fix.

  • Dark "terminal" aesthetic — near-black canvas, gold accents, teal sparklines, serif headings, uppercase mono labels, card tiles, outlined status pills. Driven by .streamlit/config.toml + injected CSS hooked into page_header so every page inherits it. Plotly figures get a matching dark template (gold/teal palette) in osl/viz/charts.py, rendered with theme=None so the template wins over Streamlit's default.
  • Persistent ticker/provider — the symbol and provider now live in st.session_state, so a ticker set on one page carries across the whole app for the session.
  • Heston calibration fix — the old single fixed guess + price-error objective + no bounds collapsed to theta=0 (Feller violated, ~11 vol-pt RMSE) on steep real skews. Replaced with a multi-start, bounded Levenberg-Marquardt that minimizes implied-vol error and seeds v0/theta from the ATM/median variance. Steep market-like surfaces drop from ~11 → ~0.5 vol pts; synthetic recovery stays at 0.008. The page also surfaces the Feller condition so stressed fits are visible.
  • Plain-English explanations everywhere — calibrated Heston params get a dynamic per-parameter breakdown (spot vol √v0, long-run vol √θ, shock half-life). Centralized column tooltips (COLUMN_HELP + column_help in app_lib) on every data table; help= tooltips on headline metrics; "how to read" captions under jargon-heavy charts. The Playbook report carries header tooltips + a visible glossary (survives PDF export), and Assumptions & Disclaimers gains a central glossary.
  • Docs accuracy — replaced the stale "Not yet built" list (which contradicted the shipped app) with an accurate "Current limitations" section.

Test plan

  • uv run pytest — full suite green (197 tests)
  • uv run mypy osl — clean
  • ruff + black — clean
  • App boots headless without errors; all pages byte-compile
  • Heston fix validated numerically (steep + pooled surfaces, synthetic recovery)
  • Visual confirmation of the theme/charts on Streamlit Cloud (couldn't render with live data in CI; yfinance was rate-limiting)

https://claude.ai/code/session_01AXbuChtmt8Xo4cxEtKrady


Generated by Claude Code

claude added 3 commits May 24, 2026 21:02
Centralize column tooltips in app_lib (COLUMN_HELP + column_help) and
wire them into every data table — options chain, SVI surface params,
strategy candidates, POP-by-measure, screener, and backtest trades. Add
help= tooltips to the headline metrics (Overview, Vol Diagnostics,
Probability Lab, Backtester) and short "how to read" captions under the
jargon-heavy tables and charts (cone, payoff, P&L surface, radar, SVI).

https://claude.ai/code/session_01AXbuChtmt8Xo4cxEtKrady
Make the standalone playbook report self-explanatory: header tooltips and
a visible "How to read this table" glossary (survives PDF export), plus a
fix for the no-candidates colspan. Add a page caption explaining the
report and its reproducible digest. Add a Glossary section to Assumptions
& Disclaimers covering the volatility, probability, strategy, greek,
surface, advanced-model and backtest terms used across the app.

https://claude.ai/code/session_01AXbuChtmt8Xo4cxEtKrady
Strategy generation, payoff/scenario, the probability lab, GARCH, Heston/
PCA and the backtester all ship now; the old list contradicted the app.
Document the real caveats instead: experimental gating, synthetic PCA/
backtest demos until snapshots accumulate, RV-proxy IV rank, and the flat
risk-free rate.

https://claude.ai/code/session_01AXbuChtmt8Xo4cxEtKrady
@SecondOrderEdge SecondOrderEdge merged commit 7fd68dd into main May 24, 2026
0 of 2 checks passed
@SecondOrderEdge SecondOrderEdge deleted the claude/tab-population-KygrS branch May 24, 2026 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants