Total Value ? Current market value of all holdings. Shares × live price from Yahoo Finance.
{fmtShort(totalValue)}
Total Cost ? Total amount invested — sum of cost basis × shares across all positions.
{fmtShort(totalCost)}
Total G/L ? Total unrealised gain or loss — Total Value minus Total Cost.
{fmtShort(totalGL)}

Holdings — Hold / Sell / Add Advice

{#each sorted as a} {@const isEditing = editing?.ticker === a.ticker} {/each}
toggleSort('ticker')}>Ticker {sortIcon('ticker')} toggleSort('type')}>Type {sortIcon('type')} toggleSort('shares')}>Shares {sortIcon('shares')} toggleSort('cost')}>Cost {sortIcon('cost')} toggleSort('current')}>Current {sortIcon('current')} toggleSort('value')}>Value {sortIcon('value')} toggleSort('gl')}>G/L {sortIcon('gl')} toggleSort('signal')}>Signal {sortIcon('signal')} AdviceReason
{a.ticker} {#if isEditing && editing} {:else} {a.type} {/if} {#if isEditing && editing} {:else} {a.shares} {/if} {#if isEditing && editing} {:else} {fmt(a.costBasis)} {/if} {fmt(a.currentPrice != null ? parseFloat(a.currentPrice) : null)} {fmt(a.marketValue != null ? parseFloat(a.marketValue) : null)} {a.gainLossPct != null ? a.gainLossPct + '%' : '—'} {#if a.signal}{:else}{/if} {a.advice} {a.reason} {#if isEditing} {:else} {/if}