{
  "slug": "portfolio-rebalance",
  "title": "Portfolio Rebalancing Calculator",
  "heading": "Portfolio Rebalancing Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/portfolio-rebalance",
  "summary": "Exact dollars to move to get back to your target allocation.",
  "description": "Rebalancing forces you to sell what ran and buy what lagged. Doing it with new contributions instead of sales avoids realizing gains in a taxable account.",
  "formula": "Trade amount = Target % × Total portfolio − Current value of the sleeve.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=portfolio-rebalance",
  "inputs": [
    {
      "id": "stocks",
      "label": "Stocks value",
      "kind": "number",
      "hint": null,
      "default": 72000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "bonds",
      "label": "Bonds value",
      "kind": "number",
      "hint": null,
      "default": 18000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "cash",
      "label": "Cash value",
      "kind": "number",
      "hint": null,
      "default": 10000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "tStocks",
      "label": "Target stocks",
      "kind": "number",
      "hint": null,
      "default": 60,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "tBonds",
      "label": "Target bonds",
      "kind": "number",
      "hint": null,
      "default": 30,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "tCash",
      "label": "Target cash",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "newMoney",
      "label": "New money to add",
      "kind": "number",
      "hint": null,
      "default": 0,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "stockTrade",
      "label": "Buy (+) or sell (−) stocks",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "bondTrade",
      "label": "Buy (+) or sell (−) bonds",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "cashTrade",
      "label": "Add (+) or deploy (−) cash",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "total",
      "label": "Portfolio total after new money",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "stockNow",
      "label": "Current stock allocation",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "drift",
      "label": "Drift from target",
      "format": "percent",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Stocks value: 72000 $",
      "Bonds value: 18000 $",
      "Cash value: 10000 $",
      "Target stocks: 60 %",
      "Target bonds: 30 %",
      "Target cash: 10 %",
      "New money to add: 0 $"
    ],
    "outputs": [
      "Buy (+) or sell (−) stocks: -$12,000.00",
      "Buy (+) or sell (−) bonds: $12,000.00",
      "Add (+) or deploy (−) cash: $0.00",
      "Portfolio total after new money: $100,000.00",
      "Current stock allocation: 72.0%",
      "Drift from target: 12.0%"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter stocks value ($).",
      "Enter bonds value ($).",
      "Enter cash value ($).",
      "Enter target stocks (%).",
      "Enter target bonds (%).",
      "Enter target cash (%).",
      "Enter new money to add ($).",
      "Read your buy (+) or sell (−) stocks on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "stocks": 43000,
        "bonds": 11000,
        "cash": 6000,
        "tStocks": 35,
        "tBonds": 20,
        "tCash": 5,
        "newMoney": 0
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "stocks": 72000,
        "bonds": 18000,
        "cash": 10000,
        "tStocks": 60,
        "tBonds": 30,
        "tCash": 10,
        "newMoney": 0
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "stocks": 115000,
        "bonds": 29000,
        "cash": 16000,
        "tStocks": 95,
        "tBonds": 50,
        "tCash": 15,
        "newMoney": 0
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "How does the portfolio rebalancing calculator work?",
      "a": "Rebalancing forces you to sell what ran and buy what lagged. Doing it with new contributions instead of sales avoids realizing gains in a taxable account. The underlying maths is: Trade amount = Target % × Total portfolio − Current value of the sleeve."
    },
    {
      "q": "What do I need to enter?",
      "a": "7 values: stocks value, bonds value, cash value, target stocks, target bonds, target cash, and new money to add. Each field starts with a sensible default, so you can change one number at a time and watch the result move."
    },
    {
      "q": "What does the buy (+) or sell (−) stocks result mean?",
      "a": "It is returned as a money amount in US dollars and updates live as you edit the inputs, so you can compare two or three versions of a scenario in a few seconds."
    },
    {
      "q": "Is this calculator free, and do I need an account?",
      "a": "Yes, it's free, and no account is required. Nothing you type is stored on our servers — the maths runs entirely in your browser."
    },
    {
      "q": "How accurate is the result?",
      "a": "It applies the standard formula exactly, so the arithmetic is precise. Results are estimates before tax, fees, and inflation unless an input explicitly covers them."
    },
    {
      "q": "Who is this tool for?",
      "a": "It's built for anyone comparing money scenarios before committing — budgeting a payment, sanity-checking a quote, or seeing what a change in rate or term actually costs."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/stock-return",
    "https://www.revenuelab.fyi/toolbox/coast-fire",
    "https://www.revenuelab.fyi/toolbox/safe-withdrawal-rate"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Portfolio Rebalancing Calculator (https://www.revenuelab.fyi/toolbox/portfolio-rebalance)"
}