|
From: isilay e. <ero...@gm...> - 2020-10-12 14:20:34
|
Dear David I get it now, thank you
Well then, if I revise my question as follows;
Without linking to Euribor or libor index, if I load the zero yield curves
of these indexes into python with their tenors
What if I create forward cash flows by obtaining forward rates for floatİng
products from these zero coupon curves?
David, you had a suggestion for me, but I didn't quite understand this
solution.
Thanks for your help and answers,
On 12 Oct 2020 Mon at 16:24 David Duarte <nh...@gm...> wrote:
> Hi,
>
> You seem to be misinterpreting what this line does:
>
> ql.IborIndex('MyIndex', ql.Period('6m'), 2, ql.TRYCurrency(), ql.TARGET(),
> ql.ModifiedFollowing, True, ql.Actual360())
>
> It does create that named index and you check that like this for example:
> ql.IndexManager.instance().histories()
>
> But it is not a method/attribute/class of QuantLib so you should use it as:
>
> index = ql.IborIndex('MyIndex', ql.Period('6m'), 2, ql.TRYCurrency(),
> ql.TARGET(), ql.ModifiedFollowing, True, ql.Actual360(), yts)
>
>
>
>
>
> On Mon, 12 Oct 2020 at 14:15, isilay erol <ero...@gm...> wrote:
>
>> hello, if I wanted to create an index from my own zero curve for TL and I
>> wanted to link it in floating bon, I got an error like this.
>>
>>
>>
>> ql.IborIndex('MyIndex', ql.Period('6m'), 2, ql.TRYCurrency(),
>> ql.TARGET(), ql.ModifiedFollowing, True, ql.Actual360())
>>
>>
>>
>> Error message:
>>
>> “AttributeError: module 'QuantLib' has no attribute 'MyIndex6M'
>>
>>
>>
>> import QuantLib as ql
>>
>> from pandas import DataFrame
>>
>>
>>
>>
>>
>> dates = [
>>
>> '30.12.2016','29.01.2017', '31.03.2017', '30.06.2017', '29.09.2017',
>> '30.12.2017',
>>
>> '30.12.2018', '30.12.2019', '30.12.2020', '30.12.2021',
>>
>> '30.12.2022', '30.12.2023', '30.12.2024', '30.12.2025', '30.12.2026']
>>
>>
>>
>> zeros = [
>>
>> 0.000000,0.0693795966991162, 0.0759095626003495,0.0841499536866119,
>> 0.0904620831158592, 0.0951565316374134, 0.103938304795234,
>>
>> 0.106710404148259, 0.107861984374564,
>>
>> 0.108326014217227, 0.10842920241869, 0.108326911551829,
>> 0.108103450370549, 0.107821584741388, 0.107525270883584]
>>
>>
>>
>>
>>
>>
>>
>> ql.Settings.instance().evaluationDate = ql.Date(30,12,2016)
>>
>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>
>> dayCounter = ql.Actual360()
>>
>>
>>
>> zCurve = ql.ZeroCurve(qlDates, zeros, ql.ActualActual(), ql.TARGET())
>>
>>
>>
>> ql.IborIndex('MyIndex', ql.Period('6m'), 2, ql.TRYCurrency(),
>> ql.TARGET(), ql.ModifiedFollowing, True, ql.Actual360())
>>
>>
>>
>> print(ql.IborIndex('MyIndex', ql.Period('6m'), 2, ql.TRYCurrency(),
>> ql.TARGET(), ql.ModifiedFollowing, True, ql.Actual360()))
>>
>>
>>
>> yts = ql.YieldTermStructureHandle(zCurve)
>>
>> schedule = ql.MakeSchedule(ql.Date(2,2,2011), ql.Date(24,1,2018),
>>
>> ql.Period('6m'))
>>
>> index=ql.MyIndex6M(yts)
>>
>> index.addFixing(ql.Date(29,7,2016), 0.0487, True)
>>
>> bond = ql.FloatingRateBond(2,100, schedule, ql.MyIndex(yts),
>>
>> ql.Actual360())
>>
>> On 9 Oct 2020 Fri at 15:28 isilay erol <ero...@gm...> wrote:
>>
>>> Dear David,
>>>
>>>
>>>
>>> First of all, thank you for your detailed answer.
>>>
>>>
>>>
>>> index.addFixing(ql.Date(29,7,2016), 0.0487, True) query worked
>>>
>>> But I couldn’t solve my other problem.
>>>
>>> I may not be able to express myself or understand your example.
>>>
>>> I will explain below what I did step by step;
>>>
>>> · firstly, I put dates and rates on Anaconda python (this zero
>>> yield curve)
>>>
>>> · Secondly, I determined evaluation date, I changed the date
>>> format.
>>>
>>> · Then it was created as a zero coupon curve "zCurve".
>>>
>>> · After this stage, building the floating rate bond object and
>>> inspect the rate on the cashflows;
>>>
>>> · There is no problem with the following two lines;
>>>
>>> § yts = ql.YieldTermStructureHandle (zCurve)
>>>
>>> § schedule = ql.MakeSchedule (ql.Date (15,6,2020), ql.Date
>>> (15,6,2021), ql.Period ('6m'))
>>>
>>>
>>>
>>> but when I delete “ql.Euribor6M (yts)“in the index section and replace
>>> it with yts.linkTo (zCurve), the error message is occured
>>>
>>> Briefly, I want to make the index statement independent from Euribor or
>>> Libor and tie it to my zero coupon yield curve.
>>>
>>>
>>>
>>> Also in the next step, my goal is to remove the following "ql.Euribor6M
>>> (yts)" statement and not to use it in the same way in the query (I think
>>> this will be fixed automatically if I can fulfill my request above.)
>>>
>>> bond = ql.FloatingRateBond (2,100, program, ql.Euribor6M (yts),
>>>
>>> ql.Actual360 ())
>>>
>>>
>>>
>>> As a result, what should I substitute for ql.Euribor6M (yts) in the
>>> query below?
>>>
>>>
>>>
>>> Thank you very much,
>>>
>>>
>>>
>>> import QuantLib as ql
>>>
>>> from pandas import DataFrame
>>>
>>>
>>>
>>>
>>>
>>> dates = [
>>>
>>> '30.12.2016','29.01.2017', '31.03.2017', '30.06.2017', '29.09.2017',
>>> '30.12.2017',
>>>
>>> '30.12.2018', '30.12.2019', '30.12.2020', '30.12.2021',
>>>
>>> '30.12.2022', '30.12.2023', '30.12.2024', '30.12.2025', '30.12.2026']
>>>
>>>
>>>
>>> zeros = [
>>>
>>> 0.000000,0.0693795966991162, 0.0759095626003495,0.0841499536866119,
>>> 0.0904620831158592, 0.0951565316374134, 0.103938304795234,
>>>
>>> 0.106710404148259, 0.107861984374564,
>>>
>>> 0.108326014217227, 0.10842920241869, 0.108326911551829,
>>> 0.108103450370549, 0.107821584741388, 0.107525270883584]
>>>
>>>
>>>
>>> ql.Settings.instance().evaluationDate = ql.Date(30,12,2016)
>>>
>>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>>
>>> dayCounter = ql.Actual360()
>>>
>>>
>>>
>>> zCurve = ql.ZeroCurve(qlDates, zeros, ql.ActualActual(), ql.TARGET())
>>>
>>>
>>>
>>> yts = ql.YieldTermStructureHandle(zCurve)
>>>
>>> schedule = ql.MakeSchedule(ql.Date(2,2,2011), ql.Date(24,1,2018),
>>>
>>> ql.Period('6m'))
>>>
>>> index = ql.Euribor6M(yts)
>>>
>>> index.addFixing(ql.Date(29,7,2016), 0.0487, True)
>>>
>>> bond = ql.FloatingRateBond(2,100, schedule, ql.Euribor6M(yts),
>>>
>>> ql.Actual360())
>>>
>>>
>>>
>>> dates = [ c.date() for c in bond.cashflows() ]
>>>
>>> cfs = [ c.amount() for c in bond.cashflows() ]
>>>
>>> DataFrame(list(zip(dates, cfs)),
>>>
>>> columns = ('date','amount'),
>>>
>>> index = range(1,len(dates)+1))
>>>
>>> On 9 Oct 2020 Fri at 11:19 David Duarte <nh...@gm...> wrote:
>>>
>>>> Hi,
>>>>
>>>> You can either clear the fixings or use the optional boolean third
>>>> parameter on the addFixing method to explicitly overwrite the existing
>>>> value:
>>>>
>>>> index.addFixing(ql.Date(6,ql.March,2019), 0.003, True)
>>>>
>>>>
>>>> On the other question, the parameter for the index is a
>>>> YieldTermStructureHandle and you can create one and then link to whichever
>>>> curve you wish to use.
>>>> Maybe this simple example will help you understand:
>>>>
>>>> yts = ql.RelinkableYieldTermStructureHandle()
>>>> index = ql.Euribor6M(yts)
>>>>
>>>> crv1 = ql.FlatForward(2, ql.TARGET(), 0.05, ql.Actual360())
>>>> yts.linkTo(crv1)
>>>> print(index.fixing(ql.Date(15,12,2020)))
>>>>
>>>> crv2 = ql.FlatForward(2, ql.TARGET(), 0.02, ql.Actual360())
>>>> yts.linkTo(crv2)
>>>> print(index.fixing(ql.Date(15,12,2020)))
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, 9 Oct 2020 at 08:38, isilay erol <ero...@gm...> wrote:
>>>>
>>>>> As you said "index.clearFixings ()" command worked. Thank you very
>>>>> much.
>>>>>
>>>>> Well, there is one more basic point that I cannot understand. How can
>>>>> I link the index directly to my index curve?
>>>>>
>>>>> In all the examples I saw on the internet like in the following ones,
>>>>>
>>>>> "index = ql.Euribor6M ()"
>>>>>
>>>>> "index = ql.Euribor3M ()"
>>>>>
>>>>> or I saw the Libor version of this.
>>>>>
>>>>>
>>>>>
>>>>> Actually, my zero coupon should be an index curve, right?
>>>>>
>>>>>
>>>>>
>>>>> In my query how can I create the bridge between my index and index
>>>>> curve zCurve?
>>>>>
>>>>>
>>>>>
>>>>> (the part I would like to change: index = ql.Euribor6M(yts))
>>>>>
>>>>>
>>>>>
>>>>> Thank you very much for your help,
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> import QuantLib as ql
>>>>>
>>>>> from pandas import DataFrame
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> dates = [
>>>>>
>>>>> '07-05-2019', '11-11-2019', '09-12-2019', '09-01-2020',
>>>>> '10-02-2020',
>>>>>
>>>>> '09-03-2020', '09-04-2020', '11-05-2020', '09-06-2020',
>>>>>
>>>>> '09-07-2020', '10-08-2020', '09-09-2020', '09-10-2020',
>>>>> '09-11-2020',
>>>>>
>>>>> '10-05-2021', '09-05-2022', '09-05-2023', '09-05-2024']
>>>>>
>>>>>
>>>>>
>>>>> zeros = [
>>>>>
>>>>> 0.000000, 0.001185, 0.001352, 0.001561, 0.001766, 0.001941,
>>>>> 0.002146,
>>>>>
>>>>> 0.002355, 0.002534,
>>>>>
>>>>> 0.002712, 0.002897, 0.003069, 0.003232, 0.003395, 0.004146,
>>>>> 0.004549,
>>>>>
>>>>> 0.003148, 0.004040]
>>>>>
>>>>>
>>>>>
>>>>> ql.Settings.instance().evaluationDate = ql.Date(7,5,2019)
>>>>>
>>>>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>>>>
>>>>> dayCounter = ql.Actual360()
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> zCurve = ql.ZeroCurve(qlDates, zeros, ql.ActualActual(), ql.TARGET())
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> #To get the forward rates, you can use the "forwardRate" method from
>>>>> the curve:
>>>>>
>>>>>
>>>>>
>>>>> forwardStart = ql.Date(15,6,2020)
>>>>>
>>>>> forwardEnd = ql.Date(15,12,2020)
>>>>>
>>>>> fwd = zCurve.forwardRate(forwardStart, forwardEnd, dayCounter,
>>>>>
>>>>> ql.Compounded, ql.Annual).rate()
>>>>>
>>>>> print(fwd)
>>>>>
>>>>>
>>>>>
>>>>> #or build the floating rate bond object and inspect the rate on the
>>>>> cashflows:
>>>>>
>>>>>
>>>>>
>>>>> yts = ql.YieldTermStructureHandle(zCurve)
>>>>>
>>>>> schedule = ql.MakeSchedule(ql.Date(15,6,2020), ql.Date(15,6,2021),
>>>>>
>>>>> ql.Period('6m'))
>>>>>
>>>>> index = ql.Euribor6M(yts)
>>>>>
>>>>> index.clearFixings()
>>>>>
>>>>> index.addFixing(ql.Date(6,ql.August,2014), 0.05)
>>>>>
>>>>> bond = ql.FloatingRateBond(2,100, schedule, ql.Euribor6M(yts),
>>>>>
>>>>> ql.Actual360())
>>>>>
>>>>>
>>>>> On 9 Oct 2020 Fri at 10:11 Francois Botha <ig...@gm...> wrote:
>>>>>
>>>>>> So the error message states that you have already added the fixing.
>>>>>>
>>>>>> I'm unsure whether the Python interface for index.addFixing provides
>>>>>> a parameter to optionally overwrite any existing indices. If so, try that.
>>>>>> Alternatively, there should be something like index.clearFixings() which
>>>>>> you can call first before adding new fixings.
>>>>>>
>>>>>> regards
>>>>>>
>>>>>> Francois Botha
>>>>>>
>>>>>>
>>>>>> On Fri, 9 Oct 2020 at 08:58, isilay erol <ero...@gm...>
>>>>>> wrote:
>>>>>>
>>>>>>> Hello again,
>>>>>>>
>>>>>>> I want to ask one more question;
>>>>>>>
>>>>>>> I want set a past fixing for the current latest coupon (which,
>>>>>>> having fixed in the past, can’t be forecast).
>>>>>>>
>>>>>>> The forecasting of floating bond cashflow should be start generate
>>>>>>> from this latest repring coupon rate.
>>>>>>>
>>>>>>> That’s why I heve added the following querry only to see what will
>>>>>>> happen;
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> “index.addFixing(ql.Date(6,ql.March,2019), 0.003)”
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Bu I have the folowing error message;
>>>>>>>
>>>>>>> Am I thinking wrongly?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> import QuantLib as ql
>>>>>>>
>>>>>>> from pandas import DataFrame
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> dates = [
>>>>>>>
>>>>>>> '07-05-2019', '11-11-2019', '09-12-2019', '09-01-2020',
>>>>>>> '10-02-2020',
>>>>>>>
>>>>>>> '09-03-2020', '09-04-2020', '11-05-2020', '09-06-2020',
>>>>>>>
>>>>>>> '09-07-2020', '10-08-2020', '09-09-2020', '09-10-2020',
>>>>>>> '09-11-2020',
>>>>>>>
>>>>>>> '10-05-2021', '09-05-2022', '09-05-2023', '09-05-2024']
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> zeros = [
>>>>>>>
>>>>>>> 0.000000, 0.001185, 0.001352, 0.001561, 0.001766, 0.001941,
>>>>>>> 0.002146,
>>>>>>>
>>>>>>> 0.002355, 0.002534,
>>>>>>>
>>>>>>> 0.002712, 0.002897, 0.003069, 0.003232, 0.003395, 0.004146,
>>>>>>> 0.004549,
>>>>>>>
>>>>>>> 0.003148, 0.004040]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ql.Settings.instance().evaluationDate = ql.Date(7,5,2019)
>>>>>>>
>>>>>>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>>>>>>
>>>>>>> dayCounter = ql.Actual360()
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> zCurve = ql.ZeroCurve(qlDates, zeros, ql.ActualActual(), ql.TARGET())
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> forwardStart = ql.Date(15,6,2020)
>>>>>>>
>>>>>>> forwardEnd = ql.Date(15,12,2020)
>>>>>>>
>>>>>>> fwd = zCurve.forwardRate(forwardStart, forwardEnd, dayCounter,
>>>>>>>
>>>>>>> ql.Compounded, ql.Annual).rate()
>>>>>>>
>>>>>>> print(fwd)
>>>>>>>
>>>>>>> 0.005623856615195155
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> yts = ql.YieldTermStructureHandle(zCurve)
>>>>>>>
>>>>>>> schedule = ql.MakeSchedule(ql.Date(15,6,2020), ql.Date(15,6,2021),
>>>>>>>
>>>>>>> ql.Period('6m'))
>>>>>>>
>>>>>>> index = ql.Euribor6M(yts)
>>>>>>>
>>>>>>> index.addFixing(ql.Date(6,ql.March,2019), 0.003)
>>>>>>>
>>>>>>> bond = ql.FloatingRateBond(2,100, schedule, ql.Euribor6M(yts),
>>>>>>>
>>>>>>> ql.Actual360())
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Traceback (most recent call last):
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> File "<ipython-input-61-ec28b13dc284>", line 5, in <module>
>>>>>>>
>>>>>>> index.addFixing(ql.Date(6,ql.March,2019), 0.003)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> File "C:\Anaconda3\lib\site-packages\QuantLib\QuantLib.py", line
>>>>>>> 5475, in addFixing
>>>>>>>
>>>>>>> return _QuantLib.Index_addFixing(self, fixingDate, fixing,
>>>>>>> forceOverwrite)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> RuntimeError: At least one duplicated fixing provided: March 6th,
>>>>>>> 2019, 0.003 while 0.002 value is already present
>>>>>>>
>>>>>>>
>>>>>>> Best regards,
>>>>>>>
>>>>>>> On 8 Oct 2020 Thu at 17:20 isilay erol <ero...@gm...>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Thank you very much Luigi an David.
>>>>>>>>
>>>>>>>> On 8 Oct 2020 Thu at 16:32 Luigi Ballabio <lui...@gm...>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> If you use ql.ZeroCurve instead of ql.DiscountCurve you can input
>>>>>>>>> zero rates directly and get a curve that you can use in the exact same way.
>>>>>>>>>
>>>>>>>>> Luigi
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Oct 8, 2020 at 3:13 PM isilay erol <ero...@gm...>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Dear David,
>>>>>>>>>>
>>>>>>>>>> You are right, the discount factors are increasing,
>>>>>>>>>>
>>>>>>>>>> this indicates that the curve is negative.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Your sample helped me a lot, thank you very much.
>>>>>>>>>>
>>>>>>>>>> I need to make my calculation from the zero coupon yield curve
>>>>>>>>>> itself,
>>>>>>>>>>
>>>>>>>>>> not the discount factor. At this point,
>>>>>>>>>>
>>>>>>>>>> I will try to move forward using the formula of the discount
>>>>>>>>>> factor calculation from zero coupon.
>>>>>>>>>>
>>>>>>>>>> If you already have a Python example of this conversion, I would
>>>>>>>>>> be very happy if you could share it with me.
>>>>>>>>>>
>>>>>>>>>> If not, I will try to derive it.
>>>>>>>>>>
>>>>>>>>>> Thanks again
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 8 Oct 2020 Thu at 15:39 David Duarte <nh...@gm...> wrote:
>>>>>>>>>>
>>>>>>>>>>> That is correct. The rates in EUR are negative.
>>>>>>>>>>> Notice the discount factors are above 1
>>>>>>>>>>>
>>>>>>>>>>> On Thu, 8 Oct 2020, 13:10 isilay erol, <ero...@gm...>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Dear David,
>>>>>>>>>>>> I'm working on Anaconda Python,
>>>>>>>>>>>> Thank you for your help,
>>>>>>>>>>>> When I ran your query,
>>>>>>>>>>>> I got negative fwd rates and negative fwd cash flows, am I
>>>>>>>>>>>> missing something?
>>>>>>>>>>>>
>>>>>>>>>>>> You can see my results in the following:
>>>>>>>>>>>>
>>>>>>>>>>>> import QuantLib as ql
>>>>>>>>>>>>
>>>>>>>>>>>> from pandas import DataFrame
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> dates = [
>>>>>>>>>>>>
>>>>>>>>>>>> '07-05-2019', '11-11-2019', '09-12-2019', '09-01-2020',
>>>>>>>>>>>> '10-02-2020',
>>>>>>>>>>>>
>>>>>>>>>>>> '09-03-2020', '09-04-2020', '11-05-2020', '09-06-2020',
>>>>>>>>>>>>
>>>>>>>>>>>> '09-07-2020', '10-08-2020', '09-09-2020', '09-10-2020',
>>>>>>>>>>>> '09-11-2020',
>>>>>>>>>>>>
>>>>>>>>>>>> '10-05-2021', '09-05-2022', '09-05-2023', '09-05-2024']
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> dfs = [
>>>>>>>>>>>>
>>>>>>>>>>>> 1.000000, 1.001185, 1.001352, 1.001561, 1.001766, 1.001941,
>>>>>>>>>>>> 1.002146,
>>>>>>>>>>>>
>>>>>>>>>>>> 1.002355, 1.002534,
>>>>>>>>>>>>
>>>>>>>>>>>> 1.002712, 1.002897, 1.003069, 1.003232, 1.003395, 1.004146,
>>>>>>>>>>>> 1.004549,
>>>>>>>>>>>>
>>>>>>>>>>>> 1.003148, 0.999840]
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ql.Settings.instance().evaluationDate = ql.Date(7,5,2019)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>>>>>>>>>>>
>>>>>>>>>>>> dayCounter = ql.Actual360()
>>>>>>>>>>>>
>>>>>>>>>>>> curve = ql.DiscountCurve(qlDates, dfs, dayCounter,
>>>>>>>>>>>> ql.NullCalendar())
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> forwardStart = ql.Date(15,6,2020)
>>>>>>>>>>>>
>>>>>>>>>>>> forwardEnd = ql.Date(15,12,2020)
>>>>>>>>>>>>
>>>>>>>>>>>> fwd = curve.forwardRate(forwardStart, forwardEnd, dayCounter,
>>>>>>>>>>>>
>>>>>>>>>>>> ql.Compounded, ql.Annual).rate()
>>>>>>>>>>>>
>>>>>>>>>>>> print(fwd)
>>>>>>>>>>>>
>>>>>>>>>>>> -0.0019082224391586688
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> yts = ql.YieldTermStructureHandle(curve)
>>>>>>>>>>>>
>>>>>>>>>>>> schedule = ql.MakeSchedule(ql.Date(15,6,2020),
>>>>>>>>>>>> ql.Date(15,6,2021),
>>>>>>>>>>>>
>>>>>>>>>>>> ql.Period('6m'))
>>>>>>>>>>>>
>>>>>>>>>>>> index = ql.Euribor6M(yts)
>>>>>>>>>>>>
>>>>>>>>>>>> bond = ql.FloatingRateBond(2,100, schedule, ql.Euribor6M(yts),
>>>>>>>>>>>>
>>>>>>>>>>>> ql.Actual360())
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> for dt in schedule:
>>>>>>>>>>>>
>>>>>>>>>>>> print(dt, index.fixing(dt))
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> June 15th, 2020 -0.00190201607110241
>>>>>>>>>>>>
>>>>>>>>>>>> December 15th, 2020 -0.001253382120767248
>>>>>>>>>>>>
>>>>>>>>>>>> June 15th, 2021 -0.00039680612008295636
>>>>>>>>>>>>
>>>>>>>>>>>> On 8 Oct 2020 Thu at 12:21 David Duarte <nh...@gm...>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Are you using c++, python or excel?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Since you already have a yield curve, you can build the object
>>>>>>>>>>>>> by inputting spot rates (ZeroCurve class) or discount factors
>>>>>>>>>>>>> (DiscountCurve).
>>>>>>>>>>>>>
>>>>>>>>>>>>> Here is an example using python:
>>>>>>>>>>>>>
>>>>>>>>>>>>> dates = [
>>>>>>>>>>>>> '07-05-2019', '11-11-2019', '09-12-2019', '09-01-2020',
>>>>>>>>>>>>> '10-02-2020', '09-03-2020', '09-04-2020', '11-05-2020', '09-06-2020',
>>>>>>>>>>>>> '09-07-2020', '10-08-2020', '09-09-2020', '09-10-2020',
>>>>>>>>>>>>> '09-11-2020', '10-05-2021', '09-05-2022', '09-05-2023', '09-05-2024']
>>>>>>>>>>>>>
>>>>>>>>>>>>> dfs = [
>>>>>>>>>>>>> 1.000000, 1.001185, 1.001352, 1.001561, 1.001766,
>>>>>>>>>>>>> 1.001941, 1.002146, 1.002355, 1.002534,
>>>>>>>>>>>>> 1.002712, 1.002897, 1.003069, 1.003232, 1.003395,
>>>>>>>>>>>>> 1.004146, 1.004549, 1.003148, 0.999840]
>>>>>>>>>>>>>
>>>>>>>>>>>>> ql.Settings.instance().evaluationDate = ql.Date(7,5,2019)
>>>>>>>>>>>>> qlDates = [ql.Date(dt, '%d-%m-%Y') for dt in dates]
>>>>>>>>>>>>> dayCounter = ql.Actual360()
>>>>>>>>>>>>> curve = ql.DiscountCurve(qlDates, dfs, dayCounter,
>>>>>>>>>>>>> ql.NullCalendar())
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> To get the forward rates, you can use the "forwardRate" method
>>>>>>>>>>>>> from the curve:
>>>>>>>>>>>>>
>>>>>>>>>>>>> forwardStart = ql.Date(15,6,2020)
>>>>>>>>>>>>> forwardEnd = ql.Date(15,12,2020)
>>>>>>>>>>>>> fwd = curve.forwardRate(forwardStart, forwardEnd, dayCounter,
>>>>>>>>>>>>> ql.Compounded, ql.Annual).rate()
>>>>>>>>>>>>> print(fwd)
>>>>>>>>>>>>>
>>>>>>>>>>>>> or build the floating rate bond object and inspect the rate on
>>>>>>>>>>>>> the cashflows:
>>>>>>>>>>>>>
>>>>>>>>>>>>> yts = ql.YieldTermStructureHandle(curve)
>>>>>>>>>>>>> schedule = ql.MakeSchedule(ql.Date(15,6,2020),
>>>>>>>>>>>>> ql.Date(15,6,2021), ql.Period('6m'))
>>>>>>>>>>>>> index = ql.Euribor6M(yts)
>>>>>>>>>>>>> bond = ql.FloatingRateBond(2,100, schedule, ql.Euribor6M(yts),
>>>>>>>>>>>>> ql.Actual360())
>>>>>>>>>>>>>
>>>>>>>>>>>>> for cf in map(ql.as_coupon, bond.cashflows()):
>>>>>>>>>>>>> if cf:
>>>>>>>>>>>>> print(cf.accrualStartDate().ISO(),
>>>>>>>>>>>>> cf.accrualStartDate().ISO(), f"{cf.rate():.3%}")
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> or even get the rate from the index for given set of dates:
>>>>>>>>>>>>>
>>>>>>>>>>>>> for dt in schedule:
>>>>>>>>>>>>> print(dt, index.fixing(dt))
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, 8 Oct 2020 at 06:39, isilay erol <
>>>>>>>>>>>>> ero...@gm...> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Dear Luigi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I just met with quantlib.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I try to understand from the examples how cash flows of
>>>>>>>>>>>>>> floating rate bonds are created.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> But in the examples, I always see that yield curves are
>>>>>>>>>>>>>> established from scratch.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I want to calculate forward rates and forward rate coupons
>>>>>>>>>>>>>> with the yield curve which I already have.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (I don't want to construct a yield curve from scratch again -
>>>>>>>>>>>>>> I have a zero coupon yield curve)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> And this way I want to create the cash flows of the floating
>>>>>>>>>>>>>> bond. But I could not understand how I could do this.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Can you help me on this issue?
>>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> QuantLib-users mailing list
>>>>>>>>>>>>>> Qua...@li...
>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users
>>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>> QuantLib-users mailing list
>>>>>>>>>> Qua...@li...
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>> QuantLib-users mailing list
>>>>>>> Qua...@li...
>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users
>>>>>>>
>>>>>> _______________________________________________
>>>>> QuantLib-users mailing list
>>>>> Qua...@li...
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users
>>>>>
>>>>
|