Geometric Asian Option
Similar to the Asian Option, the geometric Asian Option is an option based on the average previous asset prices.
model AsianGeometric implements IExercisableOption import S "Stock price" import CUR "Currency value" import K "Strike" import T "Maturity" import N "Number of observations" export ExcerciseValue_CUR "Excercise value" ExcerciseValue_CUR = 0 A = 0 loop N Theta T/N A = A + log(S) end Average = exp((1/N)*A); ExcerciseValue_CUR = max(Average-K,0) * CUR % rigtht after Maturity, exercise value is 0 again theta @dt ExcerciseValue_CUR = 0 end
For this specific option with a Geometric Brownian Motion as stock price model and constant interest rate, an analytic price function is available:
% Analytic solution for Geometric Asian Option Call model AsianGeometricAnalytic import T "Maturity" import N "Number of Observations" import K "Strike" import r "constant short forward short rate" import sigma "volatility" import S "Stock price" export P sigsqT= sigma^2*T*(N+1)*(2*N+1)/(6*N*N); muT = 0.5*sigsqT + (r - 0.5*sigma^2)*T*(N+1)/(2*N); d1 = (log(S/K) + (muT + 0.5*sigsqT))/(sqrt(sigsqT)); d2 = d1 - sqrt(sigsqT); N1 = 0.5*(1+@matlab:erf(d1/sqrt(2))); N2 = 0.5*(1+@matlab:erf(d2/sqrt(2))); P = exp(-r*T)*( S*exp(muT)*N1 - K*N2 ); end
If the option has already started, the price is given by (please check!):
model AsianGeometricAnalyticStarted import T "Maturity" import N "Total Number of Observations" import K "Strike" import r "constant short forward short rate" import sigma "volatility" import S "Stock price" import A "Current average" import M "Number of observations in A" export P % Adjust Strike to accomodate previous average -> www.global-derivatives.com %KAdjusted = M/N * K - (N-M)/N * A alpha = (N-M+1)/(N+1) KAdjusted = K / (A * alpha) call AsianGeometricAnalytic export T-M/N*T to T export N-M to N export KAdjusted to K export r export sigma export S import P from P end