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
- 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.
- 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.
- 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.
- 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.
- 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.