How Curve Shifts and Fixing Choices Affect Swap DV01
Summary
The document examines how swap DV01 depends on curve construction and scenario settings. It challenges the idea that a Bloomberg sensitivity shift affects only the par swap curve: the accepted answer reports that both the swap and discount curves are shifted, and that the principal exchange convention can materially affect which leg carries the sensitivity. It also describes reproducing the sensitivity by revaluing under parallel up and down scenarios and comparing cash flows.
The response says the constant-versus-shifting Libor fixing choice changes the first cash flow and can alter the DV01 shown on the main screen, while a Greeks view may treat it differently. It recommends matching shifts to the instruments used to build the curve and explains that discount and forward curves are interdependent. A separate answer gives a simplified single-curve derivation and argues that fixed-leg sensitivity can approximate risk in that setting. These conclusions depend on product conventions, curve setup, and the platform's settings; the simplified derivation omits modern multi-curve details.
Key ideas
- Swap DV01 depends on which curves are shifted and on principal exchange conventions.
- Parallel up and down curve scenarios can be used to reproduce a finite-difference DV01.
- The Libor fixing setting affects the first cash flow and may change reported sensitivity.
- Discount and forward curves can be interdependent when constructed from market instruments.
- A simplified single-curve explanation may not capture multi-curve valuation effects.
Tags
Full text
# Fixed vs float swap interest rate risk
# Fixed vs float swap interest rate risk
I have some technical questions about what are the best settings in Bloomberg to calculate the interest rate risk of a swap.
When Bloomberg calculates the DV01, it simply bumps the par swap curve by +/-10bps, then calculates the difference in NPVs, and divides it by 20. When Bloomberg does this, it does not touch the discount curve, only the par swap curve is being shifted which itself changes the forward curve that is used for projecting the cash flows of the floating leg. This practically means that the NPV of the fixed leg remains unchanged, while the floating leg's NPV changes due to the change in the forward curve.
In reality when the par swap curve changes, usually the ois discount curve changes too, because there's some correlation between OIS and FRA rates. I guess this correlation is not taken into account when calculating interest rate risk?
There is another setting which bugs me. You can select 'constant libor fixing' or 'shifting libor fixing' for DV01 calculation. As for selecting the first option, the first coupon (the 3m or 6m member) of the par curve remains unchanged, which results in greater movements in the forward curve when the rest of the par curve is being shifted up/down. In the second choice, all ingredients of the par curve is allowed to shift for the DV01 calculation. Do you know which setting gives a DV01 that is closer to the "real life DV01"?
Thanks,
## Answer by AKdemy (score 4)
https://quant.stackexchange.com/a/70426
Contrary to your claims, Bloomberg bumps the swap curve AND the discount curve when computing DV01. Moreover, the principal exchange setting also has an impact.
Assuming a standard FXFL USD 3m Libor (same outcome for EUR or USD SOFR though), if you have Details – Additional Detail – principal exchange set to the default "Effective and Maturity" (or pretty much anything except Never), you get the DV01 on the fixed leg.
You can replicate DV01 in the scenario tab. Make sure you shift all curves - one scenario with -10bps, the other +10bps.
The cashflows in the screenshot can be seen by clicking on view Cashflow. We can compute this in Python like so:
```
down_net_PE = (-24454.83,95497.01,-58783.90,65908.58,-77714.03,52265.44,-79520.45,54765.44,-69018.65,61277.39,-71510.19,59417.18,-61798.17,66713.08,-61215.31,67744.04,-56719.93,69103.54,-55678.05,70553.77)
up_net_PE = (-24442.50,90152.58,-63632.96,60762.28,-82381.46,47178.37,-84696.57,46072.23,-73548.68,56223.43,-75730.07,54690.73,-66002.74,61679.37,-65255.04,62888.32,-60684.76,64056.32,-59536.51,65625.37)
print(f'Principal Down shift 10bps = {round(sum(down_net_PE),2)}')
print(f'Principal Up shift 10bps = {round(sum(up_net_PE),2)}')
DV01_PE = (sum(down_net_PE) - sum(up_net_PE))/20
print(f'DV01_PE = {round(DV01_PE,2)}')
```
The result is:
If you set principal exchange to never, you get this picture, where DV01 largely moves to the float leg:
You can get all casfhlows:
```
down1_pe = (
141895.94,
137882.74,
135031.58,
132253.10,
131947.95,
130129.08,
128556.34,
127029.73,
125607.28,
8976356.00
)
down2_pe = (
-24454.83,
-46398.93,
-58783.90,
-71974.16,
-77714.03,
-82766.14,
-79520.45,
-77487.65,
-69018.65,
-70670.56,
-71510.19,
-70711.90,
-61798.17,
-61843.27,
-61215.31,
-59285.69,
-56719.93,
-56503.73,
-55678.05,
-8905802.2
)
down1 = (
141895.94,
137882.74,
135031.58,
132253.10,
131947.95,
130129.08,
128556.34,
127029.73,
125607.28,
124239.47
)
down2 = (
-24454.83,
-46398.93,
-58783.90,
-71974.16,
-77714.03,
-82766.14,
-79520.45,
-77487.65,
-69018.65,
-70670.56,
-71510.19,
-70711.90,
-61798.17,
-61843.27,
-61215.31,
-59285.69,
-56719.93,
-56503.73,
-55678.05,
-53685.70
)
up1 = (141750.28,
137606.33,
134626.59,
131728.62,
131294.15,
129356.92,
127667.00,
126026.87,
124492.60,
123016.01
)
up2 = (
-24442.50,
-51597.70,
-63632.96,
-76844.06,
-82381.46,
-87448.22,
-84696.57,
-85656.39,
-73548.68,
-75070.72,
-75730.07,
-74666.20,
-66002.74,
-65987.64,
-65255.04,
-63138.56,
-60684.76,
-60436.28,
-59536.51,
-57390.63
)
up1_pe = (141750.28,
137606.33,
134626.59,
131728.62,
131294.15,
129356.92,
127667.00,
126026.87,
124492.60,
8887960.04
)
up2_pe = (
-24442.50,
-51597.70,
-63632.96,
-76844.06,
-82381.46,
-87448.22,
-84696.57,
-85656.39,
-73548.68,
-75070.72,
-75730.07,
-74666.20,
-66002.74,
-65987.64,
-65255.04,
-63138.56,
-60684.76,
-60436.28,
-59536.51,
-8822334.6
)
```
where _pe denotes with principal exchange (only difference is last value) and the number refers to the respective leg of the swap.
Manually computing the DV01's results in:
Which is identical to SWPM. The help page has a fairly lengthy explanation of the setting for Libor fixing. In a nutshell, the only difference is the first cashflow.
4668.53 - 252.31 = 4416.22
It does affect the DV01 on the main tab, but not the one in the Greeks section of the Risk tab. While stripping ICVS curves, the fixed first Libor rate is used. Hence, the choice for Libor fixing only affects sensitivity calculations.
If you are worried that the curves are designed from heterogeneous market instruments (Cash rate, Futures / FRAs, Par Swaps), you can use the Risk tab to define shifts on homogenous curves: if you shift Forwards (essentially assuming the curve is solely constructed using forward rates /FRAs), shift swaps (assuming only par swaps are used in curve construction), shift zeros.
Bottom line:
- BBG shifts also the discounting curve and does not leave it untouched
- If you want to be consistent with the way the swap curves are designed by default (and swaps are priced in BBG), you should shift the curve instruments and use constant libor. This should also be the swap defaults as defined in `SWDF DFLT`.
## Answer by user35980 (score 2)
https://quant.stackexchange.com/a/70994
Just a point of clarification in relation to the "OIS discounting curve" and the "par swap curve". The question is somewhat confusing because it seems to imply that these are disjointed "ingredient curves" and go into the valuation (of e.g. a Libor fix-float swap). The OIS discounting curve is actually used to construct the par swap rate curve itself (i.e. to compute the Libor forward rates of the par swap curve). The par swap curve sensitivity impacts the Libor forwards directly. The discounting curve sensitivity also impacts the Libor forward rates (and the hence the par swap curve), albeit indirectly. In this sense the two curves (and their sensitivities) are intertwined. While previous answers demonstrate that it's possible to distinguish between their independent sensitivities, it's important to keep this interdependence in context.
## Answer by Kurt G. (score 1)
https://quant.stackexchange.com/a/70355
Since I do not have Bloomberg I can only give a general comment.
Ingoring for simplicity the fact that we now have different curves for discounting and projecting forward floating rates, LIBOR basis and what not, the PV of the floating leg of the swap is $$\tag{1} {\rm PV}_{\text{float}}=1-P(0,T_n) $$ (assuming again for simplicity that the swap starts today and $P(0,T_n)$ is the discount factor from the swap maturity $T_n$). Likewise, the PV of the fixed leg is $$\tag{2} {\rm PV}_{\text{fix}}=\sum_{i=1}^n CP(0,T_i) $$ where $C$ is the fixed rate in the swap. Assuming for simplicity annual payments.
Theoretically, the interest rate risk of the swap is obtained by shifting each rate that was used to construct the discount factors $P(0,T_i)$ then revaluing the swap and then taking the PV difference.
What Bloomberg seems to do instead is to calculate the new fixed PV by shifting the fixed rate $C$. Even though it stays constant (it is a term of the trade) this is approximately valid because when all rates change that were used to construct the discount factors then in particular the fair swap rate for maturity $T_n$ will change. This fair swap rate is related to the discount factors by $$ C_{\text{fair}}=\frac{1-P(0,T_n)}{\sum_{i=1}^n P(0,T_i)} $$ which follows simply from ${\rm PV}_{\text{float}}={\rm PV}_{\text{fix}}$.
In practice it turns out that $C_{\text{fair}}$ changes a lot more than the individual discount factors do. Therefore, in practice it is a good assumption that
- ${\rm PV}_{\text{float}}$ doesn't change
- ${\rm PV}_{\text{fix}}$ changes by the ${\rm DVO1}(T_n)$ because \begin{align} {\rm PV}_{\text{fix}}'-{\rm PV}_{\text{fix}}&=\sum_{i=1}^n C'_{\text{fair}}P(0,T_i)- \sum_{i=1}^n C_{\text{fair}}P(0,T_i)\\ &=\sum_{i=1}^n \underbrace{(C_{\text{fair}}'-C_{\text{fair}})}_{\text{ typically 1 or 10 bps}} P(0,T_i)={\rm DVO1}(T_n)\,. \end{align} This is applicable to $C$ as well if we assume that this changes by the same amount as the swap rates are changing that are used to build the discount factors.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.