Re: CAT Bond valuation
Posted by
Grześ Andruszkiewicz on
Jan 04, 2013; 4:33pm
URL: http://quantlib.414.s1.nabble.com/CAT-Bond-valuation-tp13511p13862.html
Hi,
Coming back to the risky bonds, I am still trying to figure out what would be the best design. Obviously I know a few not-so-elegant ways to just make it work, so this is not what I am after.
The first and maybe main question is what do CashFlow::amount() and Coupon::nominal() represent. By looking at Luigi's QL book, and the Bond class implementation, I would say that amount() is the expected amount of the coupon (this is implied by the implementation of NPV calculation for bonds), and nominal() is the risk-free nominal value (implied by the calculation of the capital repayments in the Bond class again).
All this makes sense for risk-free coupons, but not really for the risky ones. To make the current NPV calculation work, we should assume that amount() returns the expected amount as I said, but this breaks the yield calculation. The yield in the risky case is usually used to compare the market-implied riskiness of two different bonds, because obviously comparing just the market price is not enough. Hence one should use the risk-free amount() for this calculation. As for the nominal(), one could safely use the risk-free value, but it might be inconsistent with amount() for notes where the notional changes (decreases) as e.g. defaults or catastrophes happen.
Also I am not sure about what things like the clean and dirty price mean for a risky bond.
A few immediate ideas:
(1) Add a new virtual method to CashFlow for the riskfreeAmount() (a better name anyone?) with default implementation to return the amount(). Then we could change the Bond class to use the new value for appropriate quantities (yield() for example). This seems the cleanest way to do it, but it is a fundamental change in some core classes.
(2) Create a base class for risky bonds, that inherits from the Bond class. Inside keep two copies of the the coupon list (or dynamically calculate one of these from the other)---one with expected amount(), and one with risk-free amount(). Override appropriate methods (yield() again for example) accordingly. This introduces obvious data and partly code duplication, but leaves the core classes unchanged.
(3) Just go the same way as RiskyBond and subclasses (from experimental/credit) went---forget about the Bond subclass and use the amount() for risk-free values. This is maybe the most pragmatic approach, but then some bonds are not a Bond... And we get loads of code duplication.
I would be grateful for all comments and suggestions.
Cheers,
Grzegorz
PS. What is the process for committing changes to the code base? Should I just commit using my Sourceforge account, or do I need extra permission? Are the changes reviewed by anyone?
------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev