This code example from:
https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py from QuantLib import * import numpy as np from math import * todaysDate=Date(31,12,2013) startDate=todaysDate Settings.instance().evaluationDate=todaysDate; crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) forecastTermStructure = RelinkableYieldTermStructureHandle() index = GBPLibor(Period("6m"),forecastTermStructure) maturity = Date(31,12,2018); schedule = Schedule(startDate, maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, False) nominals=[100.0]*10 couponRates=[0.05]*10 floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) index.addFixing(index.fixingDate(schedule[0]),0.01) #index.addFixing(index.fixingDate(schedule[1]),0.01) swap1=Swap(floatingleg,fixedleg) discountTermStructure = RelinkableYieldTermStructureHandle() swapEngine = DiscountingSwapEngine(discountTermStructure) swap1.setPricingEngine(swapEngine) discountTermStructure.linkTo(crvToday) forecastTermStructure.linkTo(crvToday) for x in floatingleg: print x.date(), x.amount() can show the floating cashflows on a vanilla swap. By including the line: index.addFixing(index.fixingDate(schedule[0]),0.01) I can change the first fixing to 1% How can I also change the second fixing to 1.5%? index.addFixing(index.fixingDate(schedule[1]),0.015) has no effect. Thanks |
Hi Khalid,
the InterestRateIndex class never takes fixings for future dates (i.e. dates bigger than the evaluation date set in the settings) into account. In derived classes like IborIndex or SwapIndex they are estimated on a curve you can attach to the index, so if you want to compute scenarios where future fixings are shifted, you probably have to do appropriate shifts on the curve. The evaluation date itself plays a special role (since fixings are usually available only after a certain time of the day). With the setting enforceTodaysHistoricFixing you can require that on the evaluation date a fixing must be used, and if this is not available, an exception is thrown. This is for example useful if you have an end of day processing where you know that the fixing should be available. The default value is false though, allowing to take a fixing into account if available and otherwise estimate it on a curve. Finally the forecastFixing method in InterestRateIndex has a flag forecastTodaysFixing (defaulted to false) which if true enforces estimation on a curve even if the fixing is available. This is for example useful if you don't want to nail today's fixing during sensitivities calculation. Peter On 20 September 2014 05:52, KK <[hidden email]> wrote: > This code example from: > > https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py > > > from QuantLib import * > import numpy as np > from math import * > > todaysDate=Date(31,12,2013) > startDate=todaysDate > Settings.instance().evaluationDate=todaysDate; > crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) > forecastTermStructure = RelinkableYieldTermStructureHandle() > index = GBPLibor(Period("6m"),forecastTermStructure) > maturity = Date(31,12,2018); > schedule = Schedule(startDate, > maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, > False) > nominals=[100.0]*10 > couponRates=[0.05]*10 > floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) > fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) > > index.addFixing(index.fixingDate(schedule[0]),0.01) > #index.addFixing(index.fixingDate(schedule[1]),0.01) > > swap1=Swap(floatingleg,fixedleg) > discountTermStructure = RelinkableYieldTermStructureHandle() > swapEngine = DiscountingSwapEngine(discountTermStructure) > swap1.setPricingEngine(swapEngine) > discountTermStructure.linkTo(crvToday) > forecastTermStructure.linkTo(crvToday) > for x in floatingleg: > print x.date(), x.amount() > > > can show the floating cashflows on a vanilla swap. By including the line: > > index.addFixing(index.fixingDate(schedule[0]),0.01) > > I can change the first fixing to 1% > > How can I *also *change the second fixing to 1.5%? > > index.addFixing(index.fixingDate(schedule[1]),0.015) > > has no effect. > > Thanks > > > > > -- > View this message in context: http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html > Sent from the quantlib-users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi Peter
Many thanks for the quick and detailed reply. I suspect a simpler solution will be to use the cash flow date schedule specified by the curve and create cashflows myself from my own list of fixings that I want to use. As an aside, is there a way of creating the schedule of 6mth fixings implied by the swap curve? I am able to back out the number using the nominal amount, the cash flow amount and the days accrued period, but wonder if there is a way of directly calling all the fixings on the floating leg. Many thanks again On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: > Hi Khalid, > > the InterestRateIndex class never takes fixings for future dates (i.e. > dates bigger than the evaluation date set in the settings) into > account. In derived classes like IborIndex or SwapIndex they are > estimated on a curve you can attach to the index, so if you want to > compute scenarios where future fixings are shifted, you probably have > to do appropriate shifts on the curve. > > The evaluation date itself plays a special role (since fixings are > usually available only after a certain time of the day). With the > setting enforceTodaysHistoricFixing you can require that on the > evaluation date a fixing must be used, and if this is not available, > an exception is thrown. This is for example useful if you have an end > of day processing where you know that the fixing should be available. > The default value is false though, allowing to take a fixing into > account if available and otherwise estimate it on a curve. > > Finally the forecastFixing method in InterestRateIndex has a flag > forecastTodaysFixing (defaulted to false) which if true enforces > estimation on a curve even if the fixing is available. This is for > example useful if you don't want to nail today's fixing during > sensitivities calculation. > > Peter > > > On 20 September 2014 05:52, KK <[hidden email]> wrote: >> This code example from: >> >> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >> >> >> from QuantLib import * >> import numpy as np >> from math import * >> >> todaysDate=Date(31,12,2013) >> startDate=todaysDate >> Settings.instance().evaluationDate=todaysDate; >> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >> forecastTermStructure = RelinkableYieldTermStructureHandle() >> index = GBPLibor(Period("6m"),forecastTermStructure) >> maturity = Date(31,12,2018); >> schedule = Schedule(startDate, >> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >> False) >> nominals=[100.0]*10 >> couponRates=[0.05]*10 >> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >> >> index.addFixing(index.fixingDate(schedule[0]),0.01) >> #index.addFixing(index.fixingDate(schedule[1]),0.01) >> >> swap1=Swap(floatingleg,fixedleg) >> discountTermStructure = RelinkableYieldTermStructureHandle() >> swapEngine = DiscountingSwapEngine(discountTermStructure) >> swap1.setPricingEngine(swapEngine) >> discountTermStructure.linkTo(crvToday) >> forecastTermStructure.linkTo(crvToday) >> for x in floatingleg: >> print x.date(), x.amount() >> >> >> can show the floating cashflows on a vanilla swap. By including the line: >> >> index.addFixing(index.fixingDate(schedule[0]),0.01) >> >> I can change the first fixing to 1% >> >> How can I *also *change the second fixing to 1.5%? >> >> index.addFixing(index.fixingDate(schedule[1]),0.015) >> >> has no effect. >> >> Thanks >> >> >> >> >> -- >> View this message in context: http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >> Sent from the quantlib-users mailing list archive at Nabble.com. >> >> ------------------------------------------------------------------------------ >> Slashdot TV. Video for Nerds. Stuff that Matters. >> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> _______________________________________________ >> QuantLib-users mailing list >> [hidden email] >> https://lists.sourceforge.net/lists/listinfo/quantlib-users ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
I'd take the underlying swap from the swap rate helper with maximum
maturity ( by calling swap() on this helper ), then get the floating leg ( by calling floatingLeg() ), iterate over it to get the coupons ( you have to cast them with something like boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask each coupon for the fixing date ( by calling fixingDate() ). Peter On 20 September 2014 17:31, Khalid <[hidden email]> wrote: > Hi Peter > > Many thanks for the quick and detailed reply. I suspect a simpler solution will be to use the cash flow date schedule specified by the curve and create cashflows myself from my own list of fixings that I want to use. > > > As an aside, is there a way of creating the schedule of 6mth fixings implied by the swap curve? I am able to back out the number using the nominal amount, the cash flow amount and the days accrued period, but wonder if there is a way of directly calling all the fixings on the floating leg. > > > Many thanks again > > > > On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: > >> Hi Khalid, >> >> the InterestRateIndex class never takes fixings for future dates (i.e. >> dates bigger than the evaluation date set in the settings) into >> account. In derived classes like IborIndex or SwapIndex they are >> estimated on a curve you can attach to the index, so if you want to >> compute scenarios where future fixings are shifted, you probably have >> to do appropriate shifts on the curve. >> >> The evaluation date itself plays a special role (since fixings are >> usually available only after a certain time of the day). With the >> setting enforceTodaysHistoricFixing you can require that on the >> evaluation date a fixing must be used, and if this is not available, >> an exception is thrown. This is for example useful if you have an end >> of day processing where you know that the fixing should be available. >> The default value is false though, allowing to take a fixing into >> account if available and otherwise estimate it on a curve. >> >> Finally the forecastFixing method in InterestRateIndex has a flag >> forecastTodaysFixing (defaulted to false) which if true enforces >> estimation on a curve even if the fixing is available. This is for >> example useful if you don't want to nail today's fixing during >> sensitivities calculation. >> >> Peter >> >> >> On 20 September 2014 05:52, KK <[hidden email]> wrote: >>> This code example from: >>> >>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >>> >>> >>> from QuantLib import * >>> import numpy as np >>> from math import * >>> >>> todaysDate=Date(31,12,2013) >>> startDate=todaysDate >>> Settings.instance().evaluationDate=todaysDate; >>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >>> forecastTermStructure = RelinkableYieldTermStructureHandle() >>> index = GBPLibor(Period("6m"),forecastTermStructure) >>> maturity = Date(31,12,2018); >>> schedule = Schedule(startDate, >>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >>> False) >>> nominals=[100.0]*10 >>> couponRates=[0.05]*10 >>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >>> >>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >>> >>> swap1=Swap(floatingleg,fixedleg) >>> discountTermStructure = RelinkableYieldTermStructureHandle() >>> swapEngine = DiscountingSwapEngine(discountTermStructure) >>> swap1.setPricingEngine(swapEngine) >>> discountTermStructure.linkTo(crvToday) >>> forecastTermStructure.linkTo(crvToday) >>> for x in floatingleg: >>> print x.date(), x.amount() >>> >>> >>> can show the floating cashflows on a vanilla swap. By including the line: >>> >>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> >>> I can change the first fixing to 1% >>> >>> How can I *also *change the second fixing to 1.5%? >>> >>> index.addFixing(index.fixingDate(schedule[1]),0.015) >>> >>> has no effect. >>> >>> Thanks >>> >>> >>> >>> >>> -- >>> View this message in context: http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >>> Sent from the quantlib-users mailing list archive at Nabble.com. >>> >>> ------------------------------------------------------------------------------ >>> Slashdot TV. Video for Nerds. Stuff that Matters. >>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> QuantLib-users mailing list >>> [hidden email] >>> https://lists.sourceforge.net/lists/listinfo/quantlib-users ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Thanks for replying so fast Peter. I am a little embarrassed to admit my c++ knowledge is very weak. Do you happen to know the equivalent method for retrieving the schedule of implied fixings using python?
Sent from my BlackBerry device on the Rogers Wireless Network From: "Peter Caspers-4 [via QuantLib]" <[hidden email]>
Date: Sat, 20 Sep 2014 09:07:22 -0700 (MST) To: KK<[hidden email]> Subject: Re: Changing Second/Third Fixing on Vanilla Swap maturity ( by calling swap() on this helper ), then get the floating leg ( by calling floatingLeg() ), iterate over it to get the coupons ( you have to cast them with something like boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask each coupon for the fixing date ( by calling fixingDate() ). Peter On 20 September 2014 17:31, Khalid <[hidden email]> wrote: > Hi Peter > > Many thanks for the quick and detailed reply. I suspect a simpler solution will be to use the cash flow date schedule specified by the curve and create cashflows myself from my own list of fixings that I want to use. > > > As an aside, is there a way of creating the schedule of 6mth fixings implied by the swap curve? I am able to back out the number using the nominal amount, the cash flow amount and the days accrued period, but wonder if there is a way of directly calling all the fixings on the floating leg. > > > Many thanks again > > > > On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: > >> Hi Khalid, >> >> the InterestRateIndex class never takes fixings for future dates (i.e. >> dates bigger than the evaluation date set in the settings) into >> account. In derived classes like IborIndex or SwapIndex they are >> estimated on a curve you can attach to the index, so if you want to >> compute scenarios where future fixings are shifted, you probably have >> to do appropriate shifts on the curve. >> >> The evaluation date itself plays a special role (since fixings are >> usually available only after a certain time of the day). With the >> setting enforceTodaysHistoricFixing you can require that on the >> evaluation date a fixing must be used, and if this is not available, >> an exception is thrown. This is for example useful if you have an end >> of day processing where you know that the fixing should be available. >> The default value is false though, allowing to take a fixing into >> account if available and otherwise estimate it on a curve. >> >> Finally the forecastFixing method in InterestRateIndex has a flag >> forecastTodaysFixing (defaulted to false) which if true enforces >> estimation on a curve even if the fixing is available. This is for >> example useful if you don't want to nail today's fixing during >> sensitivities calculation. >> >> Peter >> >> >> On 20 September 2014 05:52, KK <[hidden email]> wrote: >>> This code example from: >>> >>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >>> >>> >>> from QuantLib import * >>> import numpy as np >>> from math import * >>> >>> todaysDate=Date(31,12,2013) >>> startDate=todaysDate >>> Settings.instance().evaluationDate=todaysDate; >>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >>> forecastTermStructure = RelinkableYieldTermStructureHandle() >>> index = GBPLibor(Period("6m"),forecastTermStructure) >>> maturity = Date(31,12,2018); >>> schedule = Schedule(startDate, >>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >>> False) >>> nominals=[100.0]*10 >>> couponRates=[0.05]*10 >>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >>> >>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >>> >>> swap1=Swap(floatingleg,fixedleg) >>> discountTermStructure = RelinkableYieldTermStructureHandle() >>> swapEngine = DiscountingSwapEngine(discountTermStructure) >>> swap1.setPricingEngine(swapEngine) >>> discountTermStructure.linkTo(crvToday) >>> forecastTermStructure.linkTo(crvToday) >>> for x in floatingleg: >>> print x.date(), x.amount() >>> >>> >>> can show the floating cashflows on a vanilla swap. By including the line: >>> >>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> >>> I can change the first fixing to 1% >>> >>> How can I *also *change the second fixing to 1.5%? >>> >>> index.addFixing(index.fixingDate(schedule[1]),0.015) >>> >>> has no effect. >>> >>> Thanks >>> >>> >>> >>> >>> -- >>> View this message in context: http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >>> Sent from the quantlib-users mailing list archive at Nabble.com. >>> >>> ------------------------------------------------------------------------------ >>> Slashdot TV. Video for Nerds. Stuff that Matters. >>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> QuantLib-users mailing list >>> [hidden email] >>> https://lists.sourceforge.net/lists/listinfo/quantlib-users Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users If you reply to this email, your message will be added to the discussion below:
http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15893.html
|
I think someone else should jump in here, I am not really a Python expert.
Peter On 20 September 2014 18:37, KK <[hidden email]> wrote: > Thanks for replying so fast Peter. I am a little embarrassed to admit my c++ > knowledge is very weak. Do you happen to know the equivalent method for > retrieving the schedule of implied fixings using python? > Sent from my BlackBerry device on the Rogers Wireless Network > ________________________________ > From: "Peter Caspers-4 [via QuantLib]" <[hidden email]> > Date: Sat, 20 Sep 2014 09:07:22 -0700 (MST) > To: KK<[hidden email]> > Subject: Re: Changing Second/Third Fixing on Vanilla Swap > > I'd take the underlying swap from the swap rate helper with maximum > maturity ( by calling swap() on this helper ), then get the floating > leg ( by calling floatingLeg() ), iterate over it to get the coupons ( > you have to cast them with something like > boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask > each coupon for the fixing date ( by calling fixingDate() ). > Peter > > On 20 September 2014 17:31, Khalid <[hidden email]> wrote: > >> Hi Peter >> >> Many thanks for the quick and detailed reply. I suspect a simpler solution >> will be to use the cash flow date schedule specified by the curve and create >> cashflows myself from my own list of fixings that I want to use. >> >> >> As an aside, is there a way of creating the schedule of 6mth fixings >> implied by the swap curve? I am able to back out the number using the >> nominal amount, the cash flow amount and the days accrued period, but wonder >> if there is a way of directly calling all the fixings on the floating leg. >> >> >> Many thanks again >> >> >> >> On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: >> >>> Hi Khalid, >>> >>> the InterestRateIndex class never takes fixings for future dates (i.e. >>> dates bigger than the evaluation date set in the settings) into >>> account. In derived classes like IborIndex or SwapIndex they are >>> estimated on a curve you can attach to the index, so if you want to >>> compute scenarios where future fixings are shifted, you probably have >>> to do appropriate shifts on the curve. >>> >>> The evaluation date itself plays a special role (since fixings are >>> usually available only after a certain time of the day). With the >>> setting enforceTodaysHistoricFixing you can require that on the >>> evaluation date a fixing must be used, and if this is not available, >>> an exception is thrown. This is for example useful if you have an end >>> of day processing where you know that the fixing should be available. >>> The default value is false though, allowing to take a fixing into >>> account if available and otherwise estimate it on a curve. >>> >>> Finally the forecastFixing method in InterestRateIndex has a flag >>> forecastTodaysFixing (defaulted to false) which if true enforces >>> estimation on a curve even if the fixing is available. This is for >>> example useful if you don't want to nail today's fixing during >>> sensitivities calculation. >>> >>> Peter >>> >>> >>> On 20 September 2014 05:52, KK <[hidden email]> wrote: >>>> This code example from: >>>> >>>> >>>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >>>> >>>> >>>> from QuantLib import * >>>> import numpy as np >>>> from math import * >>>> >>>> todaysDate=Date(31,12,2013) >>>> startDate=todaysDate >>>> Settings.instance().evaluationDate=todaysDate; >>>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >>>> forecastTermStructure = RelinkableYieldTermStructureHandle() >>>> index = GBPLibor(Period("6m"),forecastTermStructure) >>>> maturity = Date(31,12,2018); >>>> schedule = Schedule(startDate, >>>> >>>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >>>> False) >>>> nominals=[100.0]*10 >>>> couponRates=[0.05]*10 >>>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >>>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >>>> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >>>> >>>> swap1=Swap(floatingleg,fixedleg) >>>> discountTermStructure = RelinkableYieldTermStructureHandle() >>>> swapEngine = DiscountingSwapEngine(discountTermStructure) >>>> swap1.setPricingEngine(swapEngine) >>>> discountTermStructure.linkTo(crvToday) >>>> forecastTermStructure.linkTo(crvToday) >>>> for x in floatingleg: >>>> print x.date(), x.amount() >>>> >>>> >>>> can show the floating cashflows on a vanilla swap. By including the >>>> line: >>>> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>>> >>>> I can change the first fixing to 1% >>>> >>>> How can I *also *change the second fixing to 1.5%? >>>> >>>> index.addFixing(index.fixingDate(schedule[1]),0.015) >>>> >>>> has no effect. >>>> >>>> Thanks >>>> >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >>>> Sent from the quantlib-users mailing list archive at Nabble.com. >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Slashdot TV. Video for Nerds. Stuff that Matters. >>>> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>>> _______________________________________________ >>>> QuantLib-users mailing list >>>> [hidden email] >>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > > > ________________________________ > If you reply to this email, your message will be added to the discussion > below: > http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15893.html > To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click > here. > NAML > > ________________________________ > View this message in context: Re: Changing Second/Third Fixing on Vanilla > Swap > > Sent from the quantlib-users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi Peter After a little (a lot) of experimentation, I managed to get this working: for x in schedule: Â Â print index.fixing(x) print index.fixing(floatingleg[4].date()) will pull the 5th fixing up if needed. Many thanks for the help here! On Sat, Sep 20, 2014 at 1:08 PM, Peter Caspers-4 [via QuantLib] <[hidden email]> wrote: I think someone else should jump in here, I am not really a Python expert. |
Hi Khalid,
you have to be careful. I'd say floatingLeg[4].date() is the payment date of this flow and index.fixing( ... ) called on this date gives the forecast of the index's fixing on this date (which is probably not what you want). Peter On 20 September 2014 23:09, KK <[hidden email]> wrote: > Hi Peter > > After a little (a lot) of experimentation, I managed to get this working: > > for x in schedule: > print index.fixing(x) > > print index.fixing(floatingleg[4].date()) will pull the 5th fixing up if > needed. > > Many thanks for the help here! > > > > > > On Sat, Sep 20, 2014 at 1:08 PM, Peter Caspers-4 [via QuantLib] <[hidden > email]> wrote: >> >> I think someone else should jump in here, I am not really a Python expert. >> Peter >> >> >> On 20 September 2014 18:37, KK <[hidden email]> wrote: >> >> > Thanks for replying so fast Peter. I am a little embarrassed to admit my >> > c++ >> > knowledge is very weak. Do you happen to know the equivalent method for >> > retrieving the schedule of implied fixings using python? >> > Sent from my BlackBerry device on the Rogers Wireless Network >> > ________________________________ >> > From: "Peter Caspers-4 [via QuantLib]" <[hidden email]> >> > Date: Sat, 20 Sep 2014 09:07:22 -0700 (MST) >> > To: KK<[hidden email]> >> > Subject: Re: Changing Second/Third Fixing on Vanilla Swap >> >> > >> > I'd take the underlying swap from the swap rate helper with maximum >> > maturity ( by calling swap() on this helper ), then get the floating >> > leg ( by calling floatingLeg() ), iterate over it to get the coupons ( >> > you have to cast them with something like >> > boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask >> > each coupon for the fixing date ( by calling fixingDate() ). >> > Peter >> > >> > On 20 September 2014 17:31, Khalid <[hidden email]> wrote: >> > >> >> Hi Peter >> >> >> >> Many thanks for the quick and detailed reply. I suspect a simpler >> >> solution >> >> will be to use the cash flow date schedule specified by the curve and >> >> create >> >> cashflows myself from my own list of fixings that I want to use. >> >> >> >> >> >> As an aside, is there a way of creating the schedule of 6mth fixings >> >> implied by the swap curve? I am able to back out the number using the >> >> nominal amount, the cash flow amount and the days accrued period, but >> >> wonder >> >> if there is a way of directly calling all the fixings on the floating >> >> leg. >> >> >> >> >> >> Many thanks again >> >> >> >> >> >> >> >> On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: >> >> >> >>> Hi Khalid, >> >>> >> >>> the InterestRateIndex class never takes fixings for future dates (i.e. >> >>> dates bigger than the evaluation date set in the settings) into >> >>> account. In derived classes like IborIndex or SwapIndex they are >> >>> estimated on a curve you can attach to the index, so if you want to >> >>> compute scenarios where future fixings are shifted, you probably have >> >>> to do appropriate shifts on the curve. >> >>> >> >>> The evaluation date itself plays a special role (since fixings are >> >>> usually available only after a certain time of the day). With the >> >>> setting enforceTodaysHistoricFixing you can require that on the >> >>> evaluation date a fixing must be used, and if this is not available, >> >>> an exception is thrown. This is for example useful if you have an end >> >>> of day processing where you know that the fixing should be available. >> >>> The default value is false though, allowing to take a fixing into >> >>> account if available and otherwise estimate it on a curve. >> >>> >> >>> Finally the forecastFixing method in InterestRateIndex has a flag >> >>> forecastTodaysFixing (defaulted to false) which if true enforces >> >>> estimation on a curve even if the fixing is available. This is for >> >>> example useful if you don't want to nail today's fixing during >> >>> sensitivities calculation. >> >>> >> >>> Peter >> >>> >> >>> >> >>> On 20 September 2014 05:52, KK <[hidden email]> wrote: >> >>>> This code example from: >> >>>> >> >>>> >> >>>> >> >>>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >> >>>> >> >>>> >> >>>> from QuantLib import * >> >>>> import numpy as np >> >>>> from math import * >> >>>> >> >>>> todaysDate=Date(31,12,2013) >> >>>> startDate=todaysDate >> >>>> Settings.instance().evaluationDate=todaysDate; >> >>>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >> >>>> forecastTermStructure = RelinkableYieldTermStructureHandle() >> >>>> index = GBPLibor(Period("6m"),forecastTermStructure) >> >>>> maturity = Date(31,12,2018); >> >>>> schedule = Schedule(startDate, >> >>>> >> >>>> >> >>>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >> >>>> False) >> >>>> nominals=[100.0]*10 >> >>>> couponRates=[0.05]*10 >> >>>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >> >>>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >> >>>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >> >>>> >> >>>> swap1=Swap(floatingleg,fixedleg) >> >>>> discountTermStructure = RelinkableYieldTermStructureHandle() >> >>>> swapEngine = DiscountingSwapEngine(discountTermStructure) >> >>>> swap1.setPricingEngine(swapEngine) >> >>>> discountTermStructure.linkTo(crvToday) >> >>>> forecastTermStructure.linkTo(crvToday) >> >>>> for x in floatingleg: >> >>>> print x.date(), x.amount() >> >>>> >> >>>> >> >>>> can show the floating cashflows on a vanilla swap. By including the >> >>>> line: >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >> >>>> >> >>>> I can change the first fixing to 1% >> >>>> >> >>>> How can I *also *change the second fixing to 1.5%? >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[1]),0.015) >> >>>> >> >>>> has no effect. >> >>>> >> >>>> Thanks >> >>>> >> >>>> >> >>>> >> >>>> >> >>>> -- >> >>>> View this message in context: >> >>>> >> >>>> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >> >>>> Sent from the quantlib-users mailing list archive at Nabble.com. >> >>>> >> >>>> >> >>>> >> >>>> ------------------------------------------------------------------------------ >> >>>> Slashdot TV. Video for Nerds. Stuff that Matters. >> >>>> >> >>>> >> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> >>>> _______________________________________________ >> >>>> QuantLib-users mailing list >> >>>> [hidden email] >> >>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> > ------------------------------------------------------------------------------ >> > Slashdot TV. Video for Nerds. Stuff that Matters. >> > >> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> > _______________________________________________ >> > QuantLib-users mailing list >> > [hidden email] >> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> > >> > ________________________________ >> > If you reply to this email, your message will be added to the discussion >> > below: >> > >> > http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15893.html >> > To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >> > here. >> > NAML >> > >> > ________________________________ >> > View this message in context: Re: Changing Second/Third Fixing on >> > Vanilla >> > Swap >> > >> > Sent from the quantlib-users mailing list archive at Nabble.com. >> > >> > >> > ------------------------------------------------------------------------------ >> > Slashdot TV. Video for Nerds. Stuff that Matters. >> > >> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> > _______________________________________________ >> > QuantLib-users mailing list >> > [hidden email] >> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> >> >> ------------------------------------------------------------------------------ >> Slashdot TV. Video for Nerds. Stuff that Matters. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> _______________________________________________ >> QuantLib-users mailing list >> [hidden email] >> https://lists.sourceforge.net/lists/listinfo/quantlib-users >> >> >> ________________________________ >> If you reply to this email, your message will be added to the discussion >> below: >> >> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15896.html >> To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >> here. >> NAML > > > > ________________________________ > View this message in context: Re: Changing Second/Third Fixing on Vanilla > Swap > Sent from the quantlib-users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hey Peter
I suspect I may have fallen foul of this. I have submitted a piece of code to the user group as I find that the 2nd reset implied by the schedule function isn't what I would expect it to be - or what the iborleg function implies. If it doesn't get posted, can I send to you for your perusal? Sent from my BlackBerry device on the Rogers Wireless Network From: "Peter Caspers-4 [via QuantLib]" <[hidden email]>
Date: Sun, 21 Sep 2014 05:43:28 -0700 (MST) To: KK<[hidden email]> Subject: Re: Changing Second/Third Fixing on Vanilla Swap you have to be careful. I'd say floatingLeg[4].date() is the payment date of this flow and index.fixing( ... ) called on this date gives the forecast of the index's fixing on this date (which is probably not what you want). Peter On 20 September 2014 23:09, KK <[hidden email]> wrote: > Hi Peter > > After a little (a lot) of experimentation, I managed to get this working: > > for x in schedule: > print index.fixing(x) > > print index.fixing(floatingleg[4].date()) will pull the 5th fixing up if > needed. > > Many thanks for the help here! > > > > > > On Sat, Sep 20, 2014 at 1:08 PM, Peter Caspers-4 [via QuantLib] <[hidden > email]> wrote: >> >> I think someone else should jump in here, I am not really a Python expert. >> Peter >> >> >> On 20 September 2014 18:37, KK <[hidden email]> wrote: >> >> > Thanks for replying so fast Peter. I am a little embarrassed to admit my >> > c++ >> > knowledge is very weak. Do you happen to know the equivalent method for >> > retrieving the schedule of implied fixings using python? >> > Sent from my BlackBerry device on the Rogers Wireless Network >> > ________________________________ >> > From: "Peter Caspers-4 [via QuantLib]" <[hidden email]> >> > Date: Sat, 20 Sep 2014 09:07:22 -0700 (MST) >> > To: KK<[hidden email]> >> > Subject: Re: Changing Second/Third Fixing on Vanilla Swap >> >> > >> > I'd take the underlying swap from the swap rate helper with maximum >> > maturity ( by calling swap() on this helper ), then get the floating >> > leg ( by calling floatingLeg() ), iterate over it to get the coupons ( >> > you have to cast them with something like >> > boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask >> > each coupon for the fixing date ( by calling fixingDate() ). >> > Peter >> > >> > On 20 September 2014 17:31, Khalid <[hidden email]> wrote: >> > >> >> Hi Peter >> >> >> >> Many thanks for the quick and detailed reply. I suspect a simpler >> >> solution >> >> will be to use the cash flow date schedule specified by the curve and >> >> create >> >> cashflows myself from my own list of fixings that I want to use. >> >> >> >> >> >> As an aside, is there a way of creating the schedule of 6mth fixings >> >> implied by the swap curve? I am able to back out the number using the >> >> nominal amount, the cash flow amount and the days accrued period, but >> >> wonder >> >> if there is a way of directly calling all the fixings on the floating >> >> leg. >> >> >> >> >> >> Many thanks again >> >> >> >> >> >> >> >> On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: >> >> >> >>> Hi Khalid, >> >>> >> >>> the InterestRateIndex class never takes fixings for future dates (i.e. >> >>> dates bigger than the evaluation date set in the settings) into >> >>> account. In derived classes like IborIndex or SwapIndex they are >> >>> estimated on a curve you can attach to the index, so if you want to >> >>> compute scenarios where future fixings are shifted, you probably have >> >>> to do appropriate shifts on the curve. >> >>> >> >>> The evaluation date itself plays a special role (since fixings are >> >>> usually available only after a certain time of the day). With the >> >>> setting enforceTodaysHistoricFixing you can require that on the >> >>> evaluation date a fixing must be used, and if this is not available, >> >>> an exception is thrown. This is for example useful if you have an end >> >>> of day processing where you know that the fixing should be available. >> >>> The default value is false though, allowing to take a fixing into >> >>> account if available and otherwise estimate it on a curve. >> >>> >> >>> Finally the forecastFixing method in InterestRateIndex has a flag >> >>> forecastTodaysFixing (defaulted to false) which if true enforces >> >>> estimation on a curve even if the fixing is available. This is for >> >>> example useful if you don't want to nail today's fixing during >> >>> sensitivities calculation. >> >>> >> >>> Peter >> >>> >> >>> >> >>> On 20 September 2014 05:52, KK <[hidden email]> wrote: >> >>>> This code example from: >> >>>> >> >>>> >> >>>> >> >>>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >> >>>> >> >>>> >> >>>> from QuantLib import * >> >>>> import numpy as np >> >>>> from math import * >> >>>> >> >>>> todaysDate=Date(31,12,2013) >> >>>> startDate=todaysDate >> >>>> Settings.instance().evaluationDate=todaysDate; >> >>>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >> >>>> forecastTermStructure = RelinkableYieldTermStructureHandle() >> >>>> index = GBPLibor(Period("6m"),forecastTermStructure) >> >>>> maturity = Date(31,12,2018); >> >>>> schedule = Schedule(startDate, >> >>>> >> >>>> >> >>>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >> >>>> False) >> >>>> nominals=[100.0]*10 >> >>>> couponRates=[0.05]*10 >> >>>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >> >>>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >> >>>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >> >>>> >> >>>> swap1=Swap(floatingleg,fixedleg) >> >>>> discountTermStructure = RelinkableYieldTermStructureHandle() >> >>>> swapEngine = DiscountingSwapEngine(discountTermStructure) >> >>>> swap1.setPricingEngine(swapEngine) >> >>>> discountTermStructure.linkTo(crvToday) >> >>>> forecastTermStructure.linkTo(crvToday) >> >>>> for x in floatingleg: >> >>>> print x.date(), x.amount() >> >>>> >> >>>> >> >>>> can show the floating cashflows on a vanilla swap. By including the >> >>>> line: >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >> >>>> >> >>>> I can change the first fixing to 1% >> >>>> >> >>>> How can I *also *change the second fixing to 1.5%? >> >>>> >> >>>> index.addFixing(index.fixingDate(schedule[1]),0.015) >> >>>> >> >>>> has no effect. >> >>>> >> >>>> Thanks >> >>>> >> >>>> >> >>>> >> >>>> >> >>>> -- >> >>>> View this message in context: >> >>>> >> >>>> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >> >>>> Sent from the quantlib-users mailing list archive at Nabble.com. >> >>>> >> >>>> >> >>>> >> >>>> ------------------------------------------------------------------------------ >> >>>> Slashdot TV. Video for Nerds. Stuff that Matters. >> >>>> >> >>>> >> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> >>>> _______________________________________________ >> >>>> QuantLib-users mailing list >> >>>> [hidden email] >> >>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> > ------------------------------------------------------------------------------ >> > Slashdot TV. Video for Nerds. Stuff that Matters. >> > >> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> > _______________________________________________ >> > QuantLib-users mailing list >> > [hidden email] >> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> > >> > ________________________________ >> > If you reply to this email, your message will be added to the discussion >> > below: >> > >> > http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15893.html >> > To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >> > here. >> > NAML >> > >> > ________________________________ >> > View this message in context: Re: Changing Second/Third Fixing on >> > Vanilla >> > Swap >> > >> > Sent from the quantlib-users mailing list archive at Nabble.com. >> > >> > >> > ------------------------------------------------------------------------------ >> > Slashdot TV. Video for Nerds. Stuff that Matters. >> > >> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> > _______________________________________________ >> > QuantLib-users mailing list >> > [hidden email] >> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > >> >> >> ------------------------------------------------------------------------------ >> Slashdot TV. Video for Nerds. Stuff that Matters. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> _______________________________________________ >> QuantLib-users mailing list >> [hidden email] >> https://lists.sourceforge.net/lists/listinfo/quantlib-users >> >> >> ________________________________ >> If you reply to this email, your message will be added to the discussion >> below: >> >> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15896.html >> To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >> here. >> NAML > > > > ________________________________ > View this message in context: Re: Changing Second/Third Fixing on Vanilla > Swap > Sent from the quantlib-users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users If you reply to this email, your message will be added to the discussion below:
http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15902.html
|
sorry, I read the example too fast. For GBP Libor there are 0 fixing
days, so in _this_ case and if you take the _start_ of the calculation period generated with UK calendar, it is at the same time the fixing date. So it should be fine. Peter On 21 September 2014 16:41, KK <[hidden email]> wrote: > Hey Peter > I suspect I may have fallen foul of this. I have submitted a piece of code > to the user group as I find that the 2nd reset implied by the schedule > function isn't what I would expect it to be - or what the iborleg function > implies. If it doesn't get posted, can I send to you for your perusal? > Sent from my BlackBerry device on the Rogers Wireless Network > ________________________________ > From: "Peter Caspers-4 [via QuantLib]" <[hidden email]> > Date: Sun, 21 Sep 2014 05:43:28 -0700 (MST) > To: KK<[hidden email]> > Subject: Re: Changing Second/Third Fixing on Vanilla Swap > > Hi Khalid, > you have to be careful. I'd say floatingLeg[4].date() is the payment > date of this flow and index.fixing( ... ) called on this date gives > the forecast of the index's fixing on this date (which is probably not > what you want). > Peter > > > On 20 September 2014 23:09, KK <[hidden email]> wrote: > >> Hi Peter >> >> After a little (a lot) of experimentation, I managed to get this working: >> >> for x in schedule: >> print index.fixing(x) >> >> print index.fixing(floatingleg[4].date()) will pull the 5th fixing up if >> needed. >> >> Many thanks for the help here! >> >> >> >> >> >> On Sat, Sep 20, 2014 at 1:08 PM, Peter Caspers-4 [via QuantLib] <[hidden >> email]> wrote: >>> >>> I think someone else should jump in here, I am not really a Python >>> expert. >>> Peter >>> >>> >>> On 20 September 2014 18:37, KK <[hidden email]> wrote: >>> >>> > Thanks for replying so fast Peter. I am a little embarrassed to admit >>> > my >>> > c++ >>> > knowledge is very weak. Do you happen to know the equivalent method for >>> > retrieving the schedule of implied fixings using python? >>> > Sent from my BlackBerry device on the Rogers Wireless Network >>> > ________________________________ >>> > From: "Peter Caspers-4 [via QuantLib]" <[hidden email]> >>> > Date: Sat, 20 Sep 2014 09:07:22 -0700 (MST) >>> > To: KK<[hidden email]> >>> > Subject: Re: Changing Second/Third Fixing on Vanilla Swap >>> >>> > >>> > I'd take the underlying swap from the swap rate helper with maximum >>> > maturity ( by calling swap() on this helper ), then get the floating >>> > leg ( by calling floatingLeg() ), iterate over it to get the coupons ( >>> > you have to cast them with something like >>> > boost::dynamic_pointer_cast<FloatingRateCoupon>( leg[i] ) ) and ask >>> > each coupon for the fixing date ( by calling fixingDate() ). >>> > Peter >>> > >>> > On 20 September 2014 17:31, Khalid <[hidden email]> wrote: >>> > >>> >> Hi Peter >>> >> >>> >> Many thanks for the quick and detailed reply. I suspect a simpler >>> >> solution >>> >> will be to use the cash flow date schedule specified by the curve and >>> >> create >>> >> cashflows myself from my own list of fixings that I want to use. >>> >> >>> >> >>> >> As an aside, is there a way of creating the schedule of 6mth fixings >>> >> implied by the swap curve? I am able to back out the number using the >>> >> nominal amount, the cash flow amount and the days accrued period, but >>> >> wonder >>> >> if there is a way of directly calling all the fixings on the floating >>> >> leg. >>> >> >>> >> >>> >> Many thanks again >>> >> >>> >> >>> >> >>> >> On Sep 20, 2014, at 6:10 AM, Peter Caspers <[hidden email]> wrote: >>> >> >>> >>> Hi Khalid, >>> >>> >>> >>> the InterestRateIndex class never takes fixings for future dates >>> >>> (i.e. >>> >>> dates bigger than the evaluation date set in the settings) into >>> >>> account. In derived classes like IborIndex or SwapIndex they are >>> >>> estimated on a curve you can attach to the index, so if you want to >>> >>> compute scenarios where future fixings are shifted, you probably have >>> >>> to do appropriate shifts on the curve. >>> >>> >>> >>> The evaluation date itself plays a special role (since fixings are >>> >>> usually available only after a certain time of the day). With the >>> >>> setting enforceTodaysHistoricFixing you can require that on the >>> >>> evaluation date a fixing must be used, and if this is not available, >>> >>> an exception is thrown. This is for example useful if you have an end >>> >>> of day processing where you know that the fixing should be available. >>> >>> The default value is false though, allowing to take a fixing into >>> >>> account if available and otherwise estimate it on a curve. >>> >>> >>> >>> Finally the forecastFixing method in InterestRateIndex has a flag >>> >>> forecastTodaysFixing (defaulted to false) which if true enforces >>> >>> estimation on a curve even if the fixing is available. This is for >>> >>> example useful if you don't want to nail today's fixing during >>> >>> sensitivities calculation. >>> >>> >>> >>> Peter >>> >>> >>> >>> >>> >>> On 20 September 2014 05:52, KK <[hidden email]> wrote: >>> >>>> This code example from: >>> >>>> >>> >>>> >>> >>>> >>> >>>> >>> >>>> https://github.com/alexpoly/quant-snippets-python-c/blob/master/amortizing%20swap%20valuation%20quantlib.py >>> >>>> >>> >>>> >>> >>>> from QuantLib import * >>> >>>> import numpy as np >>> >>>> from math import * >>> >>>> >>> >>>> todaysDate=Date(31,12,2013) >>> >>>> startDate=todaysDate >>> >>>> Settings.instance().evaluationDate=todaysDate; >>> >>>> crvToday=FlatForward(todaysDate,0.0121,Actual365Fixed()) >>> >>>> forecastTermStructure = RelinkableYieldTermStructureHandle() >>> >>>> index = GBPLibor(Period("6m"),forecastTermStructure) >>> >>>> maturity = Date(31,12,2018); >>> >>>> schedule = Schedule(startDate, >>> >>>> >>> >>>> >>> >>>> >>> >>>> maturity,Period("6m"),UnitedKingdom(),ModifiedFollowing,ModifiedFollowing,DateGeneration.Forward, >>> >>>> False) >>> >>>> nominals=[100.0]*10 >>> >>>> couponRates=[0.05]*10 >>> >>>> floatingleg=IborLeg(nominals,schedule,index,Actual365Fixed()) >>> >>>> >>> >>>> fixedleg=FixedRateLeg(schedule,Actual365Fixed(),nominals,couponRates) >>> >>>> >>> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> >>>> #index.addFixing(index.fixingDate(schedule[1]),0.01) >>> >>>> >>> >>>> swap1=Swap(floatingleg,fixedleg) >>> >>>> discountTermStructure = RelinkableYieldTermStructureHandle() >>> >>>> swapEngine = DiscountingSwapEngine(discountTermStructure) >>> >>>> swap1.setPricingEngine(swapEngine) >>> >>>> discountTermStructure.linkTo(crvToday) >>> >>>> forecastTermStructure.linkTo(crvToday) >>> >>>> for x in floatingleg: >>> >>>> print x.date(), x.amount() >>> >>>> >>> >>>> >>> >>>> can show the floating cashflows on a vanilla swap. By including the >>> >>>> line: >>> >>>> >>> >>>> index.addFixing(index.fixingDate(schedule[0]),0.01) >>> >>>> >>> >>>> I can change the first fixing to 1% >>> >>>> >>> >>>> How can I *also *change the second fixing to 1.5%? >>> >>>> >>> >>>> index.addFixing(index.fixingDate(schedule[1]),0.015) >>> >>>> >>> >>>> has no effect. >>> >>>> >>> >>>> Thanks >>> >>>> >>> >>>> >>> >>>> >>> >>>> >>> >>>> -- >>> >>>> View this message in context: >>> >>>> >>> >>>> >>> >>>> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890.html >>> >>>> Sent from the quantlib-users mailing list archive at Nabble.com. >>> >>>> >>> >>>> >>> >>>> >>> >>>> >>> >>>> ------------------------------------------------------------------------------ >>> >>>> Slashdot TV. Video for Nerds. Stuff that Matters. >>> >>>> >>> >>>> >>> >>>> >>> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> >>>> _______________________________________________ >>> >>>> QuantLib-users mailing list >>> >>>> [hidden email] >>> >>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users >>> > >>> > >>> > ------------------------------------------------------------------------------ >>> > Slashdot TV. Video for Nerds. Stuff that Matters. >>> > >>> > >>> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> > _______________________________________________ >>> > QuantLib-users mailing list >>> > [hidden email] >>> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >>> > >>> > >>> > ________________________________ >>> > If you reply to this email, your message will be added to the >>> > discussion >>> > below: >>> > >>> > >>> > http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15893.html >>> > To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >>> > here. >>> > NAML >>> > >>> > ________________________________ >>> > View this message in context: Re: Changing Second/Third Fixing on >>> > Vanilla >>> > Swap >>> > >>> > Sent from the quantlib-users mailing list archive at Nabble.com. >>> > >>> > >>> > >>> > ------------------------------------------------------------------------------ >>> > Slashdot TV. Video for Nerds. Stuff that Matters. >>> > >>> > >>> > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> > _______________________________________________ >>> > QuantLib-users mailing list >>> > [hidden email] >>> > https://lists.sourceforge.net/lists/listinfo/quantlib-users >>> > >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Slashdot TV. Video for Nerds. Stuff that Matters. >>> >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> QuantLib-users mailing list >>> [hidden email] >>> https://lists.sourceforge.net/lists/listinfo/quantlib-users >>> >>> >>> ________________________________ >>> If you reply to this email, your message will be added to the discussion >>> below: >>> >>> >>> http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15896.html >>> To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click >>> here. >>> NAML >> >> >> >> ________________________________ >> View this message in context: Re: Changing Second/Third Fixing on Vanilla >> Swap >> Sent from the quantlib-users mailing list archive at Nabble.com. >> >> >> ------------------------------------------------------------------------------ >> Slashdot TV. Video for Nerds. Stuff that Matters. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk >> _______________________________________________ >> QuantLib-users mailing list >> [hidden email] >> https://lists.sourceforge.net/lists/listinfo/quantlib-users >> > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > > > ________________________________ > If you reply to this email, your message will be added to the discussion > below: > http://quantlib.10058.n7.nabble.com/Changing-Second-Third-Fixing-on-Vanilla-Swap-tp15890p15902.html > To unsubscribe from Changing Second/Third Fixing on Vanilla Swap, click > here. > NAML > > ________________________________ > View this message in context: Re: Changing Second/Third Fixing on Vanilla > Swap > Sent from the quantlib-users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Slashdot TV. Video for Nerds. Stuff that Matters. > http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk > _______________________________________________ > QuantLib-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/quantlib-users > ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Free forum by Nabble | Edit this page |