T h e B l a c k - S c h o l e s M o d e l D a n y T e r a n , H u n t e r N e w m a n , J e f f L e e , N o a h B r e a m D e c e m b e r 1 6 t h , 2 0 1 9 P r o f e s s o r D h a r m a v a r a m M a t h 3 4 3 : N u m e r i c a l A n a l y s i s I. Introduction Before the development of the Black-Scholes model in the early 1970’s, there was no systematic approach to option pricing and trading. Before the model was created, analysts and “professionals” were merely hypothesizing and speculating with no mathematical evidence or reason. This was an era when probability was still new, and the usefulness of math in finance had not yet been discovered. In 1973, Fischer Black Myron Scholes and Robert C Merton first published their method for pricing European call and put options in their article, “The Pricing of Options and Corporate Liabilities”. Their model allowed the derivatives market to grow from a miniscule market in 1973 to the trillion-dollar market it is today. In finance, an option is a contract which gives the buyer the right, but not the obligation, to buy or sell a financial asset or instrument at an agreed upon price prior to or on a specific date (Investopedia). Options can be broken down into two categories, puts and calls. Puts give the owner of the contract the right to sell an asset at a specified price. On the other hand, calls give the owner of the contract the right to buy an asset at a specified price. Puts and calls can be further categorized as European or American. European options can only be exercised on the agreed upon date in the contract. American options, however, can be exercised at any point in time including up until and including the date of maturity. Today, the Black-Scholes model is still regarded as one of the best and most fair ways of pricing options. This model has maintained relevance and has had an impact on the finance industry for almost 50 years. The model has many inherent assumptions including the following: the option is European, no dividends are paid out during the life of the option, markets are efficient, there are no transaction costs in buying the option, the returns on the asset are normally distributed, the risk-free rate and 2 volatility of the asset are known and constant, and stock prices follow a lognormal distribution, which makes all asset prices positive. Some of these assumptions have the possibility to introduce a lot of errors such as assuming there are no transactions for buying the option and assuming the risk-free rate and volatility of the asset are constant. Scholes and Merton ended up receiving a Nobel Prize and economics in 1997 (Investopedia). II. Methods There are two numerical methods used for the Black-Scholes Merton (BSM) model formulation. The BSM model is partial differential equation (1) that can be solved using the explicit finite difference method. (1) The method uses backward, central, and standard approximations to estimate each partial derivative. Essentially, the 3 approximations take 3 stock prices (j-1, j, and j+1) at time i and are used in the BSM to compute one stock price at time i-1 (Godard Consulting). A payoff matrix is created to determine the price of the option at time zero. To compute the value of the option at time zero, a Largrange polynomial interpolation is used for each stock price j = 1, 2, ..., N created at time zero. Figure 1 is a simple pictorial description of the payoff matrix created using the finite difference method. In Figure 1, f represents the price of the option for a given time i, and stock price j. N is the theoretical max value of the stock price and T is the expiration time. To compute the value f at time i, you use the 3 closest stock prices at i+1 as inputs. 3 F i g u r e 1 : S i m p l e P a y o f f M a t r i x f r o m F i n i t e D i f f e r e n c e M e t h o d Explicit Finite Difference Method : A. Backward Difference Approximation: The backward difference approach approximates the partial derivative in the BSM formula. The backward difference approach is easily calculated ∂ t ∂ f using Taylor’s expansion of about t to find the partial derivative (Burden). ( t ) f − h ( t ) ( t ) f ( t ) 1 / 2 h f ( e ) f − h = f − h ′ + 2 ′ ′ (2) ( t ) ( t ) f ( t ) / h f ′ = f − − h (3) B. Center Approximation: The center difference approach approximates the partial derivative ∂ f ∂ S in the BSM formula. The center difference approach uses Taylor’s expansion of and ( t ) f + h an. If you subtract (2) from (4) you can solve for the partial derivative (Burden). ( t ) f − h ( t ) ( t ) f ( t ) 1 / 2 h f ( ξ ) f + h = f + h ′ + 2 ′ ′ (4) ( t ) f ( t ) f ( t ) ] / 2 h f ′ = [ + h − − h (5) C. Standard Approximation: The standard approximation is used to solve for the partial derivative in the BSM formula. The standard difference approach is very similar to the ∂ f 2 ∂ S 2 4 central approximation derivation, but solves for the second derivative by adding equations (2) and (4) (Burden). ( t ) f ( t ) 2 f ( t ) f ( t ) ] / h f ′ ′ = [ + h − + − h 2 (6) Calling the backward, center, and standard approximations a j , b j , and c j , respectively, you can solve for equation (1). After you substitute each of the approximations you can find the forward difference equation (7) (Godard Consulting). ) ) ) f i − 1 , j = ( a f j * i , j − 1 + ( b f j * i , j + ( c f j * i , j + 1 (7) / 2 δ t σ j j ) a j = 1 * ( 2 2 − r (8) δ t σ j ) ] b j = 1 − [ * ( 2 2 + r (9) / 2 δ t σ j j ) c j = 1 * ( 2 2 + r (10) Each of the approximations is used in the BSM to approximate the option price one time interval before. The finite difference method continues iterations until it arrives at the initial time zero. The method also requires boundaries for the stock price. The lower bound is always going to be greater than $0 and there are various methods to calculate the upper bound. Some financial economists and mathematicians use functions to describe the upper bound, but the upper bound used for this research is a user defined. Given the boundaries and other explicit inputs, you can calculate the price of an option using the first column of the payoff matrix through interpolation. Lagrange Interpolation : Lagrange interpolation (11) is used to obtain the option price after the explicit finite difference iterations are completed. The output for the finite difference method is a payoff matrix with the option’s price at a given point in time for a specific future stock price. The first column of the payoff matrix represent all of the various option prices dependent on the future stock price. 5 For Lagrange interpolation, the option prices are the output nodes and the stock prices are the input nodes. The stock prices are equally spaced nodes with the boundary from the finite difference method. ( x ) ( x ) ; a n d L ( x ) P = ∑ N i = 0 Y i * L i i = ∏ N k = i ; k = i / ( x − x ) k ( x − x ) i k (11) The uniqueness theorem states that if are distinct numbers and , x , x , , x x 0 1 2 N n + 1 f is a function whose values are given at these numbers, , then there exists a unique ( x ) f i = y i of degree at most n, such that for each k (Burden). ( x ) P ( x ) ( x ) f k = y k = P k One aspect to keep in mind, especially when using polynomial interpolation, is Runge’s phenomenon. Runge phenomenon is an oscillatory problem that usually occurs that the edges of the interval and is usually seen in higher degree polynomials over a set of equidistant nodes. This BSM uses polynomial interpolation to calculate the option price at a specific point in time. Runge’s phenomenon is first seen when the maturity is increased to 4.575 years, as seen in figure 2 below. F i g u r e 2 T h e b e g i n n i n g o f R u n g e ’ s P h e n o m e n o n 6 The oscillations begin in the upper right corner of the plot and propagate as seen in the following figure. After the phenomenon occurs, the oscillation get smaller and closer to the upper boundary of the initial stock value. F i g u r e 3 T h e p r o p a g a t i o n o f R u n g e ’ s P h e n o m e n o n III. Formulation While the concepts behind Black-Scholes model appear to be quite complex, the actual implementation of this estimation can be done with very few lines of code. The function takes five simple inputs: the risk free interest rate, the volatility of the stock, a strike price that the option will be executed at, a maturation time for the option in years, and an initial stock value. The output of the function is a fair option price, which is achieved by interpolating the data generated for a range of stock prices by our explicit method. We can also produce graphs from this data to see a curve of how option price changes in respect to initial value. In our example, we used a common interest rate and volatility of 5% and 20%, respectively. Next, we set our initial price to $40 with a strike price of $60 and a maturation of 1.5 years. Finally, we evaluated with a stock value range of $0 to $100. 7 To generate the estimated price data, we used the explicit method as described above. This can be completed in two steps; First, we set the boundary conditions as described for a European Black-Scholes model. These set the upper row to its minimum value, and bottom row and last column to their maximum values to be used in the estimation. Next, we calculate our constants from the Black-Scholes equation and fill up our matrix using the explicit method to backpropagate based on our boundary conditions. Finally, we have our resulting option prices for any given stock price as our first column at T0, which we can interpolate to get our answer. IV. Real World Options Testing the accuracy of our stock call option model is difficult because the model is predicting its own unique option price. One can use the algorithm’s predicted option prices to see if the current options on the market are under or overvalued. Since stock option data is expensive and hard to obtain, we cannot test if our model would have been accurate in the past. In this section we use our algorithm to find the predicted option price for Apple (AAPL) and Bank of America (BAC). We then compare the current option price on market to the predicted option price to see if the option is under or overvalued. Using Yahoo Finance data, an Apple ~1.08 year expiration call option with a strike price of $310.00 is roughly $29.60 (Yahoo Finance AAPL Option). The risk-free rate is roughly 1.54% which is the 1-year U.S. Treasury yield (U.S. Department of Treasury). The volatility of AAPL common stock is calculated using the monthly returns (using adjusted close price) over the last 10 years. The annualized volatility with 10 years of data is roughly 26.0% and the current 8 stock price is $279.86 (Yahoo Finance AAPL Historical Prices). Lastly, N = 580 and M = 78400. Given these inputs the BSM values the AAPL option at $20.399. Using Yahoo Finance data, a Bank of America ~1.08 year expiration call option with a strike price of $32.00 is roughly $6.40 (Yahoo Finance BAC Option). The annualized volatility with 10 years of data is roughly 32.0% and the current stock price is $34.70 (Yahoo Finance BAC Historical Prices). Lastly, N = 70 and M = 4900. Given these inputs the BSM values the BAC option at $6.227. The model estimated the BAC option price more precisely to its market value when compared to the AAPL option. This doesn’t necessarily mean the model is wrong because the inputs used could be inaccurate. You can use different algorithms and formulas to calculate the volatility and the risk-free rate which can affect your option price. Also, the Yahoo Finance option data is American in nature (not European) and changes daily. The value of the option contract might have increased significantly for Apply today, but will decline tomorrow. Overall, every option model will produce a unique solution and that is why option pricing is such a lucrative and volatile profession. V. Conclusion We compiled tables, found in the attached appendix, with our results from manipulating single variables while holding all others constant to analyze their impact on the Black-Scholes model. Table 1 shows that holding all other variables constant in the Black-Scholes Model, an increase in the risk-free interest rate (r) will lead to an increase in the predicted option price. This is due to the rate being an accepted value for annual increase of the stock; the higher this rate is, 9 the more likely for the stock to go up. A similar result is found in Table 2, which showed an increase in volatility σ led to an increase in option price. Likewise, a higher volatility increases risk for the seller, thus, leading to a higher option price. It is interesting to note the threshold reached at σ = 0.45, which shows Black-Scholes failing to find a fair price for a very volatile stock. Table 3 shows that an increase in the maturation length of the option will lead to an increase in the option price, as there is more time allowed for the option to reach the exercise price and have action taken on it, making the option more valuable to buyers. Table 4 shows that an increase in the exercise price of an option will lead to a decrease in the price of that option. This makes sense as the stock is less likely to reach the agreed strike price the further away it is from the initial stock price, producing a cheaper option. In the end, we found each variable to produce sensible results according to how it should affect future stock prices, upholding Black-Scholes claim to producing fair option pricing. 1 0 VI. References [1] Aitor Bergara, Finite-difference Numerical Methods of Partial Differential Equations in Finance with Matlab . Retrieved from http://www.ehu.eus/aitor/irakas/fin/apuntes/pde.pdf [2] Godard Consulting, Option Pricing Using the Finite Difference Method . Retrived from https://www.goddardconsulting.ca/option-pricing-finite-diff-explicit.html [3] James Chen, Options Investopedia, 2019. Retrieved from https://www.investopedia.com/terms/o/option.asp [4] R. L. Burden, Numerical Analysis , 10th Edition, Cengage Learning, 2014. [5] U.S. Department of Treasury, Daily Treasury Yield Curve Rates . 2019. Retrieved from https://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/textview.aspx?da ta=yield [6] Yahoo Finance, AAPL Historical Prices . 2019. Retrieved from https://finance.yahoo.com/quote/AAPL/history?p=AAPL [7] Yahoo Finance, AAPL Option Price . 2019. Retrieved from https://finance.yahoo.com/quote/AAPL220121C00310000?p=AAPL220121C00310000 [8] Yahoo Finance, BAC Historical Prices . 2019. Retrieved from https://finance.yahoo.com/quote/BAC/history?period1=1260939600&period2=1576472400&int erval=1mo&filter=history&frequency=1mo [9] Yahoo Finance, BAC Option Price . 2019. Retrieved from https://finance.yahoo.com/quote/BAC220121C00032000?p=BAC220121C00032000 1 1 VII. Appendix Predicted option prices keeping volatility (σ) = 0.2, exercise price (E) = 60, stock price (S0) = 40, maturation (T) = 1 yr, but varying interest rate (r). T a b l e 1 : V a r y i n g I n t e r e s t R a t e I n t e r e s t R a t e ( r ) 0 0 1 0 0 5 0 1 0 2 0 4 P r i c e ( $ ) 0 0 7 6 0 1 2 6 0 2 2 7 0 6 2 9 2 8 3 9 Predicted option prices using exercise price (E) = 60, stock price (S0) = 40, maturation (T) = 1 yr, interest rate (r) = 0.05 but varying volatility (σ). T a b l e 2 : V a r y i n g V o l a t i l i t y V o l a t i l i t y ( σ ) 0 1 0 2 0 3 0 4 0 4 5 P r i c e ( $ ) 0 0 0 0 0 1 2 6 0 7 5 7 1 8 0 2 3 * 1 0 93 Predicted option prices using volatility (σ) = 0.2, exercise price (E) = 60, stock price (S0) = 40, interest rate (r) = 0.05, but varying maturation (T) which is in years. T a b l e 3 : V a r y i n g M a t u r a t i o n T i m e M a t u r a t i o n T i m e ( y e a r s ) 1 / 1 2 1 / 2 1 1 5 2 P r i c e ( $ ) 0 0 0 0 0 0 0 6 0 1 2 6 0 4 2 6 0 8 5 8 Predicted option prices using volatility (σ) = 0.2, interest rate (r) = 0.05, maturation (T) = 1 yr, stock price (S0) = 40, but varying exercise price (E). T a b l e 4 : V a r y i n g S t r i k e P r i c e I E x e r c i s e P r i c e ( $ ) 4 0 5 0 6 0 7 0 8 0 O p t i o n P r i c e ( $ ) 4 0 6 8 0 8 6 0 1 2 6 0 0 1 4 0 0 0 1 1 2 Black-Scholes MATLAB Implementation By: Dany Teran, Hunter Newman, Jeff Lee, & Noah Bream Execution: • Our example uses a risk-free interest rate r of 5%, underlying volatility sigma of 20%, and strike price E of $60, and maturation T of 1.5 years to estimate the option price of a stock with an initial value S0 of $40. clear; format long ; % Input arguments r = 0.05; sigma = 0.2; E = 60; T = 1.5; S0 = 40; % Initializing matrices M = 1600; N = 100; priceMatrix = zeros(N, M); dt = T/M; % Maturity period divided by time steps timeVec = (1:M)*dt; stockVec = 1:N; % Setting boundary conditions as set forth in Black-Scholes description priceMatrix(:,M) = max(stockVec-E, 0)'; % Max final profit is stockVector minus strike priceMatrix(1,:) = 0; % At S0 = 0, option price is 0 priceMatrix(N,:) = (stockVec(N) - E)*exp(-r*timeVec(M:-1:1)); % Price at S0 = Smax % Setting Black Scholes coefficients from formula sigSquared = sigma^2; stepVec = 1:N-2; a = 0.5*dt*(sigSquared*stepVec.*stepVec-r*stepVec)'; b = 1-dt*(sigSquared*stepVec.*stepVec+r)'; c = 0.5*dt*(sigSquared*stepVec.*stepVec+r*stepVec)'; % Backpropogate using explicit algorithm priceMatrix = explicitAlgorithm(priceMatrix, a, b, c); % Results % Interpolating the data to get fair option price at a given inital price optionPrice = interpolate(stockVec,priceMatrix(:,1), S0) 1 optionPrice = 0.426661047748259 % Graphing the change in option price vs. change in initial price plot(stockVec, priceMatrix(:,1)) title( 'Initial Stock Value vs. Option Price' ) xlabel( 'Initial Stock Value' ) ylabel( 'Fair Option Price' ) mesh(timeVec, stockVec, priceMatrix) title( 'Option Value Over Time' ) xlabel( 'Time' ) ylabel( 'Initial Stock Value' ) zlabel( 'Fair Option Price' ) colormap(jet); 2 Function Definitions: function priceMatrix = explicitAlgorithm(boundedMatrix, a, b, c) % Filling the matrix by backtracking based on boundry conditions priceMatrix = boundedMatrix; M = length(priceMatrix); N = length(priceMatrix(:,1)); for i=M-1:-1:1 priceMatrix(2:N-1,i) = b.*priceMatrix(2:N-1,i+1)+c.*priceMatrix(3:N,i+1)+a.*priceMa end end function [ans] = interpolate(nodes, fnodes, x) ans = 0; for i = 1:length(nodes) ans = ans + fnodes(i) .* lagrange(nodes, x, i); end end 3 function [res] = lagrange(nodes, x, i) xi = nodes(i); res = 1; for k = 1:length(nodes) if (k ~= i) res = res .* (x - nodes(k)) ./ (xi - nodes(k)); end end end 4