parswaprate
Description
computes a par swap rate for a outRate
= parswaprate(SwapObject
,inCurve
)Swap
and a OvernightIndexedSwap
instrument object.
Examples
Compute Par Swap Rate for Vanilla Swap
Instrument Using ratecurve
and Discount
Pricer
This example shows the workflow to compute the par swap rate for a vanilla Swap
instrument when you use a ratecurve
and a Discount
pricing method.
Create ratecurve Object
Create a ratecurve
object using ratecurve
for the underlying interest-rate curve for the Swap
instrument.
Settle = datetime(2018,3,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-Mar-2018 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Create Swap
Instrument Object
Use fininstrument
to create a vanilla Swap
instrument object.
Swap = fininstrument("Swap",'Maturity',datetime(2020,9,15),'LegRate',[0.022 0.019 ],'LegType',["float","fixed"],'ProjectionCurve',myRC,'Name',"swap_instrument")
Swap = Swap with properties: LegRate: [0.0220 0.0190] LegType: ["float" "fixed"] Reset: [2 2] Basis: [0 0] Notional: 100 LatestFloatingRate: [NaN NaN] ResetOffset: [0 0] DaycountAdjustedCashFlow: [0 0] ProjectionCurve: [1x2 ratecurve] BusinessDayConvention: ["actual" "actual"] Holidays: NaT EndMonthRule: [1 1] StartDate: NaT Maturity: 15-Sep-2020 Name: "swap_instrument"
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 Swap
Instrument
Use price
to compute the price and sensitivities for the vanilla Swap
instrument.
[Price, outPR] = price(outPricer, Swap,["all"])
Price = 2.4066
outPR = priceresult with properties: Results: [1x2 table] PricerData: []
outPR.Results
ans=1×2 table
Price DV01
______ _________
2.4066 -0.024499
Compute the par swap rate using parswaprate
.
outRate = parswaprate(Swap,myRC)
outRate = 0.0287
Compute Par Swap Rate for Multiple Vanilla Swap
Instruments Using ratecurve
and Discount
Pricer
This example shows the workflow to compute the par swap rate for multiple vanilla Swap
instruments when you use a ratecurve
and a Discount
pricing method.
Create ratecurve Object
Create a ratecurve
object using ratecurve
for the underlying interest-rate curve for the Swap
instrument.
Settle = datetime(2019,4,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-Apr-2019 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Create Swap
Instrument Object
Use fininstrument
to create a vanilla Swap
instrument object for three Swap instruments.
Swap = fininstrument("Swap",'Maturity',datetime([2020,4,15 ; 2021,4,15 ; 2024,4,15]),'LegRate',[0.022 0.019 ],'LegType',["float","fixed"],'ProjectionCurve',myRC,'Name',"swap_instrument")
Swap=3×1 Swap array with properties:
LegRate
LegType
Reset
Basis
Notional
LatestFloatingRate
ResetOffset
DaycountAdjustedCashFlow
ProjectionCurve
BusinessDayConvention
Holidays
EndMonthRule
StartDate
Maturity
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 Swap
Instruments
Use price
to compute the prices and sensitivities for the vanilla Swap
instruments.
[Price, outPR] = price(outPricer, Swap,["all"])
Price = 3×1
0.8473
1.8067
7.2322
outPR=1×3 priceresult array with properties:
Results
PricerData
outPR.Results
ans=1×2 table
Price DV01
_______ __________
0.84728 -0.0099228
ans=1×2 table
Price DV01
______ _________
1.8067 -0.019656
ans=1×2 table
Price DV01
______ ________
7.2322 -0.04664
Compute the par swap rate for each of the three Swap instruments using parswaprate
.
outRate = parswaprate(Swap(1),myRC)
outRate = 0.0275
outRate = parswaprate(Swap(2),myRC)
outRate = 0.0281
outRate = parswaprate(Swap(3),myRC)
outRate = 0.0338
Use Par Swap Rate for Swap
Instrument to Calculate Modified Duration
Since R2024a
This example shows the workflow to compute the par swap rate for a Swap
instrument when you set the ProjectionCurve property and then compute the modified duration for the Swap
instrument.
Create ratecurve
Objects for Discount and Projection Curves
Create a ratecurve
object using ratecurve
for the discount and projection curves for the Swap
instrument.
Settle = datetime(2023,8,23);
Type = "zero";
CurveTimes = [calmonths([1 2 3 4 6]) calyears([1 2 3 5 7 10 20 30])]';
CurveDates = Settle + CurveTimes;
DiscRates = [5.54 5.53 5.57 5.56 5.55 5.35 4.95 4.64 4.36 4.30 4.19 4.46 4.27]'/100;
ProjRates = DiscRates + .01;
RC_Disc = ratecurve(Type,Settle,CurveDates,DiscRates);
RC_Proj = ratecurve(Type,Settle,CurveDates,ProjRates);
Create Swap
Instrument Object
Use fininstrument
to create a Swap
instrument object.
SwapMaturity = Settle + calyears(10); SwapLegType = ["float","fixed"]; SwapLegRate = [0 0]; SwapLegReset = [2 2]; Swap = fininstrument("Swap",Maturity=SwapMaturity,LegRate=SwapLegRate,LegType=SwapLegType,ProjectionCurve=RC_Proj)
Swap = Swap with properties: LegRate: [0 0] LegType: ["float" "fixed"] Reset: [2 2] Basis: [0 0] Notional: 100 LatestFloatingRate: [NaN NaN] ResetOffset: [0 0] DaycountAdjustedCashFlow: [0 0] ProjectionCurve: [1x2 ratecurve] BusinessDayConvention: ["actual" "actual"] Holidays: NaT EndMonthRule: [1 1] StartDate: NaT Maturity: 23-Aug-2033 Name: ""
Compute Par Swap Rate
Compute the par swap rate using parswaprate
.
ParSwapRate = parswaprate(Swap,RC_Disc);
Create Swap
Instrument Object Using Par Swap Rate
Use fininstrument
to create a Swap
instrument object using the ParSwapRate
for the LegRate of the Swap
fixed leg.
Swap_Par = fininstrument("Swap",Maturity=SwapMaturity,LegRate=[0 ParSwapRate],LegType=SwapLegType,ProjectionCurve=RC_Proj)
Swap_Par = Swap with properties: LegRate: [0 0.0529] LegType: ["float" "fixed"] Reset: [2 2] Basis: [0 0] Notional: 100 LatestFloatingRate: [NaN NaN] ResetOffset: [0 0] DaycountAdjustedCashFlow: [0 0] ProjectionCurve: [1x2 ratecurve] BusinessDayConvention: ["actual" "actual"] Holidays: NaT EndMonthRule: [1 1] StartDate: NaT Maturity: 23-Aug-2033 Name: ""
Create Discount
Pricer Object
Use finpricer
to create a Discount
pricer object and use the discount curve ratecurve
object for the 'DiscountCurve'
name-value argument.
Pricer_Disc = finpricer("Discount",DiscountCurve=RC_Disc)
Pricer_Disc = Discount with properties: DiscountCurve: [1x1 ratecurve]
Price Swap
Instrument
Use price
to compute the price and sensitivities for the "par" Swap
instrument.
[Price,outPR] = price(Pricer_Disc,Swap_Par,"all");
Compute Modified Duration for Swap
Compute the modified duration for the Swap
by computing for each leg and then use the relation between modified duration and DV01. Modified duration measures the percentage change in price for a given change in yield, while DV01 quantifies the dollar value change in price for a one basis point change in yield.
Swap_RecLeg = fininstrument("FloatBond",Maturity=SwapMaturity,Spread=SwapLegRate(1),ProjectionCurve=RC_Proj,Reset=SwapLegReset(1)); Swap_PayLeg = fininstrument("FixedBond",Maturity=SwapMaturity,CouponRate=ParSwapRate,Period=SwapLegReset(2)); [Price_Leg,outPR_Leg] = price(Pricer_Disc,[Swap_RecLeg;Swap_PayLeg],"all"); ModifiedDuration = outPR_Leg(1).Results.DV01/.01/.01/Price_Leg(1) - outPR_Leg(2).Results.DV01/.01/.01/Price_Leg(2); fprintf('Par Swap Rate: %f\n', ParSwapRate*100);
Par Swap Rate: 5.286657
fprintf('Par NPV: %f\n', Price);
Par NPV: 0.000000
fprintf('Par DV01: %f\n', outPR.Results.DV01);
Par DV01: -0.082864
fprintf('Par MD: %f\n', ModifiedDuration);
Par MD: -7.659812
Compute Par Swap Rate for Overnight Indexed Swap Instrument
Since R2024a
This example shows the workflow to price an OvernightIndexedSwap
instrument when you use a ratecurve
object and a Discount
pricing method and then use parswaprate
to compute the par swap rate.
Create ratecurve
Object
Create a ratecurve
object using ratecurve
for the underlying interest-rate curve for the OvernightIndexedSwap
instrument.
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 OvernightIndexedSwap
Instrument Object
Use fininstrument
to create an OvernightIndexedSwap
instrument object.
OvernightIndexedSwap = fininstrument("OvernightIndexedSwap",Maturity=datetime(2022,9,15),LegRate=[0.022 0.019 ],LegType=["float","fixed"],Notional=100,ProjectionCurve=myRC,Name="overnight_swap_instrument")
OvernightIndexedSwap = OvernightIndexedSwap with properties: LegRate: [0.0220 0.0190] LegType: ["float" "fixed"] Reset: [2 2] Basis: [0 0] Notional: 100 HistoricalFixing: [0x0 timetable] ResetOffset: [0 0] PaymentDelay: 0 ProjectionCurve: [1x1 ratecurve] BusinessDayConvention: ["actual" "actual"] Holidays: NaT EndMonthRule: [1 1] DaycountAdjustedCashFlow: [0 0] StartDate: NaT Maturity: 15-Sep-2022 Name: "overnight_swap_instrument"
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 OvernightIndexedSwap
Instrument
Use price
to compute the price and sensitivities for the OvernightIndexedSwap
instrument.
[Price, outPR] = price(outPricer,OvernightIndexedSwap,"all")
Price = 3.0797
outPR = priceresult with properties: Results: [1x2 table] PricerData: []
outPR.Results
ans=1×2 table
Price DV01
______ _________
3.0797 -0.029334
Compute Par Swap Rate
Use parswaprate
to compute the par swap rate for the OvernightIndexedSwap
instrument. The par swap rate is the rate that renders a swap value equal to zero.
outRate = parswaprate(OvernightIndexedSwap,myRC)
outRate = 0.0294
Input Arguments
SwapObject
— Swap object
Swap
object | OvernightIndexedSwap
object
Swap object, specified using a previously created Swap
or OvernightIndexedSwap
instrument object.
Note
If the SwapObject
is a vector of instruments, you must use
parswaprate
separately with each instrument.
Data Types: object
inCurve
— Rate curve
ratecurve
object
Rate curve, specified as a previously created ratecurve
object.
Note
If you input a projection curve using the Swap
instrument
argument for ProjectionCurve, use the
discount curve as the inCurve
input. For more information, see
Use Par Swap Rate for Swap Instrument to Calculate Modified Duration
Data Types: object
Output Arguments
outRate
— Par swap rate
decimal
Par swap rate, returned as a decimal.
More About
Par Swap Rate
The par swap rate is the rate that renders a swap value equal to zero.
In other words, the par swap rate is the value of the fixed rate that gives the swap a zero present value, or the fixed rate that makes the value of both legs equal (that is, the value of the fixed leg and the value of the floating leg).
Version History
Introduced in R2020bR2024a: Support for OvernightIndexedSwap
You can use parswaprate
with an OvernightIndexedSwap
instrument.
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 (한국어)