Guaranteed Minimum Withdraw Benefits

From ThetaWiki

Jump to: navigation, search

Overview

ThetaScript

Model GMWB
import S "Stock price process"
import T "Maturity time"
import g "Guaranteed ratio"
import fee "Fonds management fee"
import EUR "Numeraire"
export F_obs "Fonds value"
export G_cost "Cost of guarantee" 
 
	F0 = 100
	F = F0
 
	% # of payment periods per year
	periods = 12   
	delta_t = 1/periods
	n = T*12
 
	loop n
		% Remember S for return computation
		S_old = S
 
		E_V = E(G_cost + A)
 
        Theta delta_t
 
		% New fonds value = Fund_earning - Fee - Withdraw
		F = F* S/S_old *exp(-fee*delta_t) - delta_t*g*F0*EUR
 
		% Compute future benefits 	
		A = A! + g*delta_t*F0
 
        % If fonds value too low, Guarantee knocks in
		if F < 0
			% Update guarantee costs by payed guarantee
			G_cost = G_cost! + F 
			% Reset fonds value to zero
			F = 0
		end
 
		F_obs = F
	end
 
	% Remaining benefits are payed to customer
	A = F
	G_cost = 0	
end
% Compute 
Model GMWB_early_exercise
import S "Stock price process"
import T "Maturity time"
import g "Guaranteed ratio"
import fee "Fonds management fee"
import EUR "Numeraire"
import penalty "Early exercise penalty"
export F_obs "Fonds value" 
export G_cost "Cost of guarantee"
 
    F0 = 100
    F = F0
 
    % # of payment periods per year
    periods = 12  
    delta_t = 1/periods
    n = T*12
 
    loop n
        % Remember S for return computation
        S_old = S
 
        E_V = E(G_cost + A)
 
        % Exercise early if too low expected gains 
        if E(G_cost + A) < (1-penalty) * F  
            G_cost = (1-penalty) * F 
            A = 0
        end
 
        Theta delta_t
 
        % New fonds value = Fund_earning - Fee - Withdraw
        F = F* S/S_old *exp(-fee*delta_t) - delta_t*g*F0*EUR
 
        % Compute future benefits   
        A = A! + g*delta_t*F0
 
        % If fonds value too low, Guarantee knocks in
        if F < 0
            % Update guarantee costs by payed guarantee
            G_cost = G_cost! + F 
            % Reset fonds value to zero
            F = 0
        end
 
        F_obs = F
    end
 
    % Remaining benefits are payed to customer
    A = F
    G_cost = 0  
end
Model GMWB_hedged_early_exercise
import S "Stock price process"
import T "Maturity time"
import g "Guaranteed ratio"
import fee "Fonds management fee"
import EUR "Numeraire"
import penalty "Early exercise penalty"
export Pi_obs "Hedge Portfolio"
export F_obs "Fonds value" 
export G_cost "Cost of guarantee"
 
    F0 = 100
    F = F0
    Pi_obs = Pi!
 
    % # of payment periods per year
    periods = 12
    % # of hedges per year (4 for weekly, 21 for daily)
    hedge_periods = 21
 
    delta_t = 1/periods
    n = T*12
 
    loop n
        % Remember S for return computation
        S_old = S
 
        E_V = E(G_cost + A)
 
        % Exercise early if too low expected gains 
        if E(G_cost + A) < (1-penalty) * F  
            G_cost = (1-penalty) * F
            A = 0
            Pi = 0
        end
 
        % Update values of hedge with higher frequency
        loop hedge_periods      
            Pi = Pi! - Beta(S,Pi)*(S!*EUR!-S*EUR)
            Theta delta_t / hedge_periods
        end
 
        % New fonds value = Fund_earning - Fee - Withdraw
        F = F* S/S_old *exp(-fee*delta_t) - delta_t*g*F0*EUR
 
        % Compute future benefits   
        A = A! + g*delta_t*F0
 
        % If fonds value too low, Guarantee knocks in
        if F < 0
            % Update portfolio value by payed guarantee     
            Pi = Pi! + F
            % Update guarantee costs by payed guarantee
            G_cost = G_cost! + F 
            % Reset fonds value to zero
            F = 0
        end
 
        F_obs = F
        Pi_obs = Pi
    end
 
    % Hedge does not pay anything
    Pi = 0
    % Remaining benefits are payed to customer
    A = F
    G_cost = 0  
end
Personal tools