|
From: Toyin A. <toy...@ho...> - 2006-07-19 07:40:55
|
Hi all, I am looking at the possibility of pricing callable capped floater using QuantLib and it seems like most of the code to price such a product is more or less within Quantlib already (parts of the logic is present in different classes). Basically I want to price, for each period, the following Libor() - Caplet(Libor, X)*Notional*AccuralPeriod , callable @ $Y for each period. This has to be priced via a tree methodology and the Libor() - Cap(Libor, X)*Notional*AccuralPeriod part can be priced by 1) implementing the Libor() pricing via the float leg code that is part of the DiscretizedSwap class 2) implementing the Caplet(Libor, X) pricing via the cap leg code that is part of the DiscretizedCapFloor class Thus these two legs can be pulled out to form a class like the DiscretizedSwaption class. The issue I have is how to price the callable part. Now I have this little description of the callable algorithm from the FinancialCAD web site : ########################################################### The price of a callable capped floater is obtained by building a trinomial interest rate tree, constructing the yield curve on each node of the tree, and re-valuing the capped floater (note) on each node. On nodes that are exercise dates, the price of the note is compared to the call and/or put price(s). If it is possible for the issuer to call, and the call price is less than the note price, then the call option is exercised and the price of the option on that node is the difference between the call price and the note price. If the note is not called and it is possible for the holder to put, and the put price is greater than the note price, then the put option is exercised and the price of the option on that node is the difference between the put price and the note price. The option price is rolled back to earlier nodes on the tree and re-calculated as above depending on whether or not the option is exercised. The option price rolled back to the value date is added to the price of the non-callable capped floater on the value date to get the price of the callable capped floater. ########################################################### My question is regarding the statement " difference between the call price and the note price". Again the note can be computed easily via the "Libor() - Caplet(Libor, X)*Notional*AccuralPeriod" expression. The note is priced backwards in time and each time you step back, an extra coupon period is added onto the note (at each node). The tree that quantlib builds for interest rate pricing (ie - capfloor via tree) assumes that you are standing on the start date of a coupon period (see preAdjustValuesImpl() of the DiscretizedCapFloor() class). Thus you cannot use the regular max(L-X,0) expression to value a cap, but a modified version to take into account that you are standing on the start date of a rate fixing and not the end. Thus, FINALLY!!, the question I am asking : Is there an adjustment that one needs to perform on this "difference between the call price and the note price" because we are standing on the start date of each coupon period. I am making the assumption that the $Y callable price is to be paid at the each of each callable period. Is this the normal convention? Long winded I know...!! Toy out. |