September 16th, 2013, 9:59 am
sure, here are formulas I implemented once. Do they make sense from your point of view ? I do not really use them any more, so there might be bugs...LEFT WING leftCutoff_ = moneynessGrid1[leftIndex] * f_; Real left1d = source->digitalOptionPrice(leftCutoff_,Option::Put); Real left2d = source->density(leftCutoff_,Option::Put); Real p0 = source->optionPrice(leftCutoff_,Option::Put); Real l1 = left1d / p0; Real l2 = - left1d / (p0*p0) * left1d + 1.0 / p0 * left2d; // compute paramters for price extrapolation at left bound lc_=0.5*(l2+mu_/(leftCutoff_*leftCutoff_)); lb_=l1-mu_/leftCutoff_-2.0*lc_*leftCutoff_; la_=log(p0)-mu_*log(leftCutoff_)-lb_*leftCutoff_-lc_*leftCutoff_*leftCutoff_;RIGHT WING rightCutoff_ = moneynessGrid1[rightIndex] * f_; Real right1d_ = -source->digitalOptionPrice(rightCutoff_); Real right2d_ = source->density(rightCutoff_); Real p1 = source->optionPrice(rightCutoff_); Real r1 = right1d_ / p1; Real r2 = - right1d_ / (p1*p1) * right1d_ + 1.0 / p1 * right2d_; // compute parameters for price extrapolation at right bound rc_=r1*rightCutoff_*rightCutoff_*rightCutoff_+0.5*rightCutoff_*rightCutoff_*(rightCutoff_*rightCutoff_*r2+nu_); rb_=-rightCutoff_*rightCutoff_*r1-nu_*rightCutoff_-2.0*rc_/rightCutoff_; ra_=log(p1)+nu_*log(rightCutoff_)-rb_/rightCutoff_-rc_/(rightCutoff_*rightCutoff_);PUT EXTRAPOLATIONdiscount * ( pow(strike,mu_)*exp(la_+lb_*strike+lc_*strike*strike)CALL EXTRAPOLATIONdiscount * ( pow(strike,-nu_)*exp(ra_+rb_/strike+rc_/(strike*strike))
Last edited by
pcaspers on September 15th, 2013, 10:00 pm, edited 1 time in total.