QuantLib icon indicating copy to clipboard operation
QuantLib copied to clipboard

CallableBonds with american optionality

Open FahdElXD opened this issue 3 years ago • 9 comments
trafficstars

hey, is americain optionality for callable bond is implemented yet? if no is there any way I can get around that and implement it using Quantlib? (I use Python) Thank you

FahdElXD avatar May 12 '22 09:05 FahdElXD

Thanks for posting! It might take a while before we look at your issue, so don't worry if there seems to be no feedback. We'll get to it.

boring-cyborg[bot] avatar May 12 '22 09:05 boring-cyborg[bot]

According to the comment in the code, American optionality is not yet implemented.

If a daily callability schedule is equivalent to American optionality for your use case, then you can try passing all the days to the putCallSchedule argument of CallableFixedRateBond. This assumes your callable bond is fixed rate.

sweemer avatar May 21 '22 01:05 sweemer

Hi @FahdElXD and @sweemer,

using a daily schedule is normally a good way to simulate American optionality but be aware:

  • if you have a daily schedule than the callability price needs to take into account the accrual for the current coupon period as well e.g. using Bond::Price::Type::Clean when providing the (standard) redemption of 100.00.
  • do not expect good performance here, the TreeCallableFixedRateBondEngine will have many tree nodes to calculate.
  • technically within the TreeCallableFixedRateBondEngine (the only engine we currently have for callable bonds) we snap the call date to the coupon date if they are within one week. Not sure how this impacts the calculation if we have daily call dates. https://github.com/lballabio/QuantLib/blob/69cbda18c836ef4aec0e1a73943602b616fbd7d5/ql/experimental/callablebonds/discretizedcallablefixedratebond.cpp#L64-L66

ralfkonrad avatar May 23 '22 09:05 ralfkonrad

Thanks @sweemer , @ralfkonrad , I have one more question is there a way in quantlib to know if the bond was called and when it is called?

FahdElXD avatar Jun 16 '22 10:06 FahdElXD

Hi @FahdElXD

I don't think the information is available if a bond will be called.

It is all about probabilities of calling or not. Currently you cannot access this probability, it is "hidden" in this sum: https://github.com/lballabio/QuantLib/blob/769d08764b45aa41ca2032e2843030433aba7c6e/ql/experimental/callablebonds/discretizedcallablefixedratebond.cpp#L167-L183 You have to get the probability of the i-j-node in the TrinomialTree to calculate your probability.

And also take into account that the probability for a second call date also depends on the probability that the first call was not executed.

ralfkonrad avatar Jun 16 '22 14:06 ralfkonrad

Hi @ralfkonrad , Thanks for the responses, I have an isssue with callable bonds OAS when using G2 short rate model. When i call the CallableBond_OAS it returns this error : Spread is not supported for trees other than OneFactorModel Does that mean that I can't evaluate callable bonds Oas with two factor models or I am doing something wrong? and regarding the 1 Factor Model : for now i m using HW and I calibrate using swaption volatilities ? Can I calibrate using other instruments? Thank you

FahdElXD avatar Jun 23 '22 10:06 FahdElXD

Hi @FahdElXD

Does that mean that I can't evaluate callable bonds Oas with two factor models or I am doing something wrong?

Yes, it only works for 1 factor models. That's due to these lines: https://github.com/lballabio/QuantLib/blob/100082b8e75a2ec5eb30f29c51137f2aa270a37b/ql/experimental/callablebonds/treecallablebondengine.cpp#L69-L74

as only the OneFactorModel::ShortRateTree support

https://github.com/lballabio/QuantLib/blob/100082b8e75a2ec5eb30f29c51137f2aa270a37b/ql/models/shortrate/onefactormodel.hpp#L105

and regarding the 1 Factor Model : for now i m using HW and I calibrate using swaption volatilities ? Can I calibrate using other instruments?

We are also using swaptions to calibrate. I don't think other instruments make more sense here?

ralfkonrad avatar Jun 23 '22 10:06 ralfkonrad

Hi @ralfkonrad , now I use swaptions volatilities data to Calibrate the short rate model. I was wondering what if we don't have these data? can I model swaps and swaptions using QuantLib and get the volatilities from there to calibrate the model? and evaluate other instruments? is this a correct approach ? will it works or not (because we need market data that way the short rate model give results close to the market prices? Thank you

FahdElXD avatar Jun 23 '22 14:06 FahdElXD

we need market data that way the short rate model give results close to the market prices

That's exactly the argument here. Unfortunately you will need some kind of market data to calibrate the short rate model parameters so that the model will reprice swaptions comparable to the bond call dates at the same time.

ralfkonrad avatar Jun 23 '22 15:06 ralfkonrad

This issue was automatically marked as stale because it has been open 60 days with no activity. Remove stale label or comment, or this will be closed in two weeks.

github-actions[bot] avatar Aug 23 '22 02:08 github-actions[bot]

This issue was automatically closed because it has been stalled for two weeks with no further activity.

github-actions[bot] avatar Sep 06 '22 02:09 github-actions[bot]