floatdiscmargin
Discount margin for floating-rate bond
Syntax
Description
calculates the discount margin or zero discount margin for a floating-rate
bond.Margin
= floatdiscmargin(Price
,Spread
Settle
,Maturity
,RateInfo
,LatestFloatingRate
)
The input RateInfo
determines whether the discount margin or
the zero discount margin is calculated. Principal schedules are supported using
Principal
.
adds optional name-value pair arguments. Margin
= floatdiscmargin(___,Name,Value
)
Examples
Compute the Zero Discount Margin Using a Yield Curve
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 = datetime(2011,1,20); Maturity = datetime(2012,1,15); 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 = [datetime(2011,1,20); datetime(2011,4,15); datetime(2011,7,15); datetime(2011,11,15)]; EndDates = [datetime(2011,4,15); datetime(2011,7,15); datetime(2011,11,15); datetime(2012,1,15)]; ValuationDate = datetime(2011,1,20); 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.0689
Input Arguments
Price
— Bond prices where discount margin is to be computed
matrix
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, the price of a bond that includes the accrued interest,
you must supply the dirty price for the Price
input.
Data Types: double
Spread
— Number of basis points over the reference rate
numeric
Number of basis points over the reference rate, specified as a
NINST
-by-1
matrix.
Data Types: double
Settle
— Settlement date of the floating-rate bonds
datetime array | string array | date character vector
Settlement date of the floating-rate bonds, specified as a scalar or a
NINST
-by-1
vector using a datetime
array, string array, or date character vectors. If supplied as a
NINST
-by-1
vector of dates, all
settlement dates must be the same (only a single settlement date is
supported)
To support existing code, floatdiscmargin
also
accepts serial date numbers as inputs, but they are not recommended.
Data Types: char
| string
| datetime
Maturity
— Maturity date of the floating-rate bond
datetime array | string array | date character vector
Maturity date of the floating-rate bond, specified as a
NINST
-by-1
vector using a datetime
array, string array, or date character vectors.
To support existing code, floatdiscmargin
also
accepts serial date numbers as inputs, but they are not recommended.
Data Types: char
| string
| datetime
RateInfo
— Interest-rate information
numeric
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
of4
).
Note
If the RateInfo
argument is an annualized
zero-rate term structure created by intenvset
(Financial Instruments Toolbox),
the zero discount margin is calculated.
Data Types: double
LatestFloatingRate
— Rate for next floating payment set at last reset date
numeric
Rate for the next floating payment set at the last reset date,
specified as NINST
-by-1
vector.
Data Types: double
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: Margin =
floatdiscmargin(Price,Spread,Settle,Maturity,RateInfo,LatestFloatingRate,'Reset',2,'Basis',5)
Reset
— Frequency of payments per year
1
(default) | numeric
Frequency of payments per year, specified as
NINST
-by-1
vector.
Data Types: double
Basis
— Day-count basis used for time factor calculations
0
(actual/actual) (default) | integers of the set [0...13]
| vector of integers of the set [0...13]
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
Principal
— Notional principal amounts
100
(default) | numeric
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
EndMonthRule
— End-of-month rule flag
1
(in effect) (default) | nonnegative integer 0
or
1
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
AdjustCashFlowsBasis
— Adjust cash flows according to accrual amount
0
(not in effect) (default) | nonnegative integer 0
or
1
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
(Financial Instruments Toolbox).
Data Types: logical
Holidays
— Dates for holidays
holidays.m
used (default) | datetime array | string array | date character vector | serial date number
Dates for holidays, specified as
NHOLIDAYS
-by-1
vector using a
datetime array, string array, or date character vectors. Holidays are
used in computing business days.
To support existing code, floatdiscmargin
also
accepts serial date numbers as inputs, but they are not recommended.
Data Types: char
| string
| datetime
BusinessDayConvention
— Business day conventions
'actual'
(default) | character vector with values'actual'
,
'follow'
,
'modifiedfollow'
, 'previous'
or
'modifiedprevious'
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
Margin
— Discount margin
numeric
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
(Financial Instruments Toolbox),
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.
Version History
Introduced in R2012bR2022b: Serial date numbers not recommended
Although floatdiscmargin
supports serial date numbers,
datetime
values are recommended instead. The
datetime
data type provides flexible date and time
formats, storage out to nanosecond precision, and properties to account for time
zones and daylight saving time.
To convert serial date numbers or text to datetime
values, use the datetime
function. For example:
t = datetime(738427.656845093,"ConvertFrom","datenum"); y = year(t)
y = 2021
There are no plans to remove support for serial date number inputs.
See Also
floatmargin
| floatbyzero
(Financial Instruments Toolbox) | bndspread
| intenvset
(Financial Instruments Toolbox) | datetime
Topics
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)