Rate propagation – Curve relationships

When working on Murex rate curves, one quickly faces the problem of curve relationships and what is called as rate propagation. Once understood, it seems very simple. But before you get to that “Eureka” point, it might be confusing. So let’s dig into it and hopefully bring you some “Eureka” moment!

First of all, rate propagation only makes sense when you are working with multiple curves in the same currency. The rate propagation determines how are the other curves going to move when one curve moves. The setting sits under the rates general settings and can take 3 different values:

– Keep market quotes constant (KMQC)
– Keep zero rates constant (KZCC)
– Keep market quotes constant/Impact sensitivities

The first one and the 3rd one have the same results when perturbing one curve but the 3rd one tries to show the sensitivities due to other curves perturbation. Effectively you should hesitate between the second and the third one, as the first one does not show you the right sensitivities.

In the mode KMQC, the rate curves are recalibrated after each perturbation. Let’s take the following example:


USD DISC has no dependency on other curves. It can self calibrate.
USD 3M depends on USD DISC to calibrate its swap pillars as they are estimated on USD 3M but discounted on USD DISC. USD 6M depends on the 2 other curves as it contains basis swaps estimated on both 3M and 6M curves and discounted on DISC curve.

Rate propagation mode : KZCC

In the mode KZCC, you basically assumes that if any rate changes, then the zero rates of the other curves do not change. So if your USD DISC curve changes, then the zero coupon rates of both USD 3M and USD 6M will remain the same. It means that the market rates of the USD 3M and 6M curves will change. Your ZC rate for the curves does not change, so the estimated rates will remain the same. But your discounting rate has changed (USD DISC has changed), so you need to change the fixed leg rate (aka your market quote) or your margin (basis swap market quotes) so that the NPV of the swaps remains 0.

Rate propagation mode : KMQC

In this mode, you assume that the market quotes remain the same when one curve is perturbed. So your ZC rates should be recomputed. Let’s see why! Using the same example as above and perturbing the USD DISC curve will yield the following:
– USD 3M ZC rates will change
– USD 6M ZC rates will change

When you’ve changed your USD DISC curve, the discounting rates will change. So in the case of your IRS in the 3M curve, the discounting rate will change, the fixed leg rate remains constant (Keep Market Quote Constant!), so your fixed leg has a different NPV. As such, you need to modify your estimation rate (USD 3m ZC) to reach a NPV of 0.
Similarly for the 6M curve, the 3M leg will have changed NPV, the 6M leg has different discounting rates, so you need to adjust the 6m estimation rates to keep a NPV of 0, so the 6M zero rates will change.

STOP there. There are more complexities that you can lay on top of these propagation modes but the above will always stay true: you need to maintain a NPV of 0 in every instrument in your curves and that’s the only way to do it.

1 more question:

I can’t reproduce the same behavior with manual shifting, why is it so?

What I wrote above is true and what should happen BUT sometimes the variation in values are actually quite small or 0. For instance, in KZCC, if your USD 3M curve is quite flat, then you won’t see much difference after the change in the discounting rates. Why? All flows fall on the same date for the fixed and floating leg. So you can sum both flows before applying the discount factor. If your estimation curve is flat, then prior to the shift of the discount rate, your sum of the 2 flows was already close to 0. As such, the impact of the discount factor is limited.

Rate relationships have changed a lot in the more recent versions with bugs and enhancements. So if there is something you can’t explain check with someone with more experience or a more recent version if you can.

Questions and comments are more than welcome!

10 thoughts on “Rate propagation – Curve relationships”

  1. Does somebody know how the Rate propagation mode KMQC is perturbing the curve? It is It is affecting the discount factors in the curve directly? It is affecting the market quotes one at the time? In the last case, i have to recalibrate all of the curve (and the other curves related with that i perturbed) for each move in the market quotes?

    1. Hello Gabriel,

      Sorry for the late answers, but that’s the pleasure of holidays: you take your time! Back to your question, in mode KMQC, the market quotes are constant for all curves, the Df and ZC rates are always recomputed. So if you perturb one curve, the curves depending on it will be recalibrated to take into account the change you made.

      Let me know if you need more info!

  2. Manu, thanks for your answer. Let me make another question: how it works if i getting the sensitivity to a par curve? Thanks in advance.

    1. Hey Gabriel,

      Alright, it is a 2 part answer. The first thing is that when you choose keep market quotes constant, you can choose precisely either keep market quotes constant or keep market quotes constant/impact sensitivities. The later will show you the actual sensitivity not only coming purely from the curve but also from other curves being dependent on it.
      Part two, in the viewer, you have a cross curve sensitivity node which will split the sensitivity into pure current curve sensitivity and cross curve sensitivity. Last time I looked at it (it has been some time), there were 2 layers: the sensitivity of the sensitivity of the sensitivity (basically in the structure, to calibrate certain curves, you needed 3~4 curves). And that effect was missing : out of a massive position, the difference <.01% from the total sensitivity. Not sure if it has been added since.

  3. Hi Manu, in pricing screen of USD LIBOR Q 3M. I bumped USD DISC curve market quote in pop up market data. In KMQC mode, I expect to see the rate estimate of USD LIBOR 3M to change, as the zero coupon rate is changed. I open rate details, the discount rate remains the same. Is this correct? Where exactly to observe the rate/rate propagation?

    Second question is on the setting of rate/basis propagation. Could you please explain how does this setting work? Thanks.

    1. Hi Nirta,

      That exactly the sort of questions I love to dig into, but without having access to your system, it is a bit hard to judge. Just make sure in the pricing of your swap that the estimation rates for the libor are not changing.
      Then the questions you need to look into: Is USD LIBOR 3M estimation curve sensitive to USD DISC? Is it a basis curve?

      As for rate/basis propagation, it is actually quite straight forward. If you look on the pillars of the basis curve, Murex computes the ZC spreads so that total ZC rate = spread ZC + underlying curve rate. If your underlying curve moves, do you want the spread ZC to remain constant (Keep basis zero coupons constant) or do you want the ZC spread to be recomputed (the market quotes on the basis curve remaining constant)?

      1. Thanks a lot Manu, awesome!

        Maybe I give a bit detail on the pricing I’m testing
        1. USD fix leg
        Estimation : USD DISC
        Discounting : USD DISC

        2. USD LIBOR 3M floating leg
        Estimation : USD LIBOR 3M
        It is non spread curve, pillar 1Y-15Y is Swap USD LIBOR 3M À with USD DISC Discounting. It is sensitive to USD DISC.
        Discounting : USD DISC.

        In KMQC mode, based on your explanation I should see my fix rate constant and my floating rate re-estimated?

        Thanks again.

        1. Hi Nirta,

          To be clear we’re just looking at how curve behaves but in your case, the ZC rates of the USD Disc are changing, the USD LIBOR 3M curve should change but probably not by much (you can open the curve and check the discount rates). But indeed by changing the USD Disc, your USD 3m forward rates will change (just a little probably).

  4. Hi Im trying to create a xccy basis curve using swap pts sheet, the 3m eur and 3m usd libor curve. I built a EUR FX curve and i set it up as a spread curve on top of the euribor 3m curve. However when i look at my dv01 risk, it seems that my euribor 3m curve does not have any risk. It only shows risk on my basis curve. I expect to have bs01 on the EUR FX and dv01 on my euribor 3m curve. Do you know if it has anything to do with the propagation settings? Or am i missing something else? Should i create a basis curve on top of the fx instead of setting up the fx curve as a basis?

    1. Hi Oliver,

      Yes you should see risk on the underlying curve (the 3m one). My first question would be more why do you expect to spread your xccy curve over the 3m estimation curve. If your xccy curve is using basis swaps on the longer term, you would then have an implied sensitivity to the 3m curves if you use float EUR 3M vs float USD 3M.
      These considerations aside, it shoud work nonetheless and if you spread your Xccy over the 3m curve, you should see risk on the 3m curve provided the 3m curve contributes in any way to the rate on the xccy curve. It’s a bit hard to tell without having a look at your environment but is your 3m curve spreading over the std curve? Then if they share instruments, the 3m curve would not contribute to anything on shared instruments pillar (for example 3m depo pillar) and the spread coming from the 3m curve would be 0.
      The other option is that the pillar you’re looking at is a currency basis swaps and the 3m estimation risk for the EUR leg is offsetting with the risk coming from the underlying curve.

Comments are closed.