No portfolios yet.
-Use the API or generate_report command to get started.
Use the API to create a portfolio and add holdings.
Market Value
-- {{ p.base_currency }} {{ s.total_market_value|floatformat:2 }} -
+Total Value
+$ {{ s.total_value|floatformat:2 }}
Cost Basis
-- {{ p.base_currency }} {{ s.total_cost|floatformat:2 }} -
+$ {{ s.total_cost|floatformat:2 }}
Unrealized P&L
-- {% if s.total_unrealized_pnl >= 0 %}+{% endif %}{{ s.total_unrealized_pnl|floatformat:2 }} +
P&L
++ {% if s.total_pnl >= 0 %}+{% endif %}{{ s.total_pnl|floatformat:2 }}
Return
-- {% if s.total_unrealized_pnl_pct >= 0 %}+{% endif %}{{ s.total_unrealized_pnl_pct|floatformat:2 }}% +
+ {% if s.total_pnl_pct >= 0 %}+{% endif %}{{ s.total_pnl_pct|floatformat:2 }}%
| Ticker | -Shares | +Stock | +Qty | Avg Cost | -Price | -Market Value | +Current | +Value | P&L | -Day % | +P&L % |
|---|---|---|---|---|---|---|---|---|---|---|---|
|
- {{ stock.ticker }}
- {% if stock.exchange %}{{ stock.exchange }}{% endif %}
- {% if stock.company_name %} {{ stock.company_name }} {% endif %}
+ {{ stock.stock_code }}
|
- {{ stock.shares_held|floatformat:4 }} | -{{ stock.avg_cost|floatformat:4 }} | +{{ stock.quantity|floatformat:2 }} | +$ {{ stock.avg_cost|floatformat:2 }} | - {% if stock.current_price %}{{ stock.current_price|floatformat:4 }}{% else %}–{% endif %} + {% if stock.current_price > 0 %} + $ {{ stock.current_price|floatformat:2 }} + {% else %} + – + {% endif %} | -{{ stock.market_value|floatformat:2 }} | +$ {{ stock.current_value|floatformat:2 }} |
{% if stock.unrealized_pnl >= 0 %}+{% endif %}{{ stock.unrealized_pnl|floatformat:2 }}
- {% if stock.unrealized_pnl_pct >= 0 %}+{% endif %}{{ stock.unrealized_pnl_pct|floatformat:2 }}%
|
- - {% if stock.change_percent is not None %} - - {% if stock.change_percent >= 0 %}+{% endif %}{{ stock.change_percent|floatformat:2 }}% - - {% else %}–{% endif %} + | + {% if stock.unrealized_pnl_pct >= 0 %}+{% endif %}{{ stock.unrealized_pnl_pct|floatformat:2 }}% |
Account: {{ portfolio.account_id }}
- {% endif %} - {% if portfolio.description %} -{{ portfolio.description }}
- {% endif %} -Market Value
-{{ summary.total_market_value|floatformat:2 }}
-{{ portfolio.base_currency }}
-Cost Basis
-{{ summary.total_cost|floatformat:2 }}
-{{ portfolio.base_currency }}
-Unrealized P&L
-- {% if summary.total_unrealized_pnl >= 0 %}+{% endif %}{{ summary.total_unrealized_pnl|floatformat:2 }} -
-- {% if summary.total_unrealized_pnl_pct >= 0 %}+{% endif %}{{ summary.total_unrealized_pnl_pct|floatformat:2 }}% -
-Holdings
-{{ summary.stocks|length }}
-active positions
-Portfolio #{{ portfolio.id }}
| Stock | -Shares | -Avg Cost | -Current | -Mkt Value | -P&L | -Day | -
|---|---|---|---|---|---|---|
|
-
- {{ stock.ticker }}
- {% if stock.exchange %}{{ stock.exchange }}{% endif %}
-
- {% if stock.company_name %}
- {{ stock.company_name }}
- {% endif %}
- |
- {{ stock.shares_held|floatformat:4 }} | -{{ stock.avg_cost|floatformat:4 }} | -- {% if stock.current_price %}{{ stock.current_price|floatformat:4 }}{% else %}–{% endif %} - | -{{ stock.market_value|floatformat:2 }} | -
-
- {% if stock.unrealized_pnl >= 0 %}+{% endif %}{{ stock.unrealized_pnl|floatformat:2 }}
-
-
- {% if stock.unrealized_pnl_pct >= 0 %}+{% endif %}{{ stock.unrealized_pnl_pct|floatformat:2 }}%
-
- |
- - {% if stock.change_percent is not None %} - - {% if stock.change_percent >= 0 %}+{% endif %}{{ stock.change_percent|floatformat:2 }}% - - {% else %}N/A{% endif %} - | -
| No holdings with shares > 0 | -||||||
Total Value
+$ {{ summary.total_value|floatformat:2 }}
+Cost Basis
+$ {{ summary.total_cost|floatformat:2 }}
+P&L
++ {% if summary.total_pnl >= 0 %}+{% endif %}{{ summary.total_pnl|floatformat:2 }} +
+Return
++ {% if summary.total_pnl_pct >= 0 %}+{% endif %}{{ summary.total_pnl_pct|floatformat:2 }}% +
| Stock | +Qty | +Avg Cost | +Current | +Value | +P&L | +P&L % | +
|---|---|---|---|---|---|---|
| + {{ stock.stock_code }} + | +{{ stock.quantity|floatformat:2 }} | +$ {{ stock.avg_cost|floatformat:2 }} | ++ {% if stock.current_price > 0 %} + $ {{ stock.current_price|floatformat:2 }} + {% else %} + – + {% endif %} + | +$ {{ stock.current_value|floatformat:2 }} | ++ {% if stock.unrealized_pnl >= 0 %}+{% endif %}{{ stock.unrealized_pnl|floatformat:2 }} + | ++ {% if stock.unrealized_pnl_pct >= 0 %}+{% endif %}{{ stock.unrealized_pnl_pct|floatformat:2 }}% + | +
No holdings in this portfolio.
+- Period: {{ report.period_start }} – {{ report.period_end }} - {% if report.portfolio %} - · {{ report.portfolio.name }} - {% endif %} -
-Generated {{ report.generated_at|date:"M d, Y H:i" }}
-{{ report.valuation_snapshot }}
- Weekly and manual performance reports.
-No reports generated yet.
-Run python manage.py generate_report to create one.
- {{ report.period_start }} – {{ report.period_end }} - {% if report.portfolio %} - · {{ report.portfolio.name }} - {% endif %} -
-{{ report.content|truncatechars:200 }}
- {% endif %} - - {% endfor %} -Transaction History
+| Date | -Type | -Stock | -Shares | -Price | -Fee | -Total | -Source | -Notes | +||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Date | +Action | +Stock | +Qty | +Price | +Total | |||||||
| {{ tx.date }} | -- {% if tx.tx_type == 'BUY' %} - BUY - {% else %} - SELL - {% endif %} + | |||||||||||
| {{ tx.date|date:"Y-m-d" }} | ++ + {{ tx.action }} + | -- {{ tx.stock.ticker }} - {% if tx.stock.exchange %}{{ tx.stock.exchange }}{% endif %} - | -{{ tx.shares|floatformat:4 }} | -{{ tx.price_per_share|floatformat:4 }} | -{{ tx.fee|floatformat:2 }} | -- {{ tx.shares|floatformat:4 }}×{{ tx.price_per_share|floatformat:4 }} - | -- {{ tx.source }} - | -{{ tx.notes }} | -||||
| No transactions recorded yet. | +{{ tx.stock_code }} | +{{ tx.quantity|floatformat:2 }} | +$ {{ tx.price_per_share|floatformat:2 }} | +$ {{ tx.total|floatformat:2 }} | ||||||||
No transactions in this portfolio.
+