Example for Stock and Option Prices
Contents
Stock prices
We look at IBM stock prices for July to October 2016.
Compute the log returns from the daily closing prices.
[so,sc] = get_stock_plot('IBM',[2016 7],[]); % from July 1 2016 to now % sc are closing prices r = log(sc(2:end)./sc(1:end-1)); % daily log returns figure(2); stem(r,'r.'); grid on title('daily log returns')
Option prices
Get the current IBM option prices and plot them:
data = getOptionPrices('IBM')
option_plot(data)
data = sym: 'IBM' time: 26-Oct-2016 19:00:03 stockprice: 151.81 opt: [1x3 struct]
Call option prices with maturity June 2017
We get option data with 3 expiration dates. For the 2nd expiration date: make a table and a plot of call option price vs. strike
S0 = data.stockprice % current stockprice option = data.opt(2); % option prices for 2nd expiration date option.expir % expiration date K = option.cstrike; % vector of strike values for call option V = option.cprice; % vector of call option prices [K',V'] % table of call option prices plot(K,V,'.-',K,max(S0-K,0),'r--') xlabel('strike K') legend('call option price','payoff for current stock price S_0')
S0 = 151.81 ans = 16-Jun-2017 ans = 75 76.8 80 71.575 85 66.675 90 61.625 95 56.65 100 51.75 105 46.625 110 41.55 115 36.975 120 32.4 125 27.725 130 23.225 135 18.875 140 15.075 145 11.825 150 8.825 155 6.375 160 4.425 165 2.87 170 1.78 175 1.08 180 0.63 185 0.355 190 0.19 195 0.115 200 0.07 205 0.05 210 0.04
Find implied volatility
For the strike K0=150 use the call option price to find the implied volatility sigma.
We obtain an implied volatility sigma=16.4%.
T = years(option.expir-data.time) % time between expir. of option and time of data in years K0 = 150; i = find(K==K0) % find i with K(i)=150 V0 = V(i) % corresponding option price rc = 0; % use interest rate rc=0 f = @(sigma) BlackScholes(S0,K0,rc,sigma,T)-V0; sigma = fzero(f,0.3) % find implied volatility sigma
T = 0.63576 i = 16 V0 = 8.825 sigma = 0.16442