Loading...
Monte Carlo Discounted Cash Flow (MCDCF)
Download bundled offline version from: https://github.com/statsim/mcdcf/releasesOverview
The Monte Carlo Discounted Cash Flow (MCDCF) tool is a simulation‐based financial model designed for property investment analysis. It uses Monte Carlo techniques to create a distribution of possible future cash flows and performance metrics over the investment period. By integrating uncertainty in economic factors, property specifics, and operational variables, the tool computes key outputs such as Net Present Value (NPV), Internal Rate of Return (IRR), Before-Tax Cash Flow (BTCF), and After-Tax Cash Flow (ATCF). Users may choose between classical (deterministic) scenarios and probabilistic Monte Carlo simulations by adjusting the input parameters.
Real Estate Financial Modeling
Making a real estate investment involves uncertainty. Market conditions, economic factors, and property-specific costs can change over time, and predicting these changes can be challenging. Many investors struggle to understand how variables like inflation, economic growth, and interest rates might affect the performance of their investments.
This application solves the problem by using Monte Carlo simulations to model a wide range of possible future scenarios. It provides you with a probabilistic forecast of your investment's performance, showing potential outcomes rather than a single deterministic forecast. With this tool, you can better gauge the risks and rewards associated with a property, helping you to plan and strategize more effectively.
Main Components
Economic and Model Parameters
This block sets the simulation settings and global economic assumptions. It defines the time interval for each simulation step, the total number of steps, the number of samples (simulation runs), and the precision of the outputs.
- Economic Growth: Specifies growth rate of the economy which can be used to model rental growth across multiple income streams.
- Inflation: Defines inflation and its growth. Can be used to adjust income and expense items over time.
- Discount Rate: Rate used to discount future cash flows back to their present value.
Each income and expense item can be set to grow at a custom rate, follow global growth rate (i.e. inflation), or remain fixed. For each economic variable (economic growth, inflation, discount rate), you can choose:
- Fixed: A constant rate that remains unchanged throughout the simulation.
- Sample: A distribution of possible values that the variable might take eachh simulation step.
- Sample Once: A single value that is randomly selected at the beginning of the simulation and remains constant thereafter.
- Tabular: A custom table of values that the variable follows over time.
Property Details
Specific details about the property itself. These inputs are essential for calculating the financial dynamics of your investment:
- Property Name: Identify the property.
- Debt: Enter the debt amount, term, and annual interest rate to calculate the periodic debt service. You can also select ammortization interval (monthly or annually).
- Purchase and Sale: Input the purchase price, associated costs, sale price, and sale expenses to evaluate overall profitability.
Income Items (Rent and Other Revenue)
Income items represent revenue streams from the property. For each income item, you specify:
- Description: A brief title or name for the income source.
- Amount: The base revenue generated per period.
- Units and Occupancy: The number of revenue-generating units and the percentage of those units that are occupied.
- Interval: The frequency of updates for the income stream.
- Active Status: Toggle whether the income stream is currently active, affecting its visibility and weight in the simulation.
For both amount and occupancy you can specify a growth rate clicking arrow button on the right side of the input field.
- Amount Growth: The growth rate of the income item. Can be Fixed, Sample-based, Random Walk, Tabular or tied to Inflation.
- Occupancy Growth: The growth rate of the occupancy. Can be Fixed, Sample-based, Random Walk, Tabular or tied to Economic Growth.
Expense Items
Expenses are divided into two categories: Operating Expenses and Capital Expenses. Operating expenses are recurring costs associated with the property's day-to-day operations, while capital expenses are one-time costs that improve the property's value. For each expense item, you input:
- Description: A brief description of the expense.
- Amount: The cost per period, which can be an absolute value or a percentage relative to a target income source.
- Type and Target: Specify whether the expense is an absolute cost or relative to income, and if relative, define the target (for example, Gross Income).
- Growth Settings: Like income, set the growth type and frequency for expense changes over time.
- Active Status: Enable or disable the expense, which visually adjusts the row opacity in the data table.
Taxes
Tax settings allow you to define the tax rate and the method of calculation.
- Depreciation: Controls how the property's depreciable basis is allocated over time
- Depreciation Amount: Represents the depreciation rate or portion of the property's basis that can be depreciated on an annual basis. In many tax systems, only a specific percentage (or a portion) of the building's cost can be written off each year.
- Recovery Period: Specifies the total number of years over which the property is depreciated. For residential real estate in the US, this often defaults to 27.5 years; for commercial, it may be 39 years (or another value, depending on local regulations).
- Disposition Taxes: This block deals with taxes incurred when the property is sold
- Capital Gains Tax Rate: The tax rate applied to any capital gain realized upon selling the property—generally the difference between the net sale price and the adjusted basis (purchase price plus improvements minus depreciation).
- Recapture Tax Rate: A specific rate that applies to the portion of gains attributed to previously taken depreciation. Upon sale, tax authorities often “recapture” part of the depreciation benefit at this separate rate.
- Marginal Taxes: This block sets the ongoing income tax rate
- Marginal Tax Rate: The ordinary income tax rate that applies to the property's taxable income each period (e.g., monthly or yearly). In other words, it is the top bracket or effective rate used to calculate income taxes on the property's net operating income (after expenses, but before capital gains events)
Outputs and Reporting
Simulated Financial Projections
Once you have provided all inputs, the tool runs a series of Monte Carlo simulations. It calculates monthly values for:
- Effective Gross Income and Operating Expenses: Combined to determine the net operating income (NOI).
- Debt Service: Tracking both principal and interest components of your debt repayments.
- Cash Flows: Both before-tax (BTCF) and after-tax (ATCF) cash flows over the entire holding period.
- Internal Rate of Return (IRR): Annualized returns that reflect the investment’s performance under various scenarios.
Optimized for PDF export
Press Ctrl+P to print the report or save as PDF. The tool is optimized for PDF export, so you can easily save your project for future reference or share it with others. You can make significant adjustments on that page too.
Sharing
Share Your Project via URL
One of the features of the application is the ability to share your entire project configuration via a unique URL. When you click the "Copy Link" button, the tool compresses all your input data into a URL parameter. Recipients who open the URL will see your saved settings and simulation results without any additional setup. No servers involved on our side. Full project is encoded in the URL itself.
Import/Export uncompressed JSON config
You can also export and import your project configuration as a JSON file in Import/Export section. This feature is useful for saving your work locally or pasting outputs from LLMs. The JSON file contains all the input data and settings, allowing you to pick up where you left off at any time.
Examples for LLMs
Include following text blocks in your chats with large language models (LLMs) to make them generate MCDCF projects:
Full example:
{ "model": { "interval": "Year", "steps": 10, "samples": 1, "precision": 2, "economic_growth": { "active": true, "type": "Fixed", "initial": 2.314552484901538, "interval": "Year" }, "inflation": { "active": true, "type": "Fixed", "initial": 9.91444696610541, "interval": "Year" }, "discount_rate": { "active": true, "type": "Fixed", "initial": 7.397029901537655, "interval": "Year" } }, "property": { "name": "Downtown Office Complex", "debt": { "amount": 2000000, "term": 20, "rate": 4.5, "interval": "Month" }, "purchase": { "price": 3000000, "costs": 150000 }, "sale": { "price": "4000000", "costs": 200000 } }, "income": { "items": [ { "id": 1, "description": "Office Rental Income", "active": true, "amount": 25000, "units": 10, "occupancy": 90, "interval": "Year", "amount_growth": { "type": "Inflation", "initial": 2, "interval": "Year", "target_values": [], "growth_values": [], "factor": "1" }, "occupancy_growth": { "type": "Fixed", "initial": 0, "interval": "Year", "target_values": [], "growth_values": [] } } ] }, "expenses": { "items": [ { "id": 1, "description": "Property Management Fee", "active": true, "amount": 0.05, "type": "Relative", "target": "Gross Income", "interval": "Month", "amount_growth": { "type": "Fixed", "initial": 0, "interval": "Year", "target_values": [], "growth_values": [] } }, { "id": 2, "description": "Maintenance Expense", "active": true, "amount": 5000, "type": "Absolute", "target": "", "interval": "Month", "amount_growth": { "type": "Fixed", "initial": 1, "interval": "Year", "target_values": [], "growth_values": [] } } ] }, "capex": { "items": [ { "id": 1, "description": "Major Renovation", "active": false, "amount": 300000, "type": "Absolute", "target": "", "interval": "Year", "amount_growth": { "type": "Fixed", "initial": 0, "interval": "Year", "target_values": [], "growth_values": [] } } ] }, "taxes": { "depreciation": { "amount": 3.5, "period": 27.5 }, "marginal_tax_rate": 35, "capital_gains_tax_rate": 20, "recapture_tax_rate": 25 } }
Model
Defines how the simulation is run (time steps, number of samples, precision). Sets the behavior of economic variables (economic growth, inflation, and discount rate). Each variable can be fixed (deterministic) or configured to vary stochastically (e.g., random walk, sample-based).
Key Fields
- interval: The size of each simulation step (Year, Quarter, Month).
- steps: How many steps to simulate (e.g., 10 years).
- samples: Number of simulation runs. 1 means classical (no Monte Carlo).
- precision: Decimal places for results.
- economic_growth / inflation / discount_rate:
- active: Whether this variable is used in the model.
- type: Growth type (Fixed, Random Walk, Sample, Tabular, etc.).
- initial: Starting rate or value.
- interval: How often the rate updates (Year, Quarter, etc.).
Possible Variations
- Monte Carlo: Increase samples above 1 and set the type of a variable to Random Walk or Sample, adding fields like mean, std, and df.
- Tabular: Provide a step-by-step sequence in growth_values for inflation or other variables.
- Shorter/Longer Horizons: Change steps to model fewer or more periods.
Property
Contains property-level details: identification, financing (debt), purchase, and sale information. Helps compute debt service and net proceeds at sale.
Key Fields
- name: A label for the property (e.g., "Downtown Office Complex").
- debt:
- amount: Principal borrowed.
- term: Loan term in years.
- rate: Annual interest rate.
- interval: Payment interval (Month, Year, etc.).
- purchase:
- price: Acquisition cost.
- costs: Additional fees or closing costs.
- sale:
- price: Anticipated sale price (can be numeric or string).
- costs: Selling costs.
Possible Variations
- Cash Purchase: Set debt.amount to 0 if no financing is involved.
- Shorter Loan: Decrease debt.term or increase rate.
- Larger/Smaller Deal: Adjust purchase.price and sale.price to reflect bigger or smaller transactions.
Income
Describes one or more revenue streams from the property (e.g., rent, parking fees). Each item can have its own base amount, growth settings, and occupancy.
Key Fields
- description: Short label for the income source.
- amount: Base revenue per interval (e.g., $25,000/year).
- units: Number of revenue-generating units (e.g., 10 office suites).
- occupancy: Percentage of units occupied.
- interval: Frequency of the income calculation (Month, Quarter, Year).
- amount_growth and occupancy_growth:
- type: Growth approach (Inflation, Fixed, Random Walk, etc.).
- initial: Starting growth rate or offset.
- interval: Update frequency for growth.
- target_values/growth_values: Used if the type is Tabular.
- Active Status: Toggle whether the income stream is currently active, affecting its visibility and weight in the simulation.
For both amount and occupancy you can specify a growth rate by clicking the arrow button on the right side of the input field.
- Amount Growth: The growth rate of the income item. Can be Fixed, Sample-based, Random Walk, Tabular or tied to Inflation.
- Occupancy Growth: The growth rate of the occupancy. Can be Fixed, Sample-based, Random Walk, Tabular or tied to Economic Growth.
Possible Variations
- Seasonal Occupancy: Use Tabular for occupancy_growth.
- Randomized Rent Growth: Switch amount_growth.type to Sample or Random Walk and specify mean, std.
- Multiple Income Sources: Add more items with unique descriptions and amounts.
Expenses
Outlines operational costs of the property. Each expense can be absolute (fixed dollar) or relative (percentage of a target like Gross Income). Growth can be modeled similarly to income items.
Key Fields
- description: A brief description of the expense.
- amount: The cost per period, which can be an absolute value or a percentage if the type is Relative.
- type and target: Specify whether the expense is an absolute cost or relative to income, and if relative, define the target (for example, Gross Income).
- interval: How frequently the expense is calculated.
- amount_growth: Growth model for this expense.
- Active Status: Enable or disable the expense, which visually adjusts the row opacity in the data table.
Possible Variations
- Inflation-Linked Costs: Set amount_growth.type to Inflation.
- Stochastic Expenses: Use Random Walk or Sample to simulate uncertain costs.
- Relative to Net Operating Income: Change target to Net Operating Income for some expenses.
Capex
Represents capital expenditures (major improvements or renovations). These costs are treated separately from operating expenses and are often excluded from Net Operating Income (NOI).
Key Fields
- amount: The cost of the capital project.
- type: Usually "Absolute", though relative capex is possible.
- interval: The period in which this expenditure occurs or is updated.
- amount_growth: If capex is expected to change over time or if multiple capex outlays occur.
Possible Variations
- Planned Upgrades: Set active to true for a specific year, or use Tabular if the cost is phased over multiple steps.
- Stochastic Renovation Cost: Switch amount_growth.type to Random Walk or Sample.
Taxes
Tax settings allow you to define the tax rate and the method of calculation. These settings apply during both the holding period (marginal tax on income) and at disposition (capital gains and depreciation recapture).
Key Fields
- depreciation.amount: Annual percentage of the property basis that is depreciable.
- depreciation.period: Recovery period in years.
- marginal_tax_rate: Rate applied to ongoing taxable income.
- capital_gains_tax_rate: Rate applied to the capital gain at sale.
- recapture_tax_rate: Rate for recapturing depreciation at sale.
Possible Variations
- No Depreciation: Set depreciation.amount to 0.
- Different Tax Regimes: Adjust marginal_tax_rate, capital_gains_tax_rate, and recapture_tax_rate to reflect local tax laws.
- Shorter Depreciation Period: Lower depreciation.period if local rules allow accelerated depreciation.