OpenStocky logoOpenStocky
0 days (0.0y)·
0 txns

Help

Details on OpenStocky features and how each KPI is calculated.

Features

Transactions

  • Single entry: Add one buy or sell at a time — date, symbol, shares, price per share, and fees. The total transaction cost (shares × price + fees for buys; shares × price − fees for sells) is computed automatically.
  • Batch upload: Paste CSV data with columns: Transaction Date, Transaction Type, Symbol, Shares, Price per Share, Fees. Use comma or tab separators. Choose "Add to current" to append, or "Override" to replace all transactions.
  • Cost basis: Buys add to cost basis; sells use FIFO (first-in, first-out) to compute realized gains. Transactions are automatically sorted by date before processing.
  • Short-sell protection: Sell transactions are clamped so you cannot sell more shares than you currently hold for a given symbol.
  • Edit & Delete: In the Transaction History table — Desktop: swipe a row left to reveal Edit and Delete buttons; Mobile: long-press (1.5 seconds) on a row to open a popup with Edit and Delete options. Tap Edit to update any field (date, type, symbol, shares, price, fees); tap Delete to remove the transaction. Useful for correcting typos or removing erroneous entries.

Holdings

Holdings are derived from transactions: buys increase shares and cost basis; sells reduce shares and proportionally reduce cost basis (avg cost method). Unrealized P/L = (current price × shares) − total cost. Each holding also displays Total Return (unrealized P/L + realized gains from sold shares), computed using FIFO lot matching, so you can see the full picture of each position's performance. A subtext under the table title shows position count and total portfolio value.

Trade History

The History tab lists every symbol you have traded — including positions with no selling activity yet. For each symbol it shows:

  • Status: "Closed" (all shares sold), "Partial" (some sold, some still held), or "Open" (only buys so far; no sells).
  • Avg Buy / Avg Sell: Volume-weighted average price per share. Avg Sell shows "—" for open positions.
  • Cost (sold) / Proceeds: Cost (sold) is the FIFO cost basis of the shares you sold (what you invested in those shares). Proceeds is what you received from those sales (after fees). Both show "—" for open positions.
  • Realized P/L: FIFO-based profit or loss from sold shares, including fees. Open positions show "—" (no realized P/L yet).
  • Duration: From first buy to last sell (or "so far" for open positions). Also shows total trade count (buys + sells).

The subtext under the title summarizes total realized P/L and counts (closed, partial, open). Use the status filter (All / Closed / Partial / Open) to focus on specific position types.

Market Performance

The Market tab shows recent price performance and fundamentals for every stock you hold. Data is fetched from Yahoo Finance using daily closing prices and real-time quote data. The subtext under the title shows how many holdings are included.

  • 1D / 7D / 1M: Price change (absolute and percentage) over the last 1 day, 7 days, and ~21 calendar days respectively. 7D and 1M are computed from daily historical closing prices.
  • P/E: Trailing price-to-earnings ratio — current price divided by earnings per share over the last 12 months. Not available for ETFs or companies with negative earnings.
  • 52W Range: Visual bar showing where the current price sits between the 52-week low and high. Green near highs, red near lows. Hover for exact values.
  • Mkt Cap: Total market capitalization of the company.
  • Div Yield: Trailing annual dividend yield as a percentage of the current price. Shows "—" for non-dividend-paying stocks.

Live Prices

Stock prices come from Yahoo Finance via the yahoo-finance2 library. No API key is required. All symbols are fetched in a single batch call with no rate limits or daily caps. Prices are cached for 60 seconds.

Export CSV

Click Export CSV in the header to download all your transactions as a CSV file. This is useful for backing up your data, sharing records with an accountant, or migrating to another tool. The exported file uses the same column format as the batch upload (Transaction Date, Transaction Type, Symbol, Shares, Price per Share, Fees), so you can re-import it later via batch upload — for example, after editing in a spreadsheet.

Charts

Portfolio Growth

Area chart tracking net invested capital (blue) vs portfolio value (green) over the last 24 months. The gap between the two lines represents unrealized gain or loss. Monthly snapshots are derived from transaction history; portfolio value uses actual monthly closing prices from Yahoo Finance. The current month uses live prices. Months without historical data fall back to the nearest available price or cost basis.

Portfolio Allocation

Donut chart showing the percentage weight of your portfolio by market value. Switch between three perspectives via the filter: Holdings — top 10 positions displayed individually, smaller holdings grouped as "Other"; Sector — allocation aggregated by company sector (e.g. Technology, Healthcare); Region — allocation aggregated by company country (e.g. United States, China). Helps visualize concentration and diversification at a glance from different angles.

P/L Attribution

Horizontal bar chart showing each position's total return (unrealized + realized gains), sorted from best to worst. Includes profits from shares you've already sold. Green bars represent gains, red bars represent losses. Hover for a breakdown of unrealized and realized components. Up to 20 positions are displayed. This chart instantly reveals which holdings are driving portfolio performance and which are dragging it down — a staple of institutional portfolio reporting.

Weight vs Return

Scatter plot where each position is a bubble. The x-axis represents portfolio weight (allocation), the y-axis represents total return % (unrealized + realized), and bubble size reflects position value. A dashed line at 0% separates winners from losers. Positions in the top-right quadrant are large and profitable (ideal); bottom-right are large losers that may need attention; top-left are small winners you could consider sizing up.

Tip: Hover over the (i) icon next to each chart title for a quick explanation of what the chart shows.

How KPIs Are Calculated

Portfolio Value

Sum of (shares × current price) for all holdings. Uses live prices when available; otherwise $0.

Net Invested

Total cost of all buy transactions minus total proceeds from all sell transactions. Represents capital currently at risk.

Unrealized P/L

Portfolio value minus total cost basis of open positions. Percentage = (unrealized P/L ÷ total cost) × 100.

Realized P/L

Gains/losses from closed positions. Each sell is matched with buys using FIFO: realized gain = (sell price − buy cost per share) × shares − fees.

Total Return

Unrealized P/L + Realized P/L. Total profit or loss across all positions (open and closed).

Total Return (per symbol)

Shown in the Holdings table's "Total Return" column. For each holding: unrealized P/L on the current position + realized gains/losses from shares already sold (FIFO). Percentage = total return ÷ total capital ever bought for that symbol. This metric captures the complete picture for positions where you have partially taken profits.

IRR (Internal Rate of Return)

Money-weighted annualized return. Uses Newton-Raphson to find the discount rate that makes NPV of cash flows (buys = negative, sells = positive, current portfolio value = final positive flow) equal to zero. Accounts for timing and size of contributions and withdrawals.

CAGR (Compound Annual Growth Rate)

(Portfolio value ÷ net invested)1/years − 1, expressed as %. Net invested = total buys − total sell proceeds, representing actual capital at risk. Years = days since first transaction ÷ 365.25. If net invested ≤ 0 (you have withdrawn more than you put in), CAGR shows ∞.

Sharpe Ratio

(IRR − 5%) ÷ annualized volatility. Uses IRR as the annualized return and 5% as risk-free proxy. Higher = better risk-adjusted return. Requires at least 3 months of history.

Volatility

Annualized standard deviation of monthly portfolio returns, computed using the Modified Dietz method to account for cash flows (buys and sells). Monthly return = (Vend − Vstart − CF) ÷ (Vstart + 0.5 × CF), then annualized by multiplying by √12. Requires historical prices.

Win Rate

(Number of profitable positions ÷ total positions) × 100. Includes both open positions (unrealized P/L) and closed trades (realized P/L from sells).

Profit Factor

Sum of gains from winners ÷ sum of losses from losers, across both open and closed positions. > 1 means profits exceed losses.

Risk/Reward Ratio

Average win ÷ average loss, including both open and closed positions.

HHI (Herfindahl-Hirschman Index)

Sum of (weight %)2 for each holding. Ranges 0–10000. 0–1500 = diversified; 1500–2500 = moderate; 2500+ = concentrated.

Top 5 Concentration

(Value of top 5 holdings ÷ portfolio value) × 100. Share of portfolio in largest positions.

Beta

Value-weighted average of per-stock betas fetched from Yahoo Finance. Each holding's beta is weighted by its share of portfolio value. Stocks without beta data default to 1.0 (market average). A portfolio beta above 1 suggests higher volatility than the market; below 1 suggests lower.

Capital Efficiency

(Portfolio value ÷ total capital ever deployed in buys) × 100. > 100% means gains exceed invested capital.

© 2026 OpenStocky