"A Deep Dive into the Basics of Real Options Analysis -Part 2 - Valuation of Real Options through Black-Scholes Option Pricing Model (excel /python(
Vaidyanathan Ravichandran
Professor of Practice (Finance) - Business Schools , Bangalore
Refer Earlier article : "A Deep Dive into the Basics of Real Options Analysis - Key Concepts for Strategic Decision-Making" - Part1 https://www.dhirubhai.net/feed/update/urn:li:activity:7278957287656857600/
Valuation of Real Options through Adjusted Black-Scholes Option Pricing Model
The Black-Scholes model, originally developed for financial options, can be adapted to value real options by mapping its parameters to real-world business variables:
The fundamental Black-Scholes formula for a call option becomes:
C = S N(d1) - K × e^(-rt) * N(d2)
Where: d1 = [ln(S/K) + (r + σ2/2)*t] / (σ*√t) ; d2 = d1 - σ*√t
Advantages of Using Black-Scholes for Real Options
Challenges and Limitations
Despite its utility, applying Black-Scholes to real options presents several challenges:
Implementation Framework
To effectively implement real options valuation using Black-Scholes:
Applications Across Industries
Real options valuation using Black-Scholes has proven particularly valuable in:
Best Practices for Implementation
Evaluating Expansion Opportunities with Black-Scholes Option Pricing Model (through Excel)
Background: A manufacturing firm is exploring the construction of a new factory to enhance its production capabilities. The factory comes with significant upfront costs but offers the potential for future expansion based on market success. The management team is tasked with determining whether the factory project is financially viable, factoring in both the initial investment and the optionality of future expansion.
Scenario Details: The proposed factory requires an upfront investment of $300,000. Once operational, the factory is expected to generate $35,000 in annual cash flows for the next 20 years, with the first cash flow starting one year from today.
If the product proves successful within the first three years, the firm can opt to expand the facility at an additional cost of $150,000. The expansion is projected to produce $15,000 in annual cash flows for 17 years, with the first cash flow materializing four years from today (i.e., one year after the expansion decision is made).
Financial Inputs:(Assumptions)
Key Question: To make an informed decision, the firm seeks to quantify the value of the expansion option embedded in the project using the Black-Scholes Option Pricing Model (BSOPM). The team must evaluate whether the factory should be built, factoring in the potential value of expansion.
Considerations for Analysis:
Discussion Point:By valuing the optionality inherent in the project, the firm can determine whether the additional flexibility of expansion justifies the initial investment in the factory. Should the calculated value of the expansion option significantly enhance the overall project value, the factory project may present a compelling investment opportunity.
Evaluate Flexibility of Valuation of Expansion through Adjusted Black Schole Option Pricing Model
Evaluating Expansion Opportunities with Black-Scholes Option Pricing Model (through Python)
import numpy as np
from scipy.stats import norm
def black_scholes_call(S: float, K: float, T: float, r: float, sigma: float) -> float:
"""
Calculate call option value using Black-Scholes formula.
Parameters:
S (float): Present value of additional cash flows from expansion
K (float): Exercise price (future cost of expansion, not pre-discounted)
T (float): Time to expiration in years
r (float): Risk-free interest rate (as a decimal)
sigma (float): Volatility of underlying asset (as a decimal)
Returns:
float: Value of the call option.
"""
# Calculate d1 and d2
d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
# Calculate call option value
call_value = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
return call_value
def calculate_present_value(cash_flows: float, years: int, rate: float) -> float:
"""
Calculate the present value of an annuity.
Parameters:
cash_flows (float): Annual cash flow amount
years (int): Number of years for the annuity
rate (float): Discount rate (as a decimal)
Returns:
float: Present value of the annuity.
"""
pv = cash_flows * (1 - (1 + rate) ** -years) / rate
return pv
def evaluate_project_with_option():
# Inputs
cost_of_factory = 300_000 # Upfront cost of building the factory
annual_cash_flows = 35_000 # Annual cash inflows
project_years = 20 # Number of years of project life
rate_of_return = 0.10 # Expected rate of return (10%)
# Expansion inputs
expansion_cost = 150_000 # Additional investment for expansion (at T=3)
expansion_cash_flows = 15_000 # Cash inflows from expansion
expansion_years = 17 # Number of years of expansion cash flows
time_to_expansion = 3 # Time to expansion in years
volatility = 0.25 # Volatility (25%)
risk_free_rate = 0.042 # Risk-free rate for 3 years (4.2%)
# Static NPV calculation (without option)
pv_cash_flows = calculate_present_value(annual_cash_flows, project_years, rate_of_return)
static_npv = pv_cash_flows - cost_of_factory
# Present value of expansion cash flows at T=0
pv_expansion_cash_flows_t3 = calculate_present_value(expansion_cash_flows, expansion_years, rate_of_return)
pv_expansion_cash_flows_t0 = pv_expansion_cash_flows_t3 / (1 + rate_of_return) ** time_to_expansion
# Option value calculation using BSOPM
option_value = black_scholes_call(
S=pv_expansion_cash_flows_t0,
K=expansion_cost, # Pass K as it is; discounting is handled inside BSOPM
T=time_to_expansion,
r=risk_free_rate,
sigma=volatility
)
# Expanded NPV calculation
expanded_npv = static_npv + option_value
# Results
results = {
"PV of Cash Flows (t=0)": pv_cash_flows,
"Static NPV (without option)": static_npv,
"PV of Expansion Cash Flows (t=3)": pv_expansion_cash_flows_t3,
"PV of Expansion Cash Flows (t=0)": pv_expansion_cash_flows_t0,
"Real Option Value": option_value,
"Expanded NPV": expanded_npv
}
return results
# Run the evaluation
results = evaluate_project_with_option()
# Print results
print("\nReal Options Analysis - Expansion Option")
print("=" * 50)
for key, value in results.items():
print(f"{key}: ?{value:,.2f}")
# Decision recommendation
print("\nDecision Analysis:")
if results["Expanded NPV"] > 0:
if results["Static NPV (without option)"] < 0:
print("PROCEED WITH CAUTION: While the static NPV is negative, "
"the expansion option adds sufficient value to make the project viable.")
else:
print("PROCEED: Both static NPV and expanded NPV are positive. "
"The expansion option adds significant value.")
else:
print("DO NOT PROCEED: Even with the expansion option, "
"the project does not generate sufficient value to justify the investment.")
Output from the Above Code :
Real Options Analysis - Expansion Option ================================================== PV of Cash Flows (t=0): ?297,974.73 Static NPV (without option): ?-2,025.27 PV of Expansion Cash Flows (t=3): ?120,323.30 PV of Expansion Cash Flows (t=0): ?90,400.68 Real Option Value: ?4,875.61 Expanded NPV: ?2,850.34
Decision Analysis: PROCEED WITH CAUTION: While the static NPV is negative, the expansion option adds sufficient value to make the project viable.
Evaluating Abandonment Option with Black-Scholes Option Pricing Model (through Excel)
Case Study: Evaluating Real Options for a Strategic Project
Scenario
A company is evaluating a new investment project that requires an initial outlay of $120,000. The project is expected to generate annual cash flows of $15,000 for 10 years, starting one year from today. The firm requires a 12% annual return on this project, and the standard deviation of returns is 40% over the next 2 years and 30% over its 10-year life. If the project fails to meet expectations, the facility can be sold for $60,000 at any point within the next 2 years.
领英推荐
Treasury Strip Yields
The annual yields on Treasury strips are:
Objective
Using real options analysis, determine whether the firm should undertake the project, considering the potential to abandon the project within the first 2 years.
Analysis Steps
Evaluating Abandonment Option with Black-Scholes Option Pricing Model (through Python)
import math
from scipy.stats import norm
def calculate_npv(initial_cost, annual_cash_flow, years, required_return):
"""Calculate the basic NPV of the project"""
npv = -initial_cost
for t in range(1, years + 1):
npv += annual_cash_flow / (1 + required_return) ** t
return npv
def black_scholes_put(S, K, T, r, sigma):
"""Calculate put option value using Black-Scholes model"""
d1 = (math.log(S/K) + (r + sigma**2/2) * T) / (sigma * math.sqrt(T))
d2 = d1 - sigma * math.sqrt(T)
put_value = K * math.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)
return put_value
# Project parameters
initial_cost = 120000
annual_cash_flow = 15000
years = 10
required_return = 0.12
salvage_value = 60000
early_sigma = 0.40 # Volatility for first 3 years
option_years = 2
rf_3year = 0.04 # 2-year risk-free rate
# Calculate basic NPV
basic_npv = calculate_npv(initial_cost, annual_cash_flow, years, required_return)
# Calculate present value of expected cash flows
pv_cash_flows = sum([annual_cash_flow / (1 + required_return) ** t for t in range(1, years + 1)])
# Calculate abandonment option value using Black-Scholes put option formula
put_option_value = black_scholes_put(
S=pv_cash_flows, # Present value of expected cash flows
K=salvage_value, # Strike price (salvage value)
T=option_years, # Time to expiration (2 years)
r=rf_3year, # Risk-free rate
sigma=early_sigma # Volatility
)
# Calculate strategic NPV (basic NPV + option value)
strategic_npv = basic_npv + put_option_value
# Print results
results = f"""
Real Options Analysis Results:
-----------------------------
Basic NPV: ${basic_npv:,.2f}
Abandonment Option Value: ${put_option_value:,.2f}
Strategic NPV: ${strategic_npv:,.2f}
"""
print(results)
Real Options Analysis Results: -----------------------------
Basic NPV: $-35,246.65
Abandonment Option Value: $4,950.49
Strategic NPV: $-30,296.16
Limitations of Black-Scholes for Real Options
The application of Black-Scholes to real options valuation represents a significant advancement in strategic investment analysis. While the approach presents certain challenges, its ability to quantify managerial flexibility and strategic options makes it an invaluable tool for modern business decision-making. Success in implementation requires careful attention to parameter estimation, recognition of model limitations, and integration with broader strategic analysis frameworks.
The continued evolution of real options valuation techniques, including adaptations of the Black-Scholes model, promises to further enhance our ability to make informed strategic investment decisions in an increasingly complex business environment.
2. No Definitive Expiration Date for the Option
Impact: A lack of definitive expiration invalidates the finite-time framework of BSOPM.
3. Both Asset Value and Strike Price Behave Stochastically
Impact: BSOPM cannot handle stochastic strike prices, leading to inaccurate valuations.
4. Returns Are Not Normally Distributed
Impact: BSOPM's reliance on normal distribution fails to capture these non-standard behaviors.
5. The Random Walk of Real Assets is Not Symmetric; There Are Jumps
Impact: Jump diffusion or other advanced stochastic processes would better capture these dynamics than BSOPM.
Alternative Methods
Given these limitations, alternative models are often used for valuing real options:
Conclusion
While the Black-Scholes model provides a foundational approach to valuing options, it falls short when applied to real options due to its rigid assumptions. Adopting more flexible and realistic models is essential for accurate valuation in real-world scenarios. Let me know if you'd like further insights or alternative model explanations
Part 1 : Refer
"A Deep Dive into the Basics of Real Options Analysis - Key Concepts for Strategic Decision-Making" - Part1 https://www.dhirubhai.net/feed/update/urn:li:activity:7278957287656857600/
Part 3:
Continued Part 3 : Valuation of Real Options - using Binomial Option Pricing Model approach