feat(DISPLAY-002): GLD mode shows real share prices
This commit is contained in:
@@ -113,11 +113,20 @@ async def _render_hedge_page(workspace_id: str | None = None) -> None:
|
||||
"scenario_pct": 0,
|
||||
}
|
||||
|
||||
display_mode = portfolio.get("display_mode", "XAU")
|
||||
|
||||
if display_mode == "GLD":
|
||||
spot_unit = "/share"
|
||||
spot_desc = "GLD share price"
|
||||
else:
|
||||
spot_unit = "/oz"
|
||||
spot_desc = "converted collateral spot"
|
||||
|
||||
if quote_source == "configured_entry_price":
|
||||
spot_label = f"Current spot reference: ${portfolio['spot_price']:,.2f}/oz (configured entry price)"
|
||||
spot_label = f"Current spot reference: ${portfolio['spot_price']:,.2f}{spot_unit} (configured entry price)"
|
||||
else:
|
||||
spot_label = (
|
||||
f"Current spot reference: ${portfolio['spot_price']:,.2f}/oz (converted collateral spot via {quote_source})"
|
||||
f"Current spot reference: ${portfolio['spot_price']:,.2f}{spot_unit} ({spot_desc} via {quote_source})"
|
||||
)
|
||||
updated_label = f"Quote timestamp: {quote_updated_at}" if quote_updated_at else "Quote timestamp: unavailable"
|
||||
|
||||
@@ -242,6 +251,17 @@ async def _render_hedge_page(workspace_id: str | None = None) -> None:
|
||||
def render_summary() -> None:
|
||||
metrics = strategy_metrics(selected["strategy"], selected["scenario_pct"], portfolio=portfolio)
|
||||
strategy = metrics["strategy"]
|
||||
|
||||
# Display mode-aware labels
|
||||
if display_mode == "GLD":
|
||||
weight_unit = "shares"
|
||||
price_unit = "/share"
|
||||
hedge_cost_unit = "/share"
|
||||
else:
|
||||
weight_unit = "oz"
|
||||
price_unit = "/oz"
|
||||
hedge_cost_unit = "/oz"
|
||||
|
||||
summary.clear()
|
||||
with summary:
|
||||
ui.label("Scenario Summary").classes("text-lg font-semibold text-slate-900 dark:text-slate-100")
|
||||
@@ -252,8 +272,8 @@ async def _render_hedge_page(workspace_id: str | None = None) -> None:
|
||||
with ui.grid(columns=1).classes("w-full gap-4 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2"):
|
||||
cards = [
|
||||
("Start value", f"${portfolio['gold_value']:,.0f}"),
|
||||
("Start price", f"${portfolio['spot_price']:,.2f}/oz"),
|
||||
("Weight", f"{portfolio['gold_units']:,.0f} oz"),
|
||||
("Start price", f"${portfolio['spot_price']:,.2f}{price_unit}"),
|
||||
("Weight", f"{portfolio['gold_units']:,.0f} {weight_unit}"),
|
||||
("Loan amount", f"${portfolio['loan_amount']:,.0f}"),
|
||||
("Margin call LTV", f"{portfolio['margin_call_ltv']:.1%}"),
|
||||
("Monthly hedge budget", f"${portfolio['hedge_budget']:,.0f}"),
|
||||
@@ -270,8 +290,8 @@ async def _render_hedge_page(workspace_id: str | None = None) -> None:
|
||||
ui.label("Scenario Results").classes("text-lg font-semibold text-slate-900 dark:text-slate-100")
|
||||
with ui.grid(columns=2).classes("w-full gap-4 max-md:grid-cols-1"):
|
||||
result_cards = [
|
||||
("Scenario spot", f"${metrics['scenario_price']:,.2f}"),
|
||||
("Hedge cost", f"${float(strategy.get('estimated_cost', 0.0)):,.2f}/oz"),
|
||||
("Scenario spot", f"${metrics['scenario_price']:,.2f}{price_unit}"),
|
||||
("Hedge cost", f"${float(strategy.get('estimated_cost', 0.0)):,.2f}{hedge_cost_unit}"),
|
||||
("Unhedged equity", f"${metrics['unhedged_equity']:,.0f}"),
|
||||
("Hedged equity", f"${metrics['hedged_equity']:,.0f}"),
|
||||
("Net hedge benefit", f"${metrics['hedged_equity'] - metrics['unhedged_equity']:,.0f}"),
|
||||
|
||||
Reference in New Issue
Block a user