OISFuture
Description
Create and price an OISFuture
instrument object for one or
more one-month or three-month future instruments using this workflow:
Use
fininstrument
to create anOISFuture
instrument object for one or more OIS Future instruments.Use
ratecurve
to specify an interest-rate model for theOISFuture
instrument object.Use
finpricer
to specify aDiscount
pricing method for one or moreOISFuture
instruments.
Create an OISFuture
instrument object for one or more OIS futures
instruments to use in curve construction using this workflow:
Use
fininstrument
to create anOISFuture
instrument object for one or more OIS future instruments.Use
irbootstrap
to create an interest-rate curve (ratecurve
) for one or moreOISFuture
instruments.
For more information on these workflows, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.
For more information on the available models and pricing methods for an
OISFuture
instrument, see Choose Instruments, Models, and Pricers.
Creation
Syntax
Description
creates an OISFutureInst
= fininstrument(InstrumentType
,QuotedPrice
=OIS_quoted_price,Maturity
=maturity_date,StartDate
=start_date)OISFuture
instrument object for one or more
OIS future instruments by specifying InstrumentType
,
QuotedPrice
, Maturity
, and
StartDate
.
The OISFuture
instrument supports many alternative
reference rate (ARR) securities that are compliant with standards from the
International Organization of Securities Commissions (IOSCO). For example,
ARRs like SOFR, EONIA, SONIA, SARON, and TONAR focus on risk-free rate or
near risk-free rates based on transactions of overnight funding.
sets optional properties using
additional name-value arguments in addition to the required arguments in the
previous syntax. For example, OISFutureInst
= fininstrument(___,Name=Value
)OISFutureInst =
fininstrument("OISFuture",QuotedPrice=99.5,Maturity=datetime(2022,12,15),StartDate=datetime(2022,9,15))
creates an OIS future instrument. You can specify multiple name-value
arguments.
Input Arguments
InstrumentType
— Instrument type
string with value "OISFuture"
| string array with values of "OISFuture"
| character vector with value 'OISFuture'
| cell array of character vectors with values of
'OISFuture'
Instrument type, specified as a string with the value of
"OISFuture"
, a character vector with the value of
'OISFuture'
, an
NINST
-by-1
string array with
values of "OISFuture"
, or an
NINST
-by-1
cell array of
character vectors with values of 'OISFuture'
.
Data Types: char
| cell
| string
Specify required
and 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.
Example: OISFutureInst =
fininstrument("OISFuture",QuotedPrice=99.5,Maturity=datetime(2022,12,15),StartDate=datetime(2022,9,15))
OISFuture
Name-Value ArgumentsQuotedPrice
— OIS future quoted price
scalar numeric | numeric decimal
OIS future quoted price, specified as
QuotedPrice
and a scalar numeric or an
NINST
-by-1
numeric
vector.
Data Types: double
Maturity
— OIS future maturity date
datetime array | string array | date character vector
OIS future maturity date, specified as Maturity
and a scalar or an NINST
-by-1
vector using a datetime array, string array, or date character
vectors.
To support existing code, OISFuture
also
accepts serial date numbers as inputs, but they are not recommended.
If you use date character vectors or strings, the format must be
recognizable by datetime
because
the Maturity
property is stored as a
datetime.
StartDate
— OIS future underlying rate end date
datetime array | string array | date character vector
OIS future underlying rate end date, specified as
StartDate
and a scalar or an
NINST
-by-1
vector using a
datetime array, string array, or date character vectors.
To support existing code, OISFuture
also
accepts serial date numbers as inputs, but they are not recommended.
If you use date character vectors or strings, the format must be
recognizable by datetime
because
the StartDate
property is stored as a
datetime.
OISFuture
Name-Value ArgumentsMethod
— Computation method
"Compound"
(default) | string with value "Compound"
or "Average"
| string array with values of "Compound"
or
"Average"
| character vector with value 'Compound'
or
'Average'
| cell array of character vectors with values of
'Compound'
or
'Average'
Computation method, specified as Method
and a
scalar character vector or string or an
NINST
-by-1
cell array of
character vectors or string array.
Data Types: cell
| char
| string
Basis
— Day count basis
2
(actual/360) (default) | scalar integer from 0
to 13
| vector of integers from 0
to 13
Day count basis, specified as Basis
and a
scalar integer or an
NINST
-by-1
vector of
integers for the following:
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
— Notional principal amount
100
(default) | scalar numeric | numeric vector
Notional principal amount, specified as
Notional
and a scalar numeric or an
NINST
-by-1
numeric vector.
Data Types: double
BusinessDayConvention
— Business day convention for cash flow dates
"actual"
(default) | string | string array | character vector | cell array of character vectors
Business day convention for cash flow dates, specified as
BusinessDayConvention
and a scalar string or
character vector or an
NINST
-by-1
cell array of
character vectors or string array. 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 nonbusiness 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 nonbusiness 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
| string
Holidays
— Holidays used in computing business days
NaT
(default) | datetime array | string array | date character vector
Holidays used in computing business days, specified as
Holidays
and dates using an
NINST
-by-1
vector of a
datetime array, string array, or date character vectors. For
example:
H = holidays(datetime('today'),datetime(2025,12,15)); OISFutureInst = fininstrument("OISFuture",Maturity=datetime(2022,12,15),QuotedPrice=99.5,ExerciseDate=datetime(2022,6,15),Holidays=H)
To support existing code, OISFuture
also
accepts serial date numbers as inputs, but they are not recommended.
ProjectionCurve
— Projection curve used to price OIS future
ratecurve.empty
(default) | ratecurve
object | vector of ratecurve
objects
Projection curve used to price OIS future, specified as
ProjectionCurve
and a scalar
ratecurve
object or an
NINST
-by-1
vector of
ratecurve
objects. These objects must be
created using ratecurve
. Use
this optional input if the forward curve is different from the
discount curve.
Data Types: object
HistoricalFixing
— Historical fixing for OISFuture
timetable.empty
(default) | timetable
Historical fixing for OISFuture
, specified as
HistoricalFixing
and a timetable.
Data Types: timetable
Name
— User-defined name for instrument
""
(default) | string | character vector
User-defined name for the instrument, specified as
Name
and a scalar string or character vector
or an NINST
-by-1
cell array of
character vectors or string array.
Data Types: char
| cell
| string
Properties
QuotedPrice
— OIS future quoted price
scalar numeric | numeric vector
OIS future quoted price, returned as a scalar numeric or an
NINST
-by-1
numeric vector.
Data Types: double
Maturity
— OIS future maturity date
datetime | vector of datetimes
OIS future maturity date, returned as a scalar datetime or an
NINST
-by-1
vector of
datetimes.
Data Types: datetime
StartDate
— OIS future underlying end date
datetime | vector of datetimes
OIS future underlying end date, returned as a scalar datetime or an
NINST
-by-1
vector of
datetimes.
Data Types: datetime
Method
— Computation method
"Compound"
(default) | string with value "Compound"
or "Average"
| string array with values of "Compound"
or
"Average"
Computation method, returned as a string or an
NINST
-by-1
string array.
Data Types: string
Basis
— Day count basis
0
(actual/actual) (default) | scalar integer from 0
to 13
| vector of integers from 0
to 13
Day count basis, returned as a scalar integer or an
NINST
-by-1
vector of integers.
Data Types: double
Notional
— Notional principal amount
100
(default) | scalar numeric | numeric vector
Notional principal amount, returned as a scalar numeric or an
NINST
-by-1
numeric vector.
Data Types: double
BusinessDayConvention
— Business day convention for cash flows
"actual"
(default) | scalar string | string array
Business day convention for cash flows, returned as a scalar string or an
NINST
-by-1
string array.
Data Types: string
Holidays
— Holidays used in computing business days
NaT
(default) | datetimes
Holidays used in computing business days, returned as an
NINST
-by-1
vector of
datetimes.
Data Types: datetime
ProjectionCurve
— Projection curve used to price OIS future
ratecurve.empty
(default) | ratecurve
object | vector of ratecurve
objects
Projection curve used to price OIS future, returned as a scalar ratecurve
object or an
NINST
-by-1
vector of
ratecurve
objects.
Data Types: object
HistoricalFixing
— Historical fixing for OISFuture
timetable.empty
(default) | timetable
Historical fixing for OISFuture
, returned as a
timetable.
Data Types: timetable
Name
— User-defined name for instrument
""
(default) | string | string array
User-defined name for the instrument, returned as a string or an
NINST
-by-1
string array.
Data Types: string
Object Functions
cashflows | Compute cash flow for FixedBond , FloatBond ,
Swap , FRA , STIRFuture ,
OISFuture , OvernightIndexedSwap , or
Deposit instrument |
Examples
Price SOFR Future Using ratecurve
and Discount
Pricer
This example shows the workflow to price an OISFuture
instrument for a one-month SOFR future when you use a ratecurve
object and a Discount
pricing method.
Create ratecurve
Object
Create a ratecurve
object using ratecurve
for the underlying interest-rate curve for the OISFuture
instrument.
Settle = datetime(2021,1,15); Type = 'zero'; ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]'; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = Settle + ZeroTimes; myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = ratecurve with properties: Type: "zero" Compounding: -1 Basis: 0 Dates: [10x1 datetime] Rates: [10x1 double] Settle: 15-Jan-2021 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Create OISFuture
Instrument Object
Use fininstrument
to create an OISFuture
instrument object for a one-month SOFR future.
HFDates = datetime(2021,3,1) + caldays(0:3)'; HistFixing = timetable(HFDates,[0.02;0.04;0.04;0.02]); % Data from the following: https://www.cmegroup.com/trading/interest-rates/stir/one-month-sofr_quotes_globex.html Prices_1M = 99.97; Maturity_1M = lbusdate(2021,3,[],[],'datetime'); StartDate_1M = fbusdate(2021,3,[],[],'datetime'); FutInstrument_1M = fininstrument("OISFuture",Maturity=Maturity_1M ,QuotedPrice=Prices_1M,StartDate=StartDate_1M,Method="Average", ... HistoricalFixing=HistFixing,Name="1MonthSOFRFuture")
FutInstrument_1M = OISFuture with properties: QuotedPrice: 99.9700 Method: "average" Basis: 2 StartDate: 01-Mar-2021 Maturity: 31-Mar-2021 Notional: 100 BusinessDayConvention: "actual" Holidays: NaT ProjectionCurve: [0x0 ratecurve] HistoricalFixing: [4x1 timetable] Name: "1MonthSOFRFuture"
Create Discount
Pricer Object
Use finpricer
to create a Discount
pricer object and use the ratecurve
object for the 'DiscountCurve'
name-value pair argument.
outPricer = finpricer("Discount",DiscountCurve=myRC)
outPricer = Discount with properties: DiscountCurve: [1x1 ratecurve]
Price OISFuture
Instrument for SOFR Future
Use price
to compute the price and sensitivities for the OISFuture
instrument for a one-month SOFR future.
[Price,outPR] = price(outPricer,FutInstrument_1M,["all"])
Price = 0.0408
outPR = priceresult with properties: Results: [1x2 table] PricerData: []
outPR.Results
ans=1×2 table
Price DV01
_______ ___________
0.04079 -0.00083163
Price Multiple SOFR Futures Using ratecurve
and Discount
Pricer
This example shows the workflow to price multiple OISFuture
instruments for one-month SOFR futures and three-month SOFR futures when you use a ratecurve
object and a Discount
pricing method.
Create ratecurve
Object
Create a ratecurve
object using ratecurve
for the underlying interest-rate curve for the OISFuture
instruments.
Settle = datetime(2019,9,15); Type = 'zero'; ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]'; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = Settle + ZeroTimes; myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = ratecurve with properties: Type: "zero" Compounding: -1 Basis: 0 Dates: [10x1 datetime] Rates: [10x1 double] Settle: 15-Sep-2019 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Create OISFuture
Instrument Objects for SOFR Futures
Use fininstrument
to create an OISFuture
instrument object for one-month SOFR futures.
HFDates = datetime(2021,3,1) + caldays(0:3)'; HistFixing = timetable(HFDates,[0.02;0.04;0.04;0.02]); % Data from the following: https://www.cmegroup.com/trading/interest-rates/stir/one-month-sofr_quotes_globex.html Prices_1M = [99.97 99.96 99.95]'; Maturity_1M = lbusdate(2021,[3 4 5]',[],[],'datetime'); StartDate_1M = fbusdate(2021,[3 4 5]',[],[],'datetime'); FutInstruments_1M = fininstrument("OISFuture",Maturity=Maturity_1M ,QuotedPrice=Prices_1M,StartDate=StartDate_1M,Method="Average", ... HistoricalFixing=HistFixing,Name="1MonthSOFRFuture")
FutInstruments_1M=3×1 OISFuture array with properties:
QuotedPrice
Method
Basis
StartDate
Maturity
Notional
BusinessDayConvention
Holidays
ProjectionCurve
HistoricalFixing
Name
Use fininstrument
to create an OISFuture
instrument object for three-month SOFR futures.
% Data from the following: https://www.cmegroup.com/trading/interest-rates/stir/three-month-sofr_quotes_globex.html Prices_3M = [99.92 99.895 99.84 99.74]'; Dates_3M_Maturity = thirdwednesday([6 9 12 3]',[2021 2021 2021 2022]','datetime'); Dates_3M_Start = thirdwednesday([3 6 9 12]',2021,'datetime'); FutInstruments_3M = fininstrument("OISFuture",Maturity=Dates_3M_Maturity, ... QuotedPrice=Prices_3M,StartDate=Dates_3M_Start,HistoricalFixing=HistFixing,Name="3MonthSOFRFuture")
FutInstruments_3M=4×1 OISFuture array with properties:
QuotedPrice
Method
Basis
StartDate
Maturity
Notional
BusinessDayConvention
Holidays
ProjectionCurve
HistoricalFixing
Name
Create Discount
Pricer Object
Use finpricer
to create a Discount
pricer object and use the ratecurve
object for the 'DiscountCurve'
name-value pair argument.
outPricer = finpricer("Discount",DiscountCurve=myRC)
outPricer = Discount with properties: DiscountCurve: [1x1 ratecurve]
Price OISFuture
Instruments for SOFR Futures
Use price
to compute the prices for the OISFuture
instruments for one-month and three-month SOFR futures.
Price = price(outPricer,[FutInstruments_1M ; FutInstruments_3M])
Price = 7×1
0.0527
0.0509
0.0439
0.1511
0.1520
0.1791
0.1687
More About
OIS Future
An OIS future is a futures contract that has an overnight index swap as the underlying asset.
To support the LIBOR transition, the OISFuture
instrument
supports the adoption of alternative reference rates (ARR) like SOFR, EONIA, SONIA,
SARON, and TONAR. The ARRs replace the LIBOR benchmark, which underpins many loans,
mortgages, bonds, and interest-rate derivatives.
The secured overnight financing rate (SOFR) ARR tracks the overnight effective
federal funds rate (which is a benchmark of the US short-term interest rate market).
SOFR is becoming the benchmark rate for dollar-denominated derivatives and loans.
Other countries have sought their own alternative rates, such as SONIA and EONIA. In
the US, SOFR futures mature in three months and the start dates for an SOFR future
coincide with international money market (IMM) expiration dates. The SOFR futures
trade on maturity dates of money market futures and money market futures options,
which are set by futures and options exchanges. These dates are always the third
Wednesday of the last month of the quarter (March, June, September, December). You
can determine these third Wednesday dates using thirdwednesday
. For an example, see
Compute LIBOR Fallback.
Version History
Introduced in R2021bR2022b: Serial date numbers not recommended
Although OISFuture
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
Functions
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)