feat: show hedge starting position summary

This commit is contained in:
Bu5hm4nn
2026-03-24 19:36:37 +01:00
parent 021ce7dd99
commit 24de006adb
2 changed files with 13 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ from nicegui import ui
from app.pages.common import (
dashboard_page,
demo_spot_price,
portfolio_snapshot,
strategy_catalog,
strategy_metrics,
)
@@ -94,11 +95,16 @@ def hedge_page() -> None:
def render_summary() -> None:
metrics = strategy_metrics(selected["strategy"], selected["scenario_pct"])
strategy = metrics["strategy"]
portfolio = portfolio_snapshot()
starting_weight = portfolio["gold_value"] / portfolio["spot_price"]
summary.clear()
with summary:
ui.label("Scenario Summary").classes("text-lg font-semibold text-slate-900 dark:text-slate-100")
with ui.grid(columns=2).classes("w-full gap-4 max-sm:grid-cols-1"):
with ui.grid(columns=3).classes("w-full gap-4 max-lg:grid-cols-2 max-sm:grid-cols-1"):
cards = [
("Start value", f"${portfolio['gold_value']:,.0f}"),
("Start price", f"${portfolio['spot_price']:,.2f}/oz"),
("Weight", f"{starting_weight:,.0f} oz"),
("Scenario spot", f"${metrics['scenario_price']:,.2f}"),
("Hedge cost", f"${strategy['estimated_cost']:,.2f}/oz"),
("Unhedged equity", f"${metrics['unhedged_equity']:,.0f}"),

View File

@@ -103,6 +103,12 @@ def test_homepage_and_options_page_render() -> None:
page.mouse.click(slider_box["x"] + slider_box["width"] * 0.1, slider_box["y"] + slider_box["height"] / 2)
expect(page.locator("text=Scenario move: -20%").first).to_be_visible(timeout=15000)
hedge_text = page.locator("body").inner_text(timeout=15000)
assert "Start value" in hedge_text
assert "Start price" in hedge_text
assert "Weight" in hedge_text
assert "$215,000" in hedge_text
assert "$215.00/oz" in hedge_text
assert "1,000 oz" in hedge_text
assert "Unhedged equity" in hedge_text
assert "Hedged equity" in hedge_text
assert "$27,000" in hedge_text