Option Pricing with Greek Calculation Andreas Griewank Institute for Applied Mathematics, Humboldt Universit¨ at zu Berlin, Germany Matheon, DFG - Research Center, Berlin, Germany
[email protected]
November 14, 2007
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
1 / 24
References
F.Y. Kuo and I. Sloan (2005): Lifting the Curse of Dimensionality M. Giles and P. Glassermann (2007): Smoking Adjoints for Monte Carlo Greeks A. Griewank and A. Walther (2000, 2008): Evaluating Derivatives, Principles and Techniques of Algorithmic Differentiation A. Griewank (2008):( in preparation) Evaluating and Bounding Cross-derivatives
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
2 / 24
Contents
Quadratures by Quasi-Monte Carlo (QMC) Cross-Derivative Evaluation by AD Cross-Derivative Bounding by AD Application to Asia Options of 80 stocks (Tentative) Conclusions
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
3 / 24
High Dimensional Quadrature by QCD
Z I(f ) =
f (x)dx
with n ≥ 50
[0,1]n
≈ N N k ·z +∆ 1 X f (xk ) with xk = QX (f ) ≡ N k=1 N k=1 for some generating vector z ∈ Z. Doable if f is in some sense largely separable, i.e., small cross terms X f (x) = f J (xJ ) for xJ = (xj )j∈J . J⊂{1,...,n}
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
4 / 24
High Dimensional Quadrature by QCD This NOVA decomposition is unique if Z1
f J (xJ )dxj = 0 for all j ∈ J.
0
We call f partially separable if equivalently f {1,2,...,n} (x) = 0
⇐⇒
f{1,2,,...,n} (x) = 0,
where fJ (x) ≡
∂ |J| f (x) denotes cross − derivative (∂xj )j∈J
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
5 / 24
High Dimensional Quadrature by QCD
Multiplicative bounds g = (γ1 , . . . , γn ) ∈ IR n s.t. Y |fj (x)| ≤ γj for x ∈ Ω j∈J
yield unanchored Sobolev space F w.r.t hf , hiF
≡
X J⊂{1,...,n}
Andreas Griewank (HUB, Matheon)
1 Q γj j∈J
Z fJ (x) · gJ (x) dx [0,1]n
Option Pricing with Greek Calculation
November 14, 2007
6 / 24
Reproducing Kernel by Grace Waba With B2 (z) = x 2 − x +
1 2
the kernel k(x, y ) =
n Y
1 + γj
j=1
1 1 1 B2 (|xj − yj |) + (xj − )(yj − ) 2 2 2
yields Z hk(·, y ), f (·)i =
k(x, y )f (x)dx = f (y ) [0,1]n
Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
7 / 24
High Dimensional Quadrature by QCD Quadrature Error Bound for X = (xk )Nk=1... eN (X ) ≡ max [QX (f ) − I(f )]2 f ∈F
=
N N 1 XX k(xk , x` ) N 2 k=1 `=1
Average error w.r.t. X ∈ [0, 1]d·N yields
e¯N = ≤
Andreas Griewank (HUB, Matheon)
! 21 γk 1+ −1 6 k=1 ! N X 1 1 √ exp γk N 12 k=1 √1 N
n Y
Option Pricing with Greek Calculation
November 14, 2007
8 / 24
(In)Tractability Results γj = 1 =⇒ eN2 (X )
γ¯ ≡
1 ≥ N
∞ X
for j = 1, . . . , N
1/p
γj
13 12
n −1
0
Option Pricing with Greek Calculation
November 14, 2007
9 / 24
High Dimensional Quadrature by QCD Suitable choice: Shifted Lattice Rule n z o xk = k + ∆ with ∆ ∈ [0, 1]n N
Averaging w.r.t ∆ yields e¯N2 (z1 , . . . , zn )
n n 1 XY kzj = −1 + (1 + γj B2 N k=1 j=1 N
allows recursive = greedy construction from z1 = 1 for j = 2, . . . , n zj = argmin e¯N (z2 , . . . , zj−1 , z) z
result achieves (∗). Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
10 / 24
Cross-Derivative Evaluation by AD
Number cross-derivatives versus all derivatives of order ≤ n n
2
2n n
≈
4n p πn/2
Cost of propagation through multiplication operation n
3
Andreas Griewank (HUB, Matheon)
3n n
≈
6.75n p 4πn/3
Option Pricing with Greek Calculation
November 14, 2007
11 / 24
Workhorse: Incremental Convolution for(int j=0;j< h;j++) v[j] = 0; // with h = pow(2,n) void inconv(int h,double* u,double* w,double* v) if(h==1) v[0]+=u[0]*w[0]; // -= u[0]*w[0]; for deconv else h = h/2 inconv(h,u,w,v); inconv(h,u+h,w,v+h); inconv(h,u,w+h,v+h);
Significant speed up by unrolling lowest 3 levels of recursion!! Andreas Griewank (HUB, Matheon)
Option Pricing with Greek Calculation
November 14, 2007
12 / 24
Recursive Multiplications void mult(int h, double* u, double* w, double* v) { v[0]=u[0]*w[0]; for(int j=1;j