# From Libor Curve rates to “forward” zero-coupons

I am provided a 6M euribor curve, constructed from FRA's and swaps of tenor 6M on the euro, as well an EONIA curve, constructed from zero-coupons EONIA swaps. Both curves are provided as functions $$d\mapsto \textrm{rate at }d$$ which to a date $$d$$ associate the rate at $$d$$. (Imagining interpolations modes have been chosen.)

With these to curves, I want to calculate a 1Y forward 10Y swap rate. For this I need the discount zero coupons $$Z_d$$ and the "forward" zero-coupons $$Z_f$$.

I use $$Z_d (t) = e^{-\textrm{yearfraction(today},t)\times{\textrm{"discount rate at }t"}}$$ to get a discout factor from the EONIA rate curve.

By "forward" zero-coupon I mean the zero-coupons used to calculate the forward 6M euribor rates as : $$L_0^{T_{i-1}, T_i} = \frac{Z_f(T_{i-1}) - Z_f(T_i)}{\delta_i Z_f(T_i)}$$

is the forward euribor rate from now (0) for the future 6M period $$[T_{i-1}, T_i]$$ of year fraction $$\delta_i$$.

My question is : how do I calculate the $$Z_f$$'s from the rates I am given ?

• I edited the question when I wanted to answer, please refuse my edit – ujsgeyrr1f0d0d0r0h1h0j0j_juj Jun 18 at 15:21

Actually depending upon how you want to define your curve it might actually be mathematically impossible to create a set of discount factors from a given set of rates.

As an anecdotal sidenote the trading bank I worked for constructed a set of forecast rate only curves, for which discount factors did not exist.

Let me describe why. Suppose you have the following four value dates:

Tues 28th August 2018 for 6M
Wed 29th August 2018 for 6M
Thur 30th August 2018 for 6M
Frida 31th August 2018 for 6M

Under Libor definitions each of these has a value end date on Thurs 28th February 2019.

Now if you have already have a discount factor for each of the previous 4 dates and then you seek a unique discount factor for the 28th February to satisfy the 4 known rates for each of those dates you will find it impossible.

On legitimate reason this might occur is if, for example, you add an 'end-of-month' premium to the rate on 31st August of 1 basis point, this would skew the discount factor a reasonable amount.

You can introduce some other scheme to suggest that 6M rates are always 182 days apart so you create unique discount factors for each rate, but this is just a polyfiller solution, it is better to just re-code your swap functions to operate on the principal of a rates-curve rather than a discount-curve. You have more direct control over the rates curve for more accurate market pricing; no one trades FRAs based on discount factors they trade FRAs based on rates.

Hence the reason my bank developed forecast rate only curves.

• So you have, at the bank you worki, for each tenor $x$, a curve $(d_i,r_i)_{i=1,\ldots,N}$ where $r_i$ is the $x$-Libor forward rate for the period $\left[d_i, d_i + x\right]$, with given conditions ? – ujsgeyrr1f0d0d0r0h1h0j0j_juj Jun 19 at 12:16
• Correct, colloquially they were known as 'pure forecast curves' for the reason they could purely calculate forecast rates. – Attack68 Jun 19 at 12:28

I have been told that you are wrong even for the EONIA case, and that in fact, in both cases, one has : $$ZC(t) = e^{-\textrm{year fraction(t,today)} \times \textrm{rate at }t}$$ if $$\textrm{year fraction(t,today)} < 1$$ and that $$ZC(t) = \frac{1}{\left(1 + \textrm{year fraction(t,today)} \times \textrm{rate at }t\right)^{\textrm{year fraction(t,today)}}}$$ if $$\textrm{year fraction(t,today)} \geq 1$$, but as often, I am never sure of anything regarding rates conventions ...
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 1, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 14, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "math_score": 0.7650448679924011, "perplexity": 1761.2338618234376}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 20, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "warc_path": "s3://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027314353.10/warc/CC-MAIN-20190818231019-20190819013019-00175.warc.gz"}