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.

Guaranteed Minimum Withdraw Benefits

From ThetaWiki
Jump to: navigation, search

Early exercise and hedging of GMWBs

ThetaML

model GMWB
  import S        "Stock price process"
  import T        "Maturity time"
  import g        "Guaranteed ratio"
  import fee      "Funds management fee"
  import EUR      "Numeraire"
  export F_obs    "Funds 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      "Funds management fee"
  import EUR      "Numeraire"
  import penalty  "Early exercise penalty"
  export F_obs    "Funds 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      "Funds management fee"
  import EUR      "Numeraire"
  import penalty  "Early exercise penalty"
  export Pi_obs   "Hedge Portfolio"
  export F_obs    "Funds 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