Enter your holdings, target percents, and new cash to see what to buy, sell, or fund without selling.
| Asset | Current | Target | Drift | Planned action |
|---|
Table of contents
How to use our Portfolio Rebalancing Calculator
- Choose a Rebalancing plan: use Trade buys and sells for a full rebalance, or Use new cash only if you want a plan with no sell trades.
- Enter New cash to add and your Rebalance alert band. Use 0 for new cash if you are only rebalancing the money already invested.
- Fill in Assets, current values, and target percents. Add each asset or bucket, its current dollar value, and its target percent. The target percents must total 100%.
- Click Calculate, then read the first result card for the main answer. In cash-only mode, check Extra cash needed for a no-sell target match before reading the trade list.
- Sanity-check the output: assets above target should usually show sells in full trade mode, while cash-only mode should show only buys or holds.

Definitions
Rebalancing: Adjusting a portfolio back toward the mix of investments you chose as your target [1].
Target percent: The percent of the final portfolio that you want one asset or bucket to hold.
Current percent: The percent of today's portfolio value held in one asset before adding new cash.
Drift: The difference between current percent and target percent, measured in percentage points. Positive drift means the asset is above target.
Rebalance alert band: The allowed drift before an asset is counted as outside your band. A 5 percentage-point band means 66% is outside a 60% target, but 65% is not.
No-sell target match: A portfolio that reaches every target percent using only added cash, with no current holding sold.
Common mistakes and quick fixes
Mistake: Entering targets in Assets, current values, and target percents that add to 99% or 101%.
Fix: Adjust the target percents until they total 100% within the calculator tolerance.
Mistake: Typing a withdrawal as a negative number in New cash to add .
Fix: Enter 0 or a positive deposit amount; this calculator does not model withdrawals.
Mistake: Choosing Use new cash only under Rebalancing plan and expecting sell trades in the Buy, sell, or hold list by asset .
Fix: Switch to Trade buys and sells if you want the calculator to recommend sells.
Mistake: Using 0 in Rebalance alert band when you only want alerts for larger drifts.
Fix: Enter the band in percentage points, such as 5 for a 5 percentage-point alert band.
Mistake: Reading Total dollars in buy and sell trades as new money required.
Fix: Treat it as total trading movement; sell dollars and buy dollars are both counted as positive movement.
Mistake: Ignoring Extra cash needed for a no-sell target match when using cash-only mode.
Fix: If it is above $0, the entered deposit cannot fully fix the targets without selling at least one holding.
Limitations & Key Assumptions / Boundary Conditions
- The calculator uses dollar values you enter. It does not pull live prices, share counts, or broker data.
- Taxes, trading fees, bid-ask spreads, fund minimums, and whole-share limits are not included.
- Cash-only mode can show that an exact no-sell match is impossible if an asset has a 0% target and a positive current value.
- The alert band is only a math flag. It is not a recommendation to trade, and it does not account for your tax situation or risk tolerance.
- New cash must be $0 or a positive deposit. Withdrawals and sell-only rebalancing are outside this calculator.
- Targets must add to 100% within 0.01 percentage points. This small tolerance avoids blocking harmless decimal rounding.
Methodology
Core portfolio math
The calculator starts by adding the current dollar values for all asset rows.
V = sum(current_value_i)
Each target percent is converted to a decimal share.
p_i = target_percent_i / 100
The current percent and drift for each asset are then calculated before any new cash is added.
current_percent_i = 100 * current_value_i / V
drift_i = current_percent_i - target_percent_i
Trade buys and sells plan
In full trade mode, new cash is included first. The final target dollar value is based on the portfolio after that cash is added.
F = V + C
target_value_i = p_i * F
trade_i = target_value_i - current_value_i
Positive trade amounts are buys. Negative trade amounts are sells. The total trading movement counts both sides as positive dollars.
total_dollars_to_trade = sum(abs(trade_i))
Use new cash only plan
Cash-only mode first checks how much total portfolio value would be needed so every current holding can stay in place without being above its target share.
cash_only_extra_needed = max(0, max(current_value_i / p_i - (V + C))) for p_i > 0
If an asset has a 0% target and a positive current value, an exact no-sell match cannot be reached with cash alone because that asset would have to be sold.
The calculator assigns entered cash only to assets that are below their target dollar values after including the entered cash. If the entered cash is not enough for an exact match, the cash is split in proportion to each below-target asset's dollar shortfall.
shortfall_i = max(0, p_i * (V + C) - current_value_i)
buy_i = C * shortfall_i / sum(shortfall_i)
If the shortfall total is 0, the planned buy is $0 for every listed asset.
final_percent_i = 100 * (current_value_i + buy_i) / (V + C)
largest_drift_after_cash_only_pct_points = max(abs(final_percent_i - target_percent_i))
Alert band count
The calculator counts an asset as outside your band only when the absolute current drift is greater than the entered band. If the drift equals the band exactly, it is not counted.
assets_outside_alert_band = count(abs(drift_i) > threshold_percent)
Mini-example
Suppose stocks are $7,000, bonds are $3,000, both targets are 50%, and new cash is $1,000. The current portfolio value is $10,000, so stocks are 70% and bonds are 30%. In cash-only mode, the final value after the entered cash is $11,000. Stocks would still be $7,000, or 63.64%, so the largest remaining drift is 13.64 percentage points. To make $7,000 exactly equal 50% without selling, the total portfolio would need to be $14,000, so the extra cash needed beyond the entered $1,000 is $3,000.