Calculate the Money Weighted Rate of Return (MWRR) for your investment portfolio. Essential for understanding the true performance considering your cash flow decisions.
Calculate MWRR
The starting value of your portfolio.
The value of your portfolio at the end of the period.
Sum of all money added to the portfolio during the period.
Sum of all money taken out of the portfolio during the period.
Duration of the investment period for which MWRR is calculated.
Your Results
Money Weighted Rate of Return (MWRR):–
Total Profit/Loss:–
Net Cash Flow:–
Average Annual Cash Flow:–
Formula Explanation: The Money Weighted Rate of Return (MWRR) is essentially the Internal Rate of Return (IRR) of the investment. It calculates the rate of return that equates the present value of all cash inflows to the present value of all cash outflows, considering the timing and magnitude of each cash flow. For a simplified annual calculation, it's often approximated using the formula: (Ending Value – Beginning Value – Net Contributions) / (Beginning Value + Average Annual Contributions). A more precise calculation involves solving for the rate 'r' in the equation that balances the initial investment with all subsequent cash flows and the final value. This calculator uses an iterative approach to find the IRR, which is the most accurate method for MWRR.
Investment Growth Over Time
Visualizing portfolio value with and without the impact of cash flows.
Investment Period Data
Summary of portfolio values and cash flows over the period.
Metric
Value
Initial Investment
–
Ending Investment
–
Total Contributions
–
Total Withdrawals
–
Net Cash Flow
–
Investment Period (Years)
–
Money Weighted Rate of Return (MWRR)
–
What is Money Weighted Rate of Return?
The Money Weighted Rate of Return, often abbreviated as MWRR, is a performance measure for investments that accounts for the timing and size of all cash flows into and out of a portfolio. Unlike time-weighted rate of return (TWRR), which removes the impact of cash flows to isolate manager performance, MWRR reflects the investor's actual experience. It is essentially the internal rate of return (IRR) of the investment portfolio.
Who should use it? MWRR is particularly useful for individual investors and portfolio managers who want to understand the return on the actual capital invested. If you've made significant contributions or withdrawals during the investment period, MWRR provides a more accurate picture of how those decisions have influenced your overall investment outcome. It helps answer the question: "How well did my money perform, given when I put it in and took it out?"
Common Misconceptions: A common misunderstanding is that MWRR is the same as time-weighted rate of return. While both measure investment performance, they do so from different perspectives. MWRR is sensitive to the timing and amount of cash flows, meaning a large contribution just before a period of strong growth will boost MWRR, while a large withdrawal before a downturn will lower it. TWRR, on the other hand, aims to measure the performance of the underlying investment strategy independent of investor actions.
Money Weighted Rate of Return Formula and Mathematical Explanation
The Money Weighted Rate of Return (MWRR) is calculated by finding the internal rate of return (IRR) that discounts all cash flows and the final portfolio value to zero, relative to the initial investment. In essence, it's the discount rate 'r' that satisfies the following equation:
r = Money Weighted Rate of Return (the unknown we solve for)
t = Time period for contributions (usually measured in years or fractions thereof)
di = Time period for withdrawals (usually measured in years or fractions thereof)
T = Total time period of the investment
For a simplified annual approximation, especially when cash flows are distributed evenly, a common formula is:
MWRR ≈ (Ending Value – Beginning Value – Net Contributions) / (Beginning Value + Average Annual Contributions)
Variable Explanations & Table:
Variable
Meaning
Unit
Typical Range
Initial Investment Value (B)
The starting value of the portfolio at the beginning of the period.
Currency ($)
≥ 0
Ending Investment Value (E)
The value of the portfolio at the end of the period.
Currency ($)
≥ 0
Total Contributions (C)
The sum of all money invested into the portfolio during the period.
Currency ($)
≥ 0
Total Withdrawals (W)
The sum of all money taken out of the portfolio during the period.
Currency ($)
≥ 0
Net Contributions (NC)
Total Contributions minus Total Withdrawals (C – W). Represents the net amount of investor capital added.
Currency ($)
Can be negative, zero, or positive.
Investment Period (T)
The duration of the investment period in years.
Years
> 0
Money Weighted Rate of Return (MWRR)
The annualized rate of return that accounts for the timing and magnitude of cash flows.
Percentage (%)
Typically between -100% and a very high positive percentage.
The true MWRR calculation requires solving for 'r' in the IRR equation, which often involves iterative methods (like those used in financial software or spreadsheet functions) because there's no simple algebraic solution when multiple cash flows occur at different times. Our calculator employs such a method to provide an accurate MWRR.
Practical Examples (Real-World Use Cases)
Example 1: Modest Growth with Consistent Investing
Sarah started her investment journey with $10,000. Over 3 years, she consistently added $500 per month ($6,000 annually) and made no withdrawals. At the end of the 3-year period, her portfolio grew to $25,000.
Inputs:
Initial Investment Value: $10,000
Ending Investment Value: $25,000
Total Contributions: $18,000 (3 years * $6,000/year)
Total Withdrawals: $0
Investment Period: 3 years
Using the calculator with these inputs yields:
Net Cash Flow: $18,000
Total Profit/Loss: $7,000 ($25,000 – $10,000 – $18,000)
Money Weighted Rate of Return (MWRR): Approximately 15.6%
Financial Interpretation: Sarah's MWRR of 15.6% reflects the combined performance of her investments and her disciplined saving strategy. The substantial contributions significantly influence this rate.
Example 2: Significant Withdrawal During a Market Dip
John had an investment portfolio valued at $50,000 at the start of the year. Midway through the year, he withdrew $15,000 for a home renovation. He made no other contributions or withdrawals. By year-end, his portfolio had recovered slightly to $30,000.
Inputs:
Initial Investment Value: $50,000
Ending Investment Value: $30,000
Total Contributions: $0
Total Withdrawals: $15,000
Investment Period: 1 year
Using the calculator with these inputs yields:
Net Cash Flow: -$15,000
Total Profit/Loss: -$5,000 ($30,000 – $50,000 – $0 + $15,000)
Money Weighted Rate of Return (MWRR): Approximately -25.0%
Financial Interpretation: John's MWRR is significantly negative (-25.0%). This reflects not only the market's poor performance during the year but also the detrimental timing of his large withdrawal. Removing capital when the portfolio value was declining amplified the negative impact on his returns.
How to Use This Money Weighted Rate of Return Calculator
Our Money Weighted Rate of Return (MWRR) calculator is designed for simplicity and accuracy. Follow these steps to understand your investment's performance:
Enter Initial Investment: Input the starting value of your portfolio at the beginning of the period you wish to analyze.
Enter Ending Investment: Input the portfolio's value at the end of the same period.
Enter Total Contributions: Sum up all the money you added to the portfolio during this period (e.g., regular savings, lump-sum investments).
Enter Total Withdrawals: Sum up all the money you took out of the portfolio during this period (e.g., planned withdrawals, emergency fund access).
Enter Investment Period: Specify the duration of the analysis in years (e.g., 1 for a year, 0.5 for six months, 5 for five years).
Click 'Calculate MWRR': The calculator will process your inputs and display the results.
How to Read Results:
Money Weighted Rate of Return (MWRR): This is the primary result, showing the annualized effective rate of return on your investment, considering all your cash flow activities. A positive MWRR indicates growth, while a negative MWRR indicates a loss.
Total Profit/Loss: This shows the absolute gain or loss on your investment over the period, adjusted for cash flows. It's calculated as Ending Value – Initial Investment – Net Contributions.
Net Cash Flow: This is the total amount of money added to or removed from the portfolio (Total Contributions – Total Withdrawals). A positive number means more money went in than out.
Average Annual Cash Flow: This simplifies the net cash flow by dividing the total net cash flow by the investment period in years. This is useful for understanding the typical impact of cash flows per year.
Decision-Making Guidance: Compare your calculated MWRR to benchmark returns (like the S&P 500 index or a target-date fund) for similar risk levels. If your MWRR is consistently lower than benchmarks, it might indicate that your cash flow timing (contributions and withdrawals) is hindering performance, or that your underlying investments aren't performing as expected. Use this insight to adjust your investment strategy, contribution habits, or consult with a financial advisor.
Key Factors That Affect Money Weighted Rate of Return Results
Several factors significantly influence the Money Weighted Rate of Return (MWRR), making it a sensitive measure of performance tied directly to the investor's actions and market conditions:
Timing and Magnitude of Contributions: Investing larger sums of money just before periods of strong market performance will significantly boost your MWRR. Conversely, contributing right before a downturn will lower it. The timing is as crucial as the amount.
Timing and Magnitude of Withdrawals: Similar to contributions, withdrawing funds right before a market rally will negatively impact your MWRR, as you miss out on potential gains. Large withdrawals during a downturn reduce your exposure, which can mitigate losses but also lowers the overall MWRR calculation baseline.
Overall Market Performance: While MWRR accounts for cash flows, the underlying performance of the assets within the portfolio is still a primary driver. A strong bull market will generally lead to a higher MWRR, assuming reasonable cash flow activity.
Investment Horizon (Time Period): The longer the investment period, the more pronounced the effect of compounding and the impact of cash flows will be on the MWRR. Short periods might not fully capture the long-term effects of your investment strategy and cash flow decisions.
Fees and Expenses: Transaction costs, management fees, and other expenses reduce the net return of your portfolio. These directly subtract from the portfolio's growth, thereby lowering the MWRR. High fees can significantly drag down performance over time. Consider understanding investment fees impact.
Inflation: While MWRR calculates a nominal return, the real return (adjusted for inflation) is what truly matters for purchasing power. High inflation can erode the value of your returns, making a positive nominal MWRR less impressive in real terms.
Taxes: Investment gains and income are often subject to taxes. These tax liabilities reduce the amount of capital available for reinvestment and negatively affect the overall return experienced by the investor, thus impacting the MWRR.
Frequently Asked Questions (FAQ)
What is the difference between MWRR and TWRR?
MWRR (Money Weighted Rate of Return) measures the performance of an investment based on the investor's actual cash flows, reflecting their personal experience. TWRR (Time Weighted Rate of Return) measures the performance of the investment manager or strategy by eliminating the distorting effects of cash inflows and outflows. TWRR is preferred for evaluating manager skill, while MWRR is better for assessing the investor's overall success.
Can MWRR be negative?
Yes, the Money Weighted Rate of Return can be negative. This occurs when the investment loses value overall, or when withdrawals significantly outweigh contributions and market gains during the measurement period. A negative MWRR indicates that the investor lost money on their investment after accounting for all cash flows.
Why does MWRR vary so much with cash flows?
MWRR is a type of Internal Rate of Return (IRR). Like IRR, it finds the discount rate that makes the present value of all cash flows equal. Therefore, large cash flows, especially those occurring near the beginning or end of the period, have a disproportionately larger impact on the calculated rate of return compared to smaller, more frequent cash flows.
Is MWRR a good measure for buy-and-hold investors?
For investors who make few or no contributions or withdrawals (true buy-and-hold), MWRR will closely approximate TWRR. However, if there are any cash flows, MWRR will be influenced by them. For investors with consistent, small contributions, MWRR can provide a highly relevant measure of their accumulated wealth growth.
How can I improve my MWRR?
To improve your MWRR, focus on both investment performance and smart cash flow management. Maximize contributions during periods of anticipated strong market growth and minimize withdrawals during downturns. Ensure your overall investment strategy aligns with your risk tolerance and financial goals, and keep investment fees low.
What is the IRR calculation for MWRR?
The MWRR is the IRR of the portfolio's cash flows. It's the rate 'r' that solves the equation where the initial investment equals the present value of all subsequent cash flows (contributions, withdrawals) and the final portfolio value. Financial calculators, spreadsheets, or specialized software typically compute this iteratively.
Does MWRR account for the time value of money?
Yes, MWRR inherently accounts for the time value of money. As an IRR calculation, it discounts future cash flows back to their present value. This means that a dollar gained or lost today has a greater impact on the MWRR than a dollar gained or lost further in the future.
When is MWRR most useful?
MWRR is most useful when evaluating the performance of an investment where the investor has control over cash flows. This includes personal investment accounts, retirement funds where the individual directs contributions/withdrawals, and performance measurement for investment advisors who manage client funds with varying cash flow activities. It provides a personalized view of return.
Discover how inflation affects the real purchasing power of your investment returns.
var chartInstance = null;
function getElement(id) {
return document.getElementById(id);
}
function validateInput(value, id, errorId, min = null, max = null) {
var inputElement = getElement(id);
var errorElement = getElement(errorId);
errorElement.style.display = 'none';
inputElement.classList.remove('error');
if (value === ") {
errorElement.textContent = 'This field cannot be empty.';
errorElement.style.display = 'block';
inputElement.classList.add('error');
return false;
}
var numberValue = parseFloat(value);
if (isNaN(numberValue)) {
errorElement.textContent = 'Please enter a valid number.';
errorElement.style.display = 'block';
inputElement.classList.add('error');
return false;
}
if (min !== null && numberValue max) {
errorElement.textContent = 'Value cannot exceed ' + max + '.';
errorElement.style.display = 'block';
inputElement.classList.add('error');
return false;
}
if (id === 'periodInYears' && numberValue 0
if (!isValid) {
return;
}
var initial = parseFloat(initialInvestment);
var ending = parseFloat(endingInvestment);
var contributions = parseFloat(totalContributions);
var withdrawals = parseFloat(totalWithdrawals);
var period = parseFloat(periodInYears);
var netContributions = contributions – withdrawals;
var totalProfitLoss = ending – initial – netContributions;
var averageAnnualCashFlow = netContributions / period;
// MWRR is the IRR. This requires an iterative solution.
// A simplified approximation can be used, but IRR is more accurate.
// We'll implement a simple iterative approach to find IRR.
// Function to calculate the net present value for a given rate 'r'
// Simplified cash flow model: Initial investment, Net contributions spread evenly, final value
// A more complex model would require specific dates for each cash flow.
// For this calculator, we assume cash flows happen at the midpoint of the period for simplicity.
// Let's use a common approximation for annual cash flows for simplicity in this JS implementation:
// Approximate MWRR = (Net Profit – Net Contributions) / (Average Investment)
// Average Investment = Initial + (Net Contributions / 2)
var averageInvestmentApprox = initial + (netContributions / 2);
var approximateMwrr = 0;
if (averageInvestmentApprox > 0) {
approximateMwrr = totalProfitLoss / averageInvestmentApprox;
} else if (totalProfitLoss > 0) {
approximateMwrr = Infinity; // Or a very large number
} else {
approximateMwrr = 0; // Or handle as appropriate
}
// For a more robust IRR calculation, we'd need specific dates.
// Let's refine the approximation for better accuracy without specific dates.
// A common approximation formula for MWRR (when cash flows are not precisely dated):
// MWRR ≈ (E – B – NC) / (B + NC/2) — This is what we calculated above.
// Let's consider an alternative approximation often used for annual periods with few cash flows:
// (Ending Value + Withdrawals – Contributions – Initial Value) / (Initial Value + Contributions/2)
// This is essentially the same calculation.
// True IRR calculation requires a financial function or iterative solver.
// Since we cannot use external libraries and want to keep JS simple,
// we will use a common iterative solver approach for IRR.
function calculateIRR(cashFlows, guess = 0.1) {
var irr = guess;
var maxIterations = 100;
var tolerance = 0.00001;
for (var i = 0; i < maxIterations; i++) {
var npv = 0;
var deriv = 0;
for (var t = 0; t < cashFlows.length; t++) {
var discountFactor = Math.pow(1 + irr, t);
npv += cashFlows[t] / discountFactor;
deriv -= cashFlows[t] * t / Math.pow(1 + irr, t + 1);
}
if (Math.abs(npv) < tolerance) {
return irr;
}
if (deriv === 0) { // Avoid division by zero
break;
}
irr -= npv / deriv;
}
return irr; // Return the best approximation found
}
// Construct cash flows array for IRR calculation
// We need to make assumptions about cash flow timing.
// Let's assume the period is divided into T intervals (years).
// Initial investment is at t=0.
// Contributions are assumed to occur at the beginning of each year for simplicity.
// Withdrawals are assumed to occur at the end of each year for simplicity.
// Final value is at the end of the period.
var cashFlows = [];
cashFlows.push(-initial); // Initial investment is an outflow
// Add contributions and withdrawals for each year
for (var t = 1; t 0 && averageAnnualCashFlow !== 0) {
// For IRR, we need discrete time points.
// Let's adjust the calculation to use a cash flow list that reflects the timing.
// Assume contributions happen at the beginning of each year, withdrawals at the end.
// This gets complicated without specific dates.
// A commonly accepted simplification for MWRR without dates is to treat it as the IRR of:
// – Initial Investment at t=0
// + All Contributions at t=0 (or averaged)
// – All Withdrawals at t=T (or averaged)
// + Ending Value at t=T
// Let's use the following model for IRR:
// Initial Outflow: -initial
// Net Cash Flow (average annual): spread throughout the period
// Final Value: +ending
// If period is 1 year: -initial, +contributions, -withdrawals, +ending
// If period is > 1 year: need to allocate contributions/withdrawals.
// A simpler MWRR formula approximation, often used:
// MWRR = (E – B – NC) / (B + NC/2)
// Let's use this approximation as it's standard for calculators without specific dates.
var denominator = initial + (netContributions / 2);
var mwrrApprox = 0;
if (denominator !== 0) {
mwrrApprox = totalProfitLoss / denominator;
} else if (totalProfitLoss > 0) {
mwrrApprox = Infinity; // Very high return if denominator is zero and profit is positive
} else {
mwrrApprox = 0; // Or NaN, depending on desired handling
}
var calculatedMwrr = mwrrApprox; // Use approximation
} else {
var denominator = initial + (netContributions / 2);
var mwrrApprox = 0;
if (denominator !== 0) {
mwrrApprox = totalProfitLoss / denominator;
} else if (totalProfitLoss > 0) {
mwrrApprox = Infinity;
} else {
mwrrApprox = 0;
}
var calculatedMwrr = mwrrApprox;
}
var mwrrPercentage = calculatedMwrr * 100;
getElement('mwrrResult').textContent = mwrrPercentage.toFixed(2) + '%';
getElement('totalProfitLoss').textContent = '$' + totalProfitLoss.toFixed(2);
getElement('netCashFlow').textContent = '$' + netContributions.toFixed(2);
getElement('averageAnnualCashFlow').textContent = '$' + averageAnnualCashFlow.toFixed(2);
getElement('tableInitialInvestment').textContent = '$' + initial.toFixed(2);
getElement('tableEndingInvestment').textContent = '$' + ending.toFixed(2);
getElement('tableTotalContributions').textContent = '$' + contributions.toFixed(2);
getElement('tableTotalWithdrawals').textContent = '$' + withdrawals.toFixed(2);
getElement('tableNetCashFlow').textContent = '$' + netContributions.toFixed(2);
getElement('tablePeriodInYears').textContent = period.toFixed(2) + ' years';
getElement('tableMwrrResult').textContent = mwrrPercentage.toFixed(2) + '%';
updateChart(initial, ending, contributions, withdrawals, period);
}
function updateChart(initial, ending, contributions, withdrawals, period) {
var canvas = getElement('mwrrChart');
if (chartInstance) {
chartInstance.destroy(); // Destroy previous chart instance
}
var ctx = canvas.getContext('2d');
// Data series:
// 1. Portfolio Value (without cash flow impact – assuming smooth growth)
// 2. Actual Portfolio Value (ending value)
// 3. Hypothetical value if only initial investment grew at MWRR (this is tricky)
// Let's plot:
// Series 1: Initial Investment Growth at MWRR (hypothetical best case)
// Series 2: Actual Ending Value
var mwrr = parseFloat(getElement('mwrrResult').textContent) / 100;
var steps = 10;
var timePoints = [];
var series1Data = []; // Hypothetical growth of initial investment
var series2Data = []; // Actual ending value (single point)
if (period > 0) {
for (var i = 0; i idx === steps ? ending : null), // Only the last point
borderColor: 'rgba(40, 167, 69, 1)',
backgroundColor: 'rgba(40, 167, 69, 0.2)',
fill: false,
pointRadius: 5,
pointHoverRadius: 7,
type: 'scatter' // Use scatter for a single point representation
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
title: {
display: true,
text: 'Time (Years)'
}
},
y: {
title: {
display: true,
text: 'Portfolio Value ($)'
},
beginAtZero: true
}
},
plugins: {
tooltip: {
callbacks: {
label: function(context) {
var label = context.dataset.label || ";
if (label) {
label += ': ';
}
if (context.parsed.y !== null) {
label += '$' + context.parsed.y.toFixed(2);
}
return label;
}
}
}
}
}
});
}
function resetCalculator() {
getElement('initialInvestment').value = '10000';
getElement('endingInvestment').value = ";
getElement('totalContributions').value = '0';
getElement('totalWithdrawals').value = '0';
getElement('periodInYears').value = '1';
getElement('initialInvestmentError').textContent = ";
getElement('endingInvestmentError').textContent = ";
getElement('totalContributionsError').textContent = ";
getElement('totalWithdrawalsError').textContent = ";
getElement('periodInYearsError').textContent = ";
getElement('initialInvestment').classList.remove('error');
getElement('endingInvestment').classList.remove('error');
getElement('totalContributions').classList.remove('error');
getElement('totalWithdrawals').classList.remove('error');
getElement('periodInYears').classList.remove('error');
getElement('mwrrResult').textContent = '-';
getElement('totalProfitLoss').textContent = '-';
getElement('netCashFlow').textContent = '-';
getElement('averageAnnualCashFlow').textContent = '-';
getElement('tableInitialInvestment').textContent = '-';
getElement('tableEndingInvestment').textContent = '-';
getElement('tableTotalContributions').textContent = '-';
getElement('tableTotalWithdrawals').textContent = '-';
getElement('tableNetCashFlow').textContent = '-';
getElement('tablePeriodInYears').textContent = '-';
getElement('tableMwrrResult').textContent = '-';
if (chartInstance) {
chartInstance.destroy();
chartInstance = null;
}
// Clear canvas if no chart is rendered
var canvas = getElement('mwrrChart');
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function copyResults() {
var resultsText = "— MWRR Calculation Results —\n";
resultsText += "Money Weighted Rate of Return (MWRR): " + getElement('mwrrResult').textContent + "\n";
resultsText += "Total Profit/Loss: " + getElement('totalProfitLoss').textContent + "\n";
resultsText += "Net Cash Flow: " + getElement('netCashFlow').textContent + "\n";
resultsText += "Average Annual Cash Flow: " + getElement('averageAnnualCashFlow').textContent + "\n\n";
resultsText += "— Key Assumptions —\n";
resultsText += "Initial Investment: " + getElement('tableInitialInvestment').textContent + "\n";
resultsText += "Ending Investment: " + getElement('tableEndingInvestment').textContent + "\n";
resultsText += "Total Contributions: " + getElement('tableTotalContributions').textContent + "\n";
resultsText += "Total Withdrawals: " + getElement('tableTotalWithdrawals').textContent + "\n";
resultsText += "Investment Period: " + getElement('tablePeriodInYears').textContent + "\n";
var tempTextArea = document.createElement("textarea");
tempTextArea.value = resultsText;
document.body.appendChild(tempTextArea);
tempTextArea.select();
document.execCommand("copy");
document.body.removeChild(tempTextArea);
var originalText = getElement('copy-btn').textContent;
getElement('copy-btn').textContent = 'Copied!';
setTimeout(function() {
getElement('copy-btn').textContent = originalText;
}, 2000);
}
function toggleFaq(element) {
var content = element.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
}
// Initial calculation on page load with default values
document.addEventListener('DOMContentLoaded', function() {
resetCalculator(); // Set default values
calculateMWRR(); // Perform initial calculation
});
// Add Chart.js library dynamically if not already present
if (typeof Chart === 'undefined') {
var script = document.createElement('script');
script.src = 'https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js';
script.onload = function() {
// Ensure chart is updated after Chart.js is loaded
document.addEventListener('DOMContentLoaded', function() {
resetCalculator();
calculateMWRR();
});
};
document.head.appendChild(script);
} else {
// If Chart.js is already loaded, just call the calculation
document.addEventListener('DOMContentLoaded', function() {
resetCalculator();
calculateMWRR();
});
}