Welcome to THETAWIKI. If you like to create or edit a page please make sure to login or register an account. All registered users please make sure to provide a valid email address.

Geometric Asian Option

From ThetaWiki
Jump to: navigation, search

ThetaML Implementation

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)
    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

For the valuation of the above model, an Exercise Model and a Stock Price Process is required.

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 );

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