Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

floatdiscmargin

Discount margin for floating-rate bond

Syntax

Margin = floatdiscmargin(Price,SpreadSettle,Maturity,RateInfo,LatestFloatingRate)
Margin = floatdiscmargin(___,Name,Value)

Description

example

Margin = floatdiscmargin(Price,SpreadSettle,Maturity,RateInfo,LatestFloatingRate) calculates the discount margin or zero discount margin for a floating-rate bond.

The input RateInfo determines whether the discount margin or the zero discount margin is calculated. Principal schedules are supported using Principal.

example

Margin = floatdiscmargin(___,Name,Value) adds optional name-value pair arguments.

Examples

collapse all

Use floatdiscmargin to compute the discount margin and zero discount margin for a floating-rate note.

Define data for the floating-rate note.

Price = 99.99;
Spread = 50;
Settle = '20-Jan-2011';
Maturity = '15-Jan-2012';
LatestFloatingRate = 0.05;
StubRate = 0.049;
SpotRate = 0.05;
Reset = 4;
Basis = 2;

Compute the discount margin.

dMargin = floatdiscmargin(Price, Spread, Settle, Maturity, ...
[StubRate, SpotRate], LatestFloatingRate,'Reset', Reset, 'Basis', Basis, ...
'AdjustCashFlowsBasis', true)
dMargin = 48.4810

Usually you want to set AdjustCashFlowsBasis to true, so cash flows are calculated with adjustments on accrual amounts.

Create an annualized zero-rate term structure to calculate the zero discount margin.

Rates = [0.0500;
         0.0505;
         0.0510;
         0.0520];
StartDates = ['20-Jan-2011';
              '15-Apr-2011';
              '15-Jul-2011';
              '15-Oct-2011'];
EndDates =   ['15-Apr-2011';
              '15-Jul-2011';
              '15-Oct-2011';
              '15-Jan-2012'];
ValuationDate = '20-Jan-2011';
RateSpec = intenvset('Compounding', Reset, 'Rates', Rates,...
'StartDates', StartDates, 'EndDates', EndDates,...
'ValuationDate', ValuationDate, 'Basis', Basis);

Calculate the zero discount margin using the previous yield curve.

dMargin = floatdiscmargin(Price, Spread, Settle, Maturity, ...
RateSpec, LatestFloatingRate,'Reset', Reset, 'Basis', Basis, ...
'AdjustCashFlowsBasis', true)
dMargin = 46.0688

Use floatdiscmargin to compute the discount margin and zero discount margin for a floating-rate note using datetime inputs.

Price = 99.99;
Spread = 50;
Settle = '20-Jan-2011';
Maturity = '15-Jan-2012';
LatestFloatingRate = 0.05;
StubRate = 0.049;
SpotRate = 0.05;
Reset = 4;
Basis = 2;

Settle = datetime(Settle,'Locale','en_US');
Maturity = datetime(Maturity,'Locale','en_US');
dMargin = floatdiscmargin(Price, Spread, Settle, Maturity, ...
[StubRate, SpotRate], LatestFloatingRate,'Reset', Reset, 'Basis', Basis, ...
'AdjustCashFlowsBasis', true)
dMargin = 48.4810

Input Arguments

collapse all

Bond prices where discount margin is to be computed, specified as a NINST-by-1 matrix.

Note

The spread is calculated against the clean price (the function internally does not add the accrued interest to the price specified by the Price input). If the spread is required against the dirty price, you must supply the dirty price for the Price input.

Data Types: double

Number of basis points over the reference rate, specified as a NINST-by-1 matrix.

Data Types: double

Settlement date of the floating-rate bonds, specified as serial date number, date character vector, or datetime array. If supplied as a NINST-by-1 vector of dates, all settlement dates must be the same (only a single settlement date is supported)

Data Types: double | char | datetime

Maturity date of the floating-rate bond, specified as serial date number, date character vector, or datetime array.

Data Types: double | char | datetime

interest-rate information, specified as NINST-by-2 vector where the:

  • First column is the stub rate between the settlement date and the first coupon rate.

  • Second column is the reference rate for the term of the floating coupons (for example, the 3-month LIBOR from settlement date for a bond with a Reset of 4).

Note

If the RateInfo argument is an annualized zero-rate term structure created by intenvset, the zero discount margin is calculated.

Data Types: double

Rate for the next floating payment set at the last reset date, specified as NINST-by-1 vector.

Data Types: double

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: Margin = floatdiscmargin(Price,Spread,Settle,Maturity,RateInfo,LatestFloatingRate,'Reset',2,'Basis',5)

collapse all

Frequency of payments per year, specified as NINST-by-1 vector.

Data Types: double

Day-count basis used for time factor calculations, specified as a NINST-by-1 vector. Values are:

  • 0 = actual/actual

  • 1 = 30/360 (SIA)

  • 2 = actual/360

  • 3 = actual/365

  • 4 = 30/360 (PSA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (European)

  • 7 = actual/365 (Japanese)

  • 8 = actual/actual (ICMA)

  • 9 = actual/360 (ICMA)

  • 10 = actual/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = actual/365 (ISDA)

  • 13 = BUS/252

For more information, see basis.

Data Types: double

Notional principal amounts, specified as a NINST-by-1 vector or a NINST-by-1 cell array where each element is a NUMDATES-by-2 cell array where the first column is dates and the second column is the associated principal amount. The date indicates the last day that the principal value is valid.

Data Types: double | cell

End-of-month rule flag, specified as a NINST-by-1 vector. This rule applies only when Maturity is an end-of-month date for a month having 30 or fewer days.

  • 0 = Ignore rule, meaning that a bond coupon payment date is always the same numerical day of the month.

  • 1 = Set rule on, meaning that a bond coupon payment date is always the last actual day of the month.

Data Types: logical

Adjusts cash flows according to the accrual amount, specified as a NINST-by-1 vector of logicals.

Note

Usually you want to set AdjustCashFlowsBasis to 1, so cash flows are calculated with adjustments on accrual amounts. The default is set to 0 to be consistent with floatbyzero.

Data Types: logical

Dates for holidays, specified as NHOLIDAYS-by-1 vector of MATLAB® dates using serial date numbers, date character vectors, or datetime arrays. Holidays are used in computing business days.

Data Types: double | char | datetime

Business day conventions, specified as a NINST-by-1 cell array of character vectors of business day conventions to be used in computing payment dates. The selection for business day convention determines how nonbusiness days are treated. Nonbusiness days are defined as weekends plus any other date that businesses are not open (for example, statutory holidays). Values are:

  • 'actual' — Nonbusiness days are effectively ignored. Cash flows that fall on non-business days are assumed to be distributed on the actual date.

  • 'follow' — Cash flows that fall on a nonbusiness day are assumed to be distributed on the following business day.

  • 'modifiedfollow' — Cash flows that fall on a non-business day are assumed to be distributed on the following business day. However if the following business day is in a different month, the previous business day is adopted instead.

  • 'previous' — Cash flows that fall on a nonbusiness day are assumed to be distributed on the previous business day.

  • 'modifiedprevious' — Cash flows that fall on a nonbusiness day are assumed to be distributed on the previous business day. However if the previous business day is in a different month, the following business day is adopted instead.

Data Types: char | cell

Output Arguments

collapse all

Discount margin, returned as a NINST-by-1 vector of the discount margin if RateInfo is specified as a NINST-by-2 vector of stub and spot rates.

If RateInfo is specified as an annualized zero rate term structure created by intenvset, Margin is returned as a NINST-by-NCURVES matrix of the zero discount margin.

References

[1] Fabozzi, Frank J., Mann, Steven V. Floating-Rate Securities. John Wiley and Sons, New York, 2000.

[2] Fabozzi, Frank J., Mann, Steven V. Introduction to Fixed Income Analytics: Relative Value Analysis, Risk Measures and Valuation. John Wiley and Sons, New York, 2010.

[3] O'Kane, Dominic, Sen, Saurav. “Credit Spreads Explained.” Lehman Brothers Fixed Income Quantitative Research, March 2004.

Introduced in R2012b

Was this topic helpful?