[Finance] Arbitrage Free Initial Price of an American option

written by jjycjn   2014. 10. 15. 11:28

이번에는 좀 더 나아가 American option의 arbitrage free initial price를 계산하는 코드를 짜 보았다. European option과는 달리 American option은 option을 가지고 있는 사람이 expiration time 이전에도 option의 권리를 행사 할 수 있기 때문에, 이를 커버하기 위한 superhedging strategy가 이용된다. 


아래 코드에서 입력값 S0는 stock의 initial price, u와 d는 각각 stock의 가격 상승률과 하락율, T와 K는 각각 option의 exercise time과 strike price, r은 bond의 이자율, 마지막으로 type는 'call'과 'put'중에 하나를 고르며 주어진 option의 유형을 나타낸다. 또한 출력값 U0는 주어진 American option의 arbitrage free initial price를 를 나타내고, U는 (undiscounted) Snell envelope process, AB는 superhedging strategy를 각각 나타낸다.

function [U0,U,AB] = AmericanOption(S0,u,d,T,K,r,type)
% Compute the arbitrage free initial price of the American option
% by using the definition

% Make the binomial tree with S_0, S_1, S_2, ..., S_T
S = cell(1,T+1);
S{1} = S0;
for t = 2:T+1
    S{t} = zeros(2^(t-1),1);
    for j = 1:2:2^(t-1)
        S{t}(j) = S{t-1}((j+1)/2)*u;
        S{t}(j+1) = S{t-1}((j+1)/2)*d;
    end
end

% Compute the payoff sequence of the contingent claim X
Y = cell(1,T+1);
for t = 1:T+1
    if strcmp(type,'call')
        Y{t} = max(0,S{t}-K);
    elseif strcmp(type,'put')
        Y{t} = max(0,K-S{t});
    end
end

% Calculate the risk neutral probability p*
p = (1+r-d)/(u-d);

% Compute the arbitrage free initial price V0 of the claim X
% and the hedging strategy (a_t,b_t) where t=1,2,...,T
U = cell(1, T+1); % (undiscounted) Snell envelope process
AB = cell(1, T); % Superhedging strategy
D = cell(1, T); % Excess wealth
U{T+1} = Y{T+1};
for t = T:-1:1
    U{t} = zeros(2^(t-1),1);
    AB{t} = zeros(2^(t-1),2);
    D{t} = zeros(2^(t-1),1);
    for j = 1:2^(t-1)
        % Compute the value of the portfolio V_t
        U{t}(j) = max(Y{t}(j), (p*U{t+1}(2*j-1)+(1-p)*U{t+1}(2*j))/(1+r));
        % Compute the number of shares of stock a_t
        AB{t}(j,1) = (U{t+1}(2*j-1)-U{t+1}(2*j))/((u-d)*S{t}(j));
        % Compute the number of unit of bond b_t
        AB{t}(j,2) = 1/(1+r)^t*(u*U{t+1}(2*j)-d*U{t+1}(2*j-1))/(u-d);
        % Compute the excess wealth d_t
        D{t}(j) = U{t}(j) - (p*U{t+1}(2*j-1)+(1-p)*U{t+1}(2*j))/(1+r);
    end
end

% Put the excess wealth sum_1^t d_s/S_(s-1) into the bond
for t = 1:T
    for j = 1:2^(t-1)
        for s = t:-1:1
            index = floor((j-0.5)/2^(t-s))+1;
            AB{t}(j,2) = AB{t}(j,2) + D{s}(index)/(1+r)^(s-1);
        end
    end
end

% Find the arbitrage free initial price of the claim X
U0 = U{1};

end


주어진 European option과 American option이 모두 call option이고 두 option의 strike price가 같은 경우, 두 option의 arbitrage free initial price는 같음이 알려져 있다. 이를 확인하기 위하여 지난번과 같은 초기값 (S0=100, u=2, d=0.5,T=4, K=80, r=0.1, type='call')을 가지고 실제로 American option의 initial price가 64.8699가 나오는 지 확인해 보자.

S0=100; u=2; d=0.5; T=4; K=80; r=0.1; type='call';
[U0,U,AB] = AmericanOption(S0,u,d,T,K,r,type)

U0 =
   64.8699

U = 
    [64.8699]    [2x1 double]    [4x1 double]    [8x1 double]    [16x1 double]

AB = 
    [1x2 double]    [2x2 double]    [4x2 double]    [8x2 double]


또한, 주어진 option의 종류가 put option인 경우, strike price가 같다고 하더라도 일반적으로 American option의 initial price가 European option의 initial price보다 항상 크거나 같다. 이것 또한 다음의 초기값 (S0=100, u=2, d=0.5,T=4, K=120, r=0.1, type='put')을 가지고 확인해 보자. 

>> S0=100; u=2; d=0.5; T=4; K=120; r=0.1; type='put';
>> [V0] = EuropeanOption(S0,u,d,T,K,r,type)

V0 =
   37.2147

>> [U0] = AmericanOption(S0,u,d,T,K,r,type)

U0 =
   47.3287


  ::  
  • 공유하기  ::