Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% price testing thing
- N = 3;
- T = 1;
- dT = T/N;
- u = exp(sigma*sqrt(dT)); %p85
- d = exp(-sigma*sqrt(dT)); %p85
- q = (exp_r^dT - d)/(u-d);
- pricemat = pricematfun(S0, u, d, N)
- derivpricematfun(pricemat, K, q)
- %% price testing thing
- N = 4;
- T = 1;
- dT = T/N;
- K = 100;
- S0 = 90;
- exp_r = 1.05;
- sigma = 0.2;
- u = exp(sigma*sqrt(dT)); %p85
- d = exp(-sigma*sqrt(dT)); %p85
- q = (exp_r^dT - d)/(u-d);
- pricemat = pricematfun(S0, u, d, N);
- derivpricemat = derivpricematfun(pricemat, K, q);
- derivpricemat(1,1)
- %%
- % 3.1
- % call = right to buy at price K
- % put = right to sell at price K
- K = 100;
- S0 = 90;
- exp_r = 1.05;
- sigma = 0.2;
- N = 4;
- T = 1;
- % dT = T/N;
- % u = exp(sigma*sqrt(dT)); %p85
- % d = exp(-sigma*sqrt(dT)); %p85
- % qu = (exp_r^dT - d)/(u-d);
- % qd = (u-exp_r^dT)/(u-d);
- pi0_eu = zeros(1,N);
- %pi0_eu = pi0_value_europecall(T, N, sigma, exp_r, S0, K)
- for n = 1:N
- pi0_eu(n) = pi0_value_europecall(T, n, sigma, exp_r, S0, K);
- end
- plot(pi0_eu)
- pi0_eu(end)
- %(St-k)+, eu call, St > k
- %% 3.2
- % K = 100;
- % S0 = 90;
- % exp_r = 1.05;
- % sigma = 0.2;
- % N = 3;
- % T = 1;
- pi0_us = zeros(1,N);
- for n = 1:N
- pi0_us(n) = pi0_value_americanput(T, n, sigma, exp_r, S0, K);
- end
- plot(pi0_us)
- pi0_us(end)
- %% 3.3
- %% forward contract at t=0
- % K = 100;
- % S0 = 90;
- % exp_r = 1.05;
- % sigma = 0.2;
- % N = 3;
- % T = 1;
- pi0_forward = zeros(1,N);
- for n = 1:N
- pi0_forward(n) = pi0_value_forward(T, n, sigma, exp_r, S0, K);
- end
- plot(pi0_forward)
- pi0_forward(end)
- lower = S0-K
- mid = pi0_eu-pi0_us(end)
- upper = pi0_forward(end)
- %%
- function y = europe_call(K, price)
- y = max(price - K, 0);
- end
- function y = american_put(K, price_current)
- y = max(K - price_current, 0);
- end
- function y = forward(S0, price_current)
- y = max(S0 - price_current, 0);
- end
- function pi0 = pi0_value_europecall(T, N, sigma, exp_r, S0, K)
- dT = T/N;
- u = exp(sigma*sqrt(dT)); %p85
- d = exp(-sigma*sqrt(dT)); %p85
- qu = (exp_r^dT - d)/(u-d);
- qd = (u-exp_r^dT)/(u-d);
- sum = 0;
- for k = 0:N
- price = S0*u^k*d^(N-k);
- sum = sum + nchoosek(N,k)*qu^k*(1-qu)^(N-k)*europe_call(K, price);
- end
- pi0 = exp_r^T*sum;
- end
- function pi0 = pi0_value_americanput(T, N, sigma, exp_r, S0, K)
- dT = T/N;
- u = exp(sigma*sqrt(dT)); %p85
- d = exp(-sigma*sqrt(dT)); %p85
- qu = (exp_r^dT - d)/(u-d);
- qd = (u-exp_r^dT)/(u-d);
- sum = 0;
- for k = 0:N
- price = S0*u^k*d^(N-k);
- sum = sum + nchoosek(N,k)*qu^k*(1-qu)^(N-k)*american_put(K, price);
- end
- pi0 = exp_r^T*sum;
- end
- function pi0 = pi0_value_forward(T, N, sigma, exp_r, S0, K)
- dT = T/N;
- u = exp(sigma*sqrt(dT)); %p85
- d = exp(-sigma*sqrt(dT)); %p85
- qu = (exp_r^dT - d)/(u-d);
- qd = (u-exp_r^dT)/(u-d);
- sum = 0;
- for k = 0:N
- price = S0*u^k*d^(N-k);
- sum = sum + nchoosek(N,k)*qu^k*(1-qu)^(N-k)*forward(S0, price);
- end
- pi0 = exp_r^T*sum;
- end
- function pricemat = pricematfun(S0, u, d, N)
- pricemat = zeros(N+1,N+1);
- for n = 1:N+1
- for i = 1:n
- pricemat(i,n) = S0*u^(i-1)*d^(n-i);
- %S0*u^k*d^(N-k)
- end
- end
- end
- function derivpricemat = derivpricematfun(mat, K, q)
- derivpricemat = zeros(size(mat));
- N = length(mat);
- for n = 1:N
- for i = 1:N-n+1
- if n == 1
- derivpricemat(i,N-n+1) = max(mat(i,N-n+1)-K,0);
- else
- derivpricemat(i,N-n+1) = derivpricemat(i,N-n+2)*(1-q)+derivpricemat(i+1,N-n+2)*(q);
- end
- end
- end
- % derivpricemat = derivpricemat(1:end-1,1:end-1);
- % derivpricemat = flip(derivpricemat,2)';
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement