Portfolio Planning Tool

Custom Asset Allocation Planner

Enter holdings in a single currency, choose your own target weights, and compare current exposure with mechanical amounts needed to reach those targets. No live quotes, suitability assessment or trade execution.

12 Asset Classes
CSV/JSON Import
Local Calculation

Illustrative Template Settings

Illustrative middle-equity template

Loads a normalized example; horizon does not change targets

Prices are manual inputs in one currency (USD labels); no FX conversion or broker connection. Templates are examples, not recommendations. Min/max bands flag drift; analysis computes the full change to target regardless of those bands.

Add Asset

Holdings

0 assets

Total Value

$0.00

No assets yet

Add assets manually or import from a CSV/JSON file

A Worksheet for Your Own Allocation Targets

Asset allocation divides portfolio value across categories. This planner measures the difference between manually entered holdings and targets you choose. It does not evaluate whether a target is appropriate, forecast an asset class’s return or select investments.

Build a Consistent Input Set

  1. Choose one valuation date and currency. Enter each holding’s quantity and price in that currency. The interface uses USD labels and performs no FX conversion; tickers are labels, not live quote requests.
  2. Assign every holding to one of the twelve categories. A multi-asset fund needs a deliberate classification; the planner does not look through fund holdings. Short positions, borrowing and derivative notionals are not supported.
  3. Create targets totaling 100%. Include every held class, even if its target is zero. Keep min ≤ target ≤ max for each class. An example template is a starting worksheet, not personalized advice.
  4. Review current minus target weight in percentage points. Amount to target = portfolio value × absolute weight difference / 100. Increase and Decrease are mechanical directions, not trade recommendations.
  5. Check taxes, fees, liquidity and whole-share rounding separately. A deposit or withdrawal changes total value and requires recalculation. To update a holding’s price in this version, remove it and re-add it; importing again appends another holding.

Constructed example: a $10,000 portfolio has $7,000 stocks and $3,000 bonds. A 60/40 target implies decreasing stocks by $1,000 and increasing bonds by $1,000 before costs. The one-way amount is $1,000; adding both legs would report $2,000 of gross transactions.

CSV and JSON Contract

CSV headers: Name,Ticker,Quantity,Price,Asset Class. Name, Quantity and Price are required. Quoted commas, escaped quotes and line breaks are supported. Quantity must be positive; price may be zero but cannot be negative. Each holding value is capped at $1 trillion, with at most 2,000 holdings and a 2 MiB import file. All invalid rows are rejected together.

JSON example (constructed):

[{"name":"Example holding","ticker":"EXAMPLE","quantity":10,"price":25.5,"assetClass":"stocks_us"}]

Class IDs: stocks_us, stocks_intl, stocks_emerging, bonds_govt, bonds_corp, bonds_intl, real_estate, commodities, gold, crypto, cash, other. An omitted class becomes other; an unknown supplied ID is rejected. Name and ticker are text. A market-value column cannot replace price per unit. Successful imports append; they do not merge or deduplicate accounts.

How Templates and Storage Behave

The template calculation takes category-range midpoints, splits stocks 60% US and 40% international, and bonds 60% government and 40% corporate, then normalizes the resulting six targets to 100%. Emerging markets and other categories can be added manually. Horizon is a saved note only; changing it does not alter targets or calculate risk.

Min/max bands mark drift in the target table. The analysis independently computes all exact-target changes, including small differences. Valid 100% targets covering every held class are required so increases and decreases balance before costs. This is a static worksheet, not an order generator.

Holdings and valid targets are saved in this browser’s localStorage when available. A storage error is visible and calculations can continue in the tab. Corrupt saved data is not silently overwritten. Reset All clears the plan; clearing browser data also removes it. CSV exports holdings only, including class IDs, so record targets separately. Local storage is not an encrypted vault or a cloud backup.

Asset labels are not risk ratings: long-duration government bonds can be volatile, corporate bonds can default, real estate and equities can fall together, and money market funds differ from insured deposits. This planner makes no expected-return claim. See SEC Investor.gov’s allocation guidance and money market fund risks.

Frequently Asked Questions

What does the planner calculate?

It multiplies each manually entered quantity by its price, groups values into twelve asset classes, and compares current weights with your targets. It does not retrieve prices, verify tickers, convert currencies or execute trades.

How do the example templates work?

Each template takes the midpoint of its category ranges, splits equity and bond buckets 60/40 between the listed subclasses, then normalizes all targets to 100%. Names such as Conservative describe illustrative relative exposures, not a validated suitability decision. The horizon selector is saved as a note and does not change the arithmetic.

Why is analysis unavailable?

You need a positive portfolio value, unique finite target weights totaling 100%, min ≤ target ≤ max, and a target for every held asset class. Use a zero target for a class you intend to remove. Incomplete targets are not interpreted as a funded rebalance.

Do the min/max bands decide which trades to make?

No. They mark whether current weight is inside your chosen range. The analysis shows the full amount to reach each exact target. It does not apply a hidden 2-percentage-point trigger. Costs, taxes, whole shares and minimum trade sizes are not modeled.

What is the import format?

CSV requires Name, Quantity and Price headers; Ticker and Asset Class are optional. Use the documented class IDs, not fund categories inferred from a ticker. JSON accepts an array or an object with an assets array, with name, quantity, price, optional ticker and assetClass. Invalid rows reject the entire import; successful imports append and do not deduplicate holdings.

Where are holdings stored?

The planner reads files and calculates in the browser, and attempts to save holdings and targets in this browser’s localStorage. It does not submit holdings to a portfolio API. Local storage is not encrypted account storage or a cloud backup; other users of the browser profile can access it. Storage failure is reported. Reset All replaces the saved plan with an empty one.

What does CSV export preserve?

It exports all holdings, their class IDs and unrounded numeric quantities/prices. It does not export targets, template selection or horizon. Spreadsheet formula-like text is prefixed for safety. Keep separate records of your target policy, and avoid treating browser storage as your only copy.

Research Your Portfolio Assumptions

Use Pineify Finance Agent to investigate financial data and document questions about holdings. This worksheet does not connect its saved targets to broker orders or TradingView alerts.