{# Top Movers panel — renders top-3 unrealized $ winners and losers among
open positions. `top_movers: TopMoversView` is required. The panel is
omitted (caller-side) when the view has no winners and no losers. #}
Top movers
Unrealized $ change vs cost basis · open positions
{% if not top_movers.winners and not top_movers.losers %}
No priced open positions in scope.
{% else %}
▲ Winners
{% if top_movers.winners %}
{% for r in top_movers.winners %}
{{ r.symbol }}
+${{ "%.2f"|format(r.unrealized_dollar|float) }}{% if r.unrealized_pct is not none %}
({% if r.unrealized_pct > 0 %}+{% endif %}{{ "%.1f"|format(r.unrealized_pct|float) }}%)
{% endif %}
{% endfor %}
{% else %}
—
{% endif %}
▼ Losers
{% if top_movers.losers %}
{% for r in top_movers.losers %}
{{ r.symbol }}
−${{ "%.2f"|format(r.unrealized_dollar|float|abs) }}{% if r.unrealized_pct is not none %}
({{ "%.1f"|format(r.unrealized_pct|float) }}%)
{% endif %}