Funds Transfer Pricing (FTP) Rate Calculator
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f4f7f6;
}
.calculator-container {
background: #fff;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
margin-bottom: 40px;
border-top: 5px solid #0056b3;
}
.calculator-title {
text-align: center;
margin-bottom: 25px;
color: #0056b3;
}
.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 600;
font-size: 0.95rem;
}
.form-group input, .form-group select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
box-sizing: border-box;
}
.form-group input:focus {
border-color: #0056b3;
outline: none;
}
.full-width {
grid-column: 1 / -1;
}
.btn-calc {
display: block;
width: 100%;
background-color: #0056b3;
color: white;
padding: 15px;
border: none;
border-radius: 4px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
margin-top: 10px;
transition: background 0.3s;
}
.btn-calc:hover {
background-color: #004494;
}
.results-area {
margin-top: 30px;
background-color: #f8f9fa;
padding: 20px;
border-radius: 4px;
border: 1px solid #e9ecef;
display: none;
}
.result-row {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #e0e0e0;
}
.result-row:last-child {
border-bottom: none;
}
.result-label {
font-weight: 600;
color: #555;
}
.result-value {
font-weight: bold;
color: #0056b3;
}
.highlight-result {
font-size: 1.2rem;
color: #28a745;
}
.negative-result {
color: #dc3545;
}
.content-section {
background: #fff;
padding: 40px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
h2, h3 {
color: #2c3e50;
}
p {
margin-bottom: 15px;
}
ul {
margin-bottom: 20px;
}
li {
margin-bottom: 8px;
}
@media (max-width: 768px) {
.form-grid {
grid-template-columns: 1fr;
}
}
FTP Rate & Net Interest Margin (NIM) Calculator
Profitability Analysis
All-in FTP Rate:
0.00%
Customer Rate:
0.00%
Net Interest Spread (NIM Contribution):
0.00%
Annual Customer Interest:
$0.00
Annual FTP Charge/Credit:
$0.00
Net Profit Contribution:
$0.00
Understanding Funds Transfer Pricing (FTP) Rates
Funds Transfer Pricing (FTP) is a critical internal measurement framework used by banks and financial institutions to determine the profitability of different business lines and products. It functions by assigning a cost of funds to assets (like loans) and a value of funds to liabilities (like deposits).
How the FTP Rate is Calculated
The "All-in FTP Rate" is rarely a single number pulled from thin air. It is constructed using a "building block" approach, aggregating various costs and risks associated with holding that specific asset or liability. This calculator uses the standard additive model:
- Base Transfer Rate: This is the reference rate derived from the bank's yield curve (e.g., SOFR, LIBOR, or Treasury curve) matched to the maturity and repricing characteristics of the instrument.
- Liquidity Premium: An additional charge reflecting the cost of holding liquidity buffers or the cost of funding for a specific term (term liquidity premium).
- Option Cost: A charge for embedded options, such as prepayment risk on a mortgage or early withdrawal risk on a term deposit.
- Strategic Adjustments: Incentives or penalties applied by the Treasury department to encourage or discourage sales of specific products.
Calculation Formulas
The calculation of the Net Interest Spread (or NIM contribution) differs based on whether the instrument is an Asset or a Liability.
For Assets (Loans)
The FTP rate represents the cost to the business unit for funding the loan.
FTP Rate = Base Rate + Liquidity Premium + Option Cost + Adjustments
Net Spread = Customer Rate (Revenue) – FTP Rate (Cost)
For Liabilities (Deposits)
The FTP rate represents the value credited to the business unit for bringing in funding.
FTP Rate = Base Rate + Liquidity Premium + Option Cost + Adjustments
Net Spread = FTP Rate (Revenue Credit) – Customer Rate (Cost Paid to Client)
Why FTP is Essential
Without an accurate FTP mechanism, a bank might incorrectly incentivize deposit gathering at too high a cost, or lending at rates that do not cover the true cost of liquidity and risk. By stripping out interest rate risk and liquidity risk from the business units and centralizing them in the Treasury, the bank can accurately measure the commercial spread generated by its sales teams.
function calculateFTP() {
// Get Input Values
var type = document.getElementById("productType").value;
var principal = parseFloat(document.getElementById("principalAmount").value);
var custRate = parseFloat(document.getElementById("customerRate").value);
var baseRate = parseFloat(document.getElementById("baseRate").value);
var liqPrem = parseFloat(document.getElementById("liquidityPremium").value);
var optCost = parseFloat(document.getElementById("optionCost").value);
var stratAdj = parseFloat(document.getElementById("strategicAdj").value);
// Validation: Ensure inputs are numbers, default to 0 if empty
if (isNaN(principal)) principal = 0;
if (isNaN(custRate)) custRate = 0;
if (isNaN(baseRate)) baseRate = 0;
if (isNaN(liqPrem)) liqPrem = 0;
if (isNaN(optCost)) optCost = 0;
if (isNaN(stratAdj)) stratAdj = 0;
// Calculate All-in FTP Rate
// Formula: Base + Liquidity + Option + Adjustments
var ftpRate = baseRate + liqPrem + optCost + stratAdj;
// Calculate Annual Values
var annualCustInterest = principal * (custRate / 100);
var annualFtpAmount = principal * (ftpRate / 100);
var spread = 0;
var netProfit = 0;
// Calculate Spread based on Type (Asset vs Liability)
if (type === "asset") {
// For Assets: Spread = Customer Rate (Income) – FTP Rate (Expense)
spread = custRate – ftpRate;
netProfit = annualCustInterest – annualFtpAmount;
} else {
// For Liabilities: Spread = FTP Rate (Income Credit) – Customer Rate (Expense)
spread = ftpRate – custRate;
netProfit = annualFtpAmount – annualCustInterest;
}
// Formatting Helper
var formatCurrency = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
// Display Results
document.getElementById("results").style.display = "block";
document.getElementById("displayFtpRate").innerHTML = ftpRate.toFixed(2) + "%";
document.getElementById("displayCustRate").innerHTML = custRate.toFixed(2) + "%";
var spreadElem = document.getElementById("displaySpread");
spreadElem.innerHTML = spread.toFixed(2) + "% (" + (spread * 100).toFixed(0) + " bps)";
// Color coding for spread
if (spread < 0) {
spreadElem.className = "result-value negative-result";
} else {
spreadElem.className = "result-value highlight-result";
}
document.getElementById("displayCustInterest").innerHTML = formatCurrency.format(annualCustInterest);
document.getElementById("displayFtpAmount").innerHTML = formatCurrency.format(annualFtpAmount);
var profitElem = document.getElementById("displayNetProfit");
profitElem.innerHTML = formatCurrency.format(netProfit);
// Color coding for profit
if (netProfit < 0) {
profitElem.className = "result-value negative-result";
} else {
profitElem.className = "result-value highlight-result";
}
}