From mailer@stamper.itconsult.co.uk Mon Nov 14 13:46:46 2005 Return-Path: Received: from m13.itconsult.net (m13.itconsult.net [193.201.42.13]) by mail.info-bazar.net (8.13.5/8.13.5) with ESMTP id jAE5khbh025821 for ; Mon, 14 Nov 2005 13:46:44 +0800 Received: from stamper.itconsult.co.uk (stamper.itconsult.co.uk [193.201.42.31]) by m13.stamper.itconsult.co.uk (GMS 11.01.3365/NT8923.00.5408c509) with SMTP id znkriiaa for josh@mail.info-bazar.net; Mon, 14 Nov 2005 05:46:38 +0000 From: Stamper To: josh@mail.info-bazar.net Subject: Clear Stamped 0306622:no subject (file transmission) Message-Id: <0306622.a@stamper.itconsult.co.uk> Date: Mon, 14 Nov 2005 05:46:37 +0000 Status: O Stamper is a service provided free of charge to Internet users. You are very welcome to use Stamper, but you may only do so if you have first read our Terms of use, which exclude liability on our part and which provide for you to indemnify us against any potential liability arising from your use of Stamper. By using Stamper you warrant that you have read and accept the Terms. The Terms of use are available by sending email to info@stamper.itconsult.co.uk or from the web page http://www.itconsult.co.uk/stamper.htm. -----BEGIN PGP SIGNED MESSAGE----- ######################################################## # # The text of this message was stamped by # stamper.itconsult.co.uk with reference 0306622 # at 05:46 (GMT) on Monday 14 November 2005 # # For information about the Stamper service see # http://www.itconsult.co.uk/stamper.htm # ######################################################## - -----BEGIN PGP SIGNED MESSAGE----- = Whole Term Structure Model = == Abstract == In this article, we present a term structure model based on the forward zero coupon rates of a grid of dates. This model is for discrete date interval case since most of practice about interest derivative runs in that context. This model is similar to BGM model. We develop the model in section /Model Design/ in detail. We brief the calibration about volatility in section /Calibration/. We give an example of valuation in section /Example/. == Background == BGM model is a continuous time model. But real practice application demands discrete time model, thereby, many practitioner tend to modify the academic BGM formula by imposing some numerical judgment or simplification of the BGM formula so that she can handle simulation in limited computing power. However, it may be quite wrong. A simple test is to test whether the term structure can be reproduced by simulation, in other words, to show the numerical mean of the simulation procedure is the same as the discount factor (zero coupon price) of the term structure; many simplification mentioned above may fail this test. == Notation == We give some notation first to be used later. By dategrid of the model, T(0), T(1), T(2), ...T(n), we mean a series of consecutive dates for which we are interested. Note that the dategrid need not be of equal date interval. The valuation date must be one of T(.) Given the dategrid, we denote the zero coupon rate at date T(j) about date interval from T(i) to T(i+1) by Zj(i). A term structure is equivalent to a series of consecutive forward zero coupon rates. We denote the zero coupon bond price at T(j) about maturity date T(i) by Dj(i) The accrual factor of the dategrid, A(i) is defined as T(i+1)-T(i) Naturally, we have Dj(i)=Product[Exp[-Zj(k) * A(k)] , {k, j, i-1}] Based on the dategrid, a numeraire asset is defined as the accumulate value of one dollar starting from T(0) by the current zero coupon rate Zj(j) . Denote the value of the numeraire at T(j) by N(j), we have: N(j)=Product[Exp[Zk(k) * A(k)] , {k, 0, j-1}] The /*whole term structure model*/ is to model movements of Zj(i) and use N(.) as numeraire and with the three rules: 0 Zj+1(j+p) = Zj(j+p) + Xj(p) 0 Xj(.) are multi Normal distributed random variables 0 Xj(.) and Xj'(.) are independent if j <> j' By rule 2, denote the covariance of Xj(s) and Xj(s') by Cj(s,s'), denote the mean of Xj(s) by Mj,s == Formula Note == We keep three frequently used formula of the model for reference purpose in this section. For k>=p : Zj+p(j+k) = Zj+p-1(j+k) + Xj+p-1(k-p+1) = Zj+p-2(j+k) + Xj+p-2(k-p+2) + Xj+p-1(k-p+1) = .. = Zj(j+k) + Sum[Xj+i(k-i) , {i, 0, p-1}] Note that the first term is the forward zero coupon rate of date interval T(j+k+1) and T(j+k) at date T(j) and the second term is the random term. For k>p : Dj+p(j+k) = Exp[-Sum[Zj+p(j+p+i) * A(j+p+i) , {i, 0, k-p-1}]] = Exp[-Sum[(Zj(j+p+i) + Sum[Xj+h(p) , {h, 0, p-1}]) * A(j+p+i) , {i, 0, k-p-1}]] = Exp[-Sum[Zj(j+p+i)* A(j+p+i), {i, 0, k-p-1}]] * Exp[-Sum[Xj+h(p) , {h, 0, p-1}] * Sum[A(j+p+i), {i, 0, k-p-1}]] = Exp[-Sum[Zj(j+p+i)* A(j+p+i), {i, 0, k-p-1}]] * Exp[-Sum[Xj+i(p) , {i, 0, p-1}] * (T(j+k) - T(j+p))] Note that the first term is simply the discount factor of date interval T(j+p) and T(j+k) at date T(j) and the second term is the random term. For s>=2, see the section /Model Design/ for detail : 1/N(s) = D0(s)*Exp[-Sum[Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}], {j, 0, s-2}]] == Model Design == We develop the calibration formula about Mj,s in this section. The maturity date is T(m) and hedge deals must have zero expectation, for hedge deal "zero coupon bond matured at T(s)", we can roll the value obtained at T(0) or T(s) to T(m) by the numeraire, therefore we have, for s>=2: 0 = E[ (-D0(s)/N(0) * N(m) + 1/N(s) * N(m) )/N(m) ] = E[ -D0(s) + 1/N(s) ] i.e. D0(s) = E[1/N(s)] = E[ 1/Product[Exp[Zk(k) * A(k)] , {k, 0, s-1}] ] = E[ Exp[-Sum[Zk(k)*A(k), {k, 0, s-1} ]] ] (1) We now develop Zp(p) and Sum[ Zk(k)*A(k) , {k, 0, s-1}]. By rule 1, we have the relationship of Zp(p) and Z0(p): Zp(p) = Zp-1(p) + Xp-1(1) = Zp-2(p) + Xp-2(2) + Xp-1(1) = ... = Z0(p) + Sum[ Xp-j(j), {j, 1, p}] (2) Put (2) into (1), we have: Sum[ Zk(k)*A(k) , {k, 0, s-1}] = Sum[ (Z0(k) + Sum[ Xk-j(j), {j, 1, k}])*A(k) , {k, 0, s-1} ] = Sum[ Z0(k)*A(k), {k, 0, s-1} ] + Sum[ A(k)*Sum[ Xk-j(j), {j, 1, k}], {k, 0, s-1} ] Therefore, D0(s) = E[ Exp[-Sum[Zk(k)*A(k), {k, 0, s-1} ]] ] = E[ Exp[-Sum[ Z0(k)*A(k), {k, 0, s-1} ] - Sum[ A(k)*Sum[ Xk-j(j), {j, 1, k}], {k, 0, s-1} ]] ] = Exp[-Sum[ Z0(k)*A(k), {k, 0, s-1} ] * E[Exp[-Sum[ A(k)*Sum[ Xk-j(j), {j, 1, k}], {k, 0, s-1} ]]] = D0(s)*E[Exp[-Sum[ A(k)*Sum[ Xk-j(j), {j, 1, k}], {k, 0, s-1} ] ]] = D0(s)*E[Exp[-Sum[ A(k)*Sum[ Xj(k-j), {j, 0, k-1}], {k, 0, s-1} ] ]] Cancel D0(s), therefore we have, 1 = E[Exp[-Sum[ A(k)*Sum[ Xj(k-j), {j, 0, k-1}], {k, 0, s-1} ] ]] (3) Inspired by rule 3, we want to change the order of summation. Let If(.) be the boolean function defined as true is 1 and false is 0, so we have: Sum[ A(k)*Sum[ Xj(k-j), {j, 0, k-1}], {k, 0, s-1} ] = Sum[Sum[ A(k)*Xj(k-j)*If[j>=0 and j<=k-1], {j, 0, s-1}], {k, 0, s-1} ] = Sum[Sum[ A(k)*Xj(k-j)*If[j>=0 and j<=k-1], {k, 0, s-1}], {j, 0, s-1} ] = Sum[Sum[ A(k)*Xj(k-j)*If[j>=0 and k>=j+1], {k, 0, s-1}], {j, 0, s-1} ] = Sum[Sum[ A(k)*Xj(k-j)*If[j>=0], {k, j+1, s-1}], {j, 0, s-1} ] = Sum[Sum[ A(k)*Xj(k-j), {k, j+1, s-1}], {j, 0, s-2} ] = Sum[Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}], {j, 0, s-2} ] Therefore, (3) becomes: 1 = E[Exp[-Sum[ A(k)*Sum[ Xj(k-j), {j, 0, k-1}], {k, 0, s-1} ] ]] = E[Exp[-Sum[Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}], {j, 0, s-2} ]]] = E[Product[Exp[-Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}]], {j, 0, s-2}]] = Product[ E[Exp[-Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}]]], {j, 0, s-2}] (4) By observing (4), it suffices for our model design that, for each s>=2 and each j from 0 to s-2, we have: 1 = E[Exp[-Sum[ A(j+k)*Xj(k), {k, 1, s-j-1}]]] = Exp[ Bj(s).Mj(s) + 1/2* Bj(s).Cj(s).Transpose[Bj(s)] ] where Mj(s) is the matrix of size s-j-1 by 1 |Mj,1| |...| |Mj,s-j-1| and Bj(s) is the row matrix of size 1 by s-j-1 [-A(j+1), -A(j+2), ... -A(s-1)] and Cj(s) is the covariance matrix of size s-j-1 by s-j-1 |Cj(1,1)|Cj(1,2)|...|Cj(1,s-j-2)|Cj(1,s-j-1)| |Cj(2,1)|Cj(2,2)|...|Cj(2,s-j-2)|Cj(2,s-j-1)| |...| |Cj(s-j-2,1)|Cj(s-j-2,2)|...|Cj(s-j-2,s-j-2)|Cj(s-j-2,s-j-1)| |Cj(s-j-1,1)|Cj(s-j-1,2)|...|Cj(s-j-1,s-j-2)|Cj(s-j-1,s-j-1)| In other words, for each s>=2 and each j from 0 to s-2, we have: 0 = Bj(s).Mj(s) + 1/2* Bj(s).Cj(s).Transpose[Bj(s)] (5) Note that (5) is inductive on s for each j, to developed the calibration formula, we compare (5) for s and (5) for s-1 : 0 = Bj(s).Mj(s) + 1/2* Bj(s).Cj(s).Transpose[Bj(s)] (6) 0 = Bj(s-1).Mj(s-1) + 1/2* Bj(s-1).Cj(s-1).Transpose[Bj(s-1)] (7) Inductively, we have: Mj(s)= |Mj(s-1)| |Mj,s-j-1| and Bj(s)= |Bj-1(s)|-A(s-1)| and Cj(s)= |Cj-1(s)|Transpose(Wj(s-1))| |Wj(s-1)|Cj(s-j-1,s-j-1)| where Wj(s) is the matrix of size 1 by s-j-1 |Cj(s-j,1)|Cj(s-j,2)|...|Cj(s-j,s-j-1)| Therefore, (6) becomes: 0 = Bj(s).Mj(s) + 1/2* Bj(s).Cj(s).Transpose[Bj(s)] = Bj-1(s).Mj(s-1)-A(s-1)*Mj,s-j-1 + 1/2* ( Bj(s-1).Cj(s-1).Transpose[Bj(s-1)]) -2*A(s-1)* Wj(s-1).Transpose[Bj(s-1)] + A(s-1)^2*Cj(s-j-1,s-j-1) ) And because of (7), we have: A(s-1)*Mj,s-j-1 = -A(s-1)*Wj(s-1).Transpose[Bj(s-1)] + 1/2*A(s-1)^2*Cj(s-j-1,s-j-1) Cancel A(s-1), we have, for s>=2 and j from 0 to s-2: Mj,s-j-1 = -Wj(s-1).Transpose[Bj(s-1)] + 1/2*A(s-1)*Cj(s-j-1,s-j-1) Restate the formula by the definition of Wj(.) and Bj(.) and rearrange the index, we have finally the calibration formula for Mj,k . It is: For k>=1 and j>=0: Mj,k = Sum[Cj(k,i)*A(j+i) , {i, 1, k-1}] + 1/2*A(j+k)*Cj(k,k) (8) where the summation part is null when k=1. == Calibration == Since we design the mean Mj,s in the way that the zero coupon bond (and all ordinary term structure instrument) is arbitrage-free, we only need calibration for proper vol parameters Cj(.,.). To estimate volatility, we need to impose some form for the covariance. We impose a form for Cj(.,.) which is for a proper symmetric function V(.,.): Cj(a, b) = (T(j+1)-T(j))* V(T(j+a)-T(j), T(j+b)-T(j)) and therefore we have the notation Cj(s) = (T(j+1)-T(j)) * Vj(s) where Vj(s) is the matrix of size s-j-1 by s-j-1 whose (a,b) entry is V(T(j+a)-T(j), T(j+b)-T(j)) The rational for covariance of this form are: * By rule 1, when the date T(j+1) is very near T(j), Xj(.) shall be near zero which can be done by the term T(j+1)-T(j) * Empirically, since the estimation procedure of variance and covariance is conduct along the time line (market factor historical data), so the remaining form V(.,.) does not make sense if it is not stationary. * By rule 3, there shall be a term in formula about mean and variance of T(j+1)-T(j) Given this form of Cj(.,.) , we can estimate V(.,.) from the historical data, or we can estimate by available vol-related deals' current price. Practically, we shall calibrate by the current available hedge derivatives relevant to the derivative in question, often, we mean caplet(s). We are better off if we have non-simulation algorithm to find the value of a caplet since this will speed up the calibration procedure. Fortunately, the model has a non-simulation solution for caplet. == Example == We want to calculate the caplet: if the forward cash rate F from T(s) to T(s+1) is greater than X then receive (F-X)*A(s) at T(m), of course m>=s. We need to calculate: E[ (Exp[Zs(s)*A(s)]-1-X*A(s))*Ds(m)/N(s) * If[Exp[Zs(s)*A(s)]-1-X*A(s) >=0] ] We have known by section /Formula Note/ that: Zs(s) = Z0(s) + Sum[ Xi(s-i), {i, 0, s-1}] Ds(m) = Exp[-Sum[Z0(s+i)* A(s+i), {i, 0, m-s-1}]] * Exp[-Sum[Xi(s) , {i, 0, s-1}] * (T(m) - T(s))] 1/N(s) = D0(s)*Exp[-Sum[Sum[ A(i+j)*Xi(j), {j, 1, s-i-1}], {i, 0, s-2}]] Observe the integrand, it has two parts: 0 Exp(Zs(s)*A(s))*Ds(m)/N(s) 0 (1+X*A(s))*Ds(m)/N(s) both are of the form *Exp(sum of Normal random variables)* Observe that the integration domain: Exp[Zs(s)*A(s)]-1-X*A(s) >=0 which is equivalent to Zs(s) >= Ln[1+X*A(s)]/A(s) is of this form: *sum of Normal random variables less than a constant* Therefore, we can apply the Margrabe formula to solve this question. See MultiDimensionMargrabe for reference. - - ----- For the integration domain, Zs(s) >= Ln[1+X*A(s)]/A(s) It is the same as Sum[ Xi(s-i), {i, 0, s-1}] >= Ln[1+X*A(s)]/A(s)-Z0(s) For the first part of the integrand, Exp[Zs(s)*A(s)]*Ds(m)/N(s) = Exp[(Z0(s) + Sum[ Xi(s-i), {i, 0, s-1}])*A(s)] * Exp[-Sum[Z0(s+i)* A(s+i), {i, 0, m-s-1}]] * Exp[-Sum[Xi(s) , {i, 0, s-1}] * (T(m) - T(s))] * D0(s)*Exp[-Sum[Sum[ A(i+j)*Xi(j), {j, 1, s-i-1}], {i, 0, s-2}]] = D0(m)*Exp[Z0(s)*A(s)] * Exp[ Sum[ A(s)*Xi(s-i) - (T(m) - T(s)) * Xi(s), {i, 0, s-1}] - Sum[Sum[ A(i+j)*Xi(j), {j, 1, s-i-1}], {i, 0, s-2}] ] For the second part of the integrand, (1+X*A(s))*Ds(m)/N(s) = (1+X*A(s))* Exp[-Sum[Z0(s+i)* A(s+i), {i, 0, m-s-1}]] * Exp[-Sum[Xi(s) , {i, 0, s-1}] * (T(m) - T(s))] * D0(s)*Exp[-Sum[Sum[ A(i+j)*Xi(j), {j, 1, s-i-1}], {i, 0, s-2}]] = (1+X*A(s)) * D0(m)/D0(s) * Exp[ - Sum[ (T(m) - T(s)) * Xi(s) , {i, 0, s-1}] - Sum[Sum[ A(i+j)*Xi(j), {j, 1, s-i-1}], {i, 0, s-2}] ] == Some Remarks == We state some remarks in this section. === Factor Number === *Factor* is an ambiguous concept in term structure model. Originally, it means the number of random source of each move of the market factors in a model, however, random variables can be perfect correlated and degenerates to less number of random source while the algorithm is used for multi-factor context. Originally the factor number for this model is the number of the dategrid n, however, when we estimate the covariance matrix, we may impose an assumption that many random variables among these n random variables are perfect correlated, say, random variables within 1Y is perfect correlated, random variables from 1Y to 3Y is perfect correlated, ... and so on and so forth. For one factor model, we can assume the correlation among all pair of Xj(.) are 1. === Negative Rate === Just like many short rates model, the market factor (the zero coupon rate here) may be negative, but remember that we require the financial model to be martingale simply for arbitrage-free purpose and this has nothing to do with the empirical market factor data. See MartingaleApproach. - -----BEGIN PGP SIGNATURE----- Version: PGP 7.0.4 iQB1AwUBQ3gkllY6lNZmmS4NAQEcJAL/bjyrr4XpoRUaE3ky15aQeCukH2HSd2Jw I86cvAMVWZ9CSwLRNusUsMPVoNUsTAMso4bx9TBPueQhDefU7tsR7raOzrACClqr vshMJ+wCCDUWUKzMiqGT/4BcXE7EXXLB =wIrK - -----END PGP SIGNATURE----- -----BEGIN PGP SIGNATURE----- Version: 2.6.3i Charset: noconv Comment: Stamper Reference Id: 0306622 iQEVAgUBQ3gkvYGVnbVwth+BAQHsXQf7BYlwiSOTEH5KzieqKqHHZC/gDM2ySJhA BbbBOXlWAnB3VsScw+YmMgFzQ7/BWg/MLz3o5gLZTEh8LyoTcXY+7+my3kfgrKkl coPkq7RQObI/y6hKxblfSjdPi2tGNJcleqzDUR8hWxl4WxWyXc1YmOVHjpivr/bR CRTtlN1h6XV1yEfz+vY8rrHyAAaDPRUa0tCtMOpPr1bmY1z7uPuwBh+1aQ78f5sO IfaHhkl8QAYU5ugK0kXpYGwPxwpyeuAO/5GDnCNZNvxVa+y3ROsyhmXxu3nrDmUx z+zy8HXLaie3T/e7CPjLXxRZ3/d1EWLfaKsfDK0qghQA/bzO25rLMg== =9V40 -----END PGP SIGNATURE-----