Wednesday, August 21, 2024

x̄ - > Implementing the Black-Scholes model using Python

 To implement the Black-Scholes model using Python and visualize the option pricing for stocks like Apple, Microsoft, and Tesla, we'll proceed step by step. Below is a Python implementation that uses historical stock data to calculate option prices using the Black-Scholes formula, and then plots the results.


### Step 1: Import Necessary Libraries


We'll need several libraries, including `numpy` for numerical operations, `scipy` for cumulative distribution functions, and `matplotlib` for plotting.


```python

import numpy as np

from scipy.stats import norm

import matplotlib.pyplot as plt

import pandas as pd

import yfinance as yf

```


### Step 2: Define the Black-Scholes Formula


We'll define a function `black_scholes` that calculates the price of a European call option.


```python

def black_scholes(S, K, T, r, sigma, option_type="call"):

    """

    S: Current stock price

    K: Option strike price

    T: Time to expiration (in years)

    r: Risk-free interest rate (annualized)

    sigma: Volatility of the stock (annualized)

    option_type: "call" or "put"

    """

    d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))

    d2 = d1 - sigma * np.sqrt(T)

    

    if option_type == "call":

        price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)

    elif option_type == "put":

        price = K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)

    else:

        raise ValueError("Invalid option type. Use 'call' or 'put'.")

    

    return price

```


### Step 3: Get Stock Data


We'll use the `yfinance` library to download the historical stock prices for Apple, Microsoft, and Tesla.


```python

# Define the stocks and the time period

stocks = ["AAPL", "MSFT", "TSLA"]

start_date = "2023-01-01"

end_date = "2024-01-01"


# Download the data

data = yf.download(stocks, start=start_date, end=end_date)['Adj Close']


# Calculate the annualized volatility

volatility = data.pct_change().std() * np.sqrt(252)  # 252 trading days in a year


print(volatility)

```


### Step 4: Calculate Option Prices


Now, we’ll calculate the option prices for each stock using the Black-Scholes formula. We'll assume some values for the strike price, time to maturity, and risk-free rate.


```python

# Parameters for the Black-Scholes model

K = 1.05 * data.iloc[-1]  # Assume strike price is 5% higher than the last price

T = 1  # 1 year to maturity

r = 0.05  # 5% risk-free rate


# Calculate option prices

option_prices = {}


for stock in stocks:

    S = data[stock].iloc[-1]  # Last available price

    sigma = volatility[stock]

    call_price = black_scholes(S, K[stock], T, r, sigma, option_type="call")

    put_price = black_scholes(S, K[stock], T, r, sigma, option_type="put")

    option_prices[stock] = {"call": call_price, "put": put_price}


# Display the option prices

option_prices

```


### Step 5: Plot the Results


Finally, let's plot the option prices against different stock prices to visualize how they change.


```python

# Stock price range for plotting

S_range = np.linspace(0.8 * data.iloc[-1].min(), 1.2 * data.iloc[-1].max(), 100)


# Plotting

plt.figure(figsize=(14, 8))


for stock in stocks:

    S = S_range

    sigma = volatility[stock]

    call_prices = black_scholes(S, K[stock], T, r, sigma, option_type="call")

    put_prices = black_scholes(S, K[stock], T, r, sigma, option_type="put")

    

    plt.plot(S, call_prices, label=f"{stock} Call Option")

    plt.plot(S, put_prices, label=f"{stock} Put Option", linestyle='--')


plt.title('Black-Scholes Option Prices')

plt.xlabel('Stock Price')

plt.ylabel('Option Price')

plt.legend()

plt.grid(True)

plt.show()

```


### Explanation of the Code:


1. Black-Scholes Formula (`black_scholes`):

    - Inputs: Current stock price \( S \), strike price \( K \), time to expiration \( T \), risk-free rate \( r \), volatility \( \sigma \), and option type (call or put).

    - Outputs: Price of the European call or put option.


2. Stock Data:

    - We use the `yfinance` library to fetch historical adjusted closing prices for Apple, Microsoft, and Tesla.

    - Annualized volatility is calculated based on daily returns.


3. Option Pricing:

    - The option prices are computed using the last stock prices and the corresponding volatilities.

    - We assume a strike price 5% higher than the last stock price and a time to expiration of one year.


4. Plotting:

    - We plot the option prices (both call and put) as a function of different stock prices within a specified range.


### Step 6: Execute the Code


You can execute this code in a Python environment (like Jupyter Notebook) to visualize how the option prices for Apple, Microsoft, and Tesla behave under the Black-Scholes model.



Creative Commons License




Editor: Zacharia Maganga Nyambu
Email:zachariamaganga@duck.com

No comments:

Meet the Authors
Zacharia Maganga’s blog features multiple contributors with clear activity status.
Active ✔
πŸ§‘‍πŸ’»
Zacharia Maganga
Lead Author
Active ✔
πŸ‘©‍πŸ’»
Linda Bahati
Co‑Author
Active ✔
πŸ‘¨‍πŸ’»
Jefferson Mwangolo
Co‑Author
Inactive ✖
πŸ‘©‍πŸŽ“
Florence Wavinya
Guest Author
Inactive ✖
πŸ‘©‍πŸŽ“
Esther Njeri
Guest Author
Inactive ✖
πŸ‘©‍πŸŽ“
Clemence Mwangolo
Guest Author

x̄ - > Bloomberg BS Model - King James Rodriguez Brazil 2014

Bloomberg BS Model - King James Rodriguez Brazil 2014 πŸ”Š Read ⏸ Pause ▶ Resume ⏹ Stop ⚽ The Silent Kin...

Labels

Data (3) Infographics (3) Mathematics (3) Sociology (3) Algebraic structure (2) Environment (2) Machine Learning (2) Sociology of Religion and Sexuality (2) kuku (2) #Mbele na Biz (1) #StopTheSpread (1) #stillamother #wantedchoosenplanned #bereavedmothersday #mothersday (1) #university#ai#mathematics#innovation#education#education #research#elearning #edtech (1) ( Migai Winter 2011) (1) 8-4-4 (1) AI Bubble (1) Accrual Accounting (1) Agriculture (1) Algebra (1) Algorithms (1) Amusement of mathematics (1) Analysis GDP VS employment growth (1) Analysis report (1) Animal Health (1) Applied AI Lab (1) Arithmetic operations (1) Black-Scholes (1) Bleu Ranger FC (1) Blockchain (1) CATS (1) CBC (1) Capital markets (1) Cash Accounting (1) Cauchy integral theorem (1) Coding theory. (1) Computer Science (1) Computer vision (1) Creative Commons (1) Cryptocurrency (1) Cryptography (1) Currencies (1) DISC (1) Data Analysis (1) Data Science (1) Decision-Making (1) Differential Equations (1) Economic Indicators (1) Economics (1) Education (1) Experimental design and sampling (1) Financial Data (1) Financial markets (1) Finite fields (1) Fractals (1) Free MCBoot (1) Funds (1) Future stock price (1) Galois fields (1) Game (1) Grants (1) Health (1) Hedging my bet (1) Holormophic (1) IS–LM (1) Indices (1) Infinite (1) Investment (1) KCSE (1) KJSE (1) Kapital Inteligence (1) Kenya education (1) Latex (1) Law (1) Limit (1) Logic (1) MBTI (1) Market Analysis. (1) Market pulse (1) Mathematical insights (1) Moby dick; ot The Whale (1) Montecarlo simulation (1) Motorcycle Taxi Rides (1) Mural (1) Nature Shape (1) Observed paterns (1) Olympiad (1) Open PS2 Loader (1) Outta Pharaoh hand (1) Physics (1) Predictions (1) Programing (1) Proof (1) Python Code (1) Quiz (1) Quotation (1) R programming (1) RAG (1) RL (1) Remove Duplicate Rows (1) Remove Rows with Missing Values (1) Replace Missing Values with Another Value (1) Risk Management (1) Safety (1) Science (1) Scientific method (1) Semantics (1) Statistical Modelling (1) Stochastic (1) Stock Markets (1) Stock price dynamics (1) Stock-Price (1) Stocks (1) Survey (1) Sustainable Agriculture (1) Symbols (1) Syntax (1) Taroch Coalition (1) The Nature of Mathematics (1) The safe way of science (1) Travel (1) Troubleshoting (1) Tsavo National park (1) Volatility (1) World time (1) Youtube Videos (1) analysis (1) and Belbin Insights (1) competency-based curriculum (1) conformal maps. (1) decisions (1) over-the-counter (OTC) markets (1) pedagogy (1) pi (1) power series (1) residues (1) stock exchange (1) uplifted (1)

Followers