Advanced
startup_valuation.advanced
¶
Advanced valuation techniques: Black-Scholes, Binomial, Monte Carlo, Scenario Analysis.
Chapter 4: Advanced Techniques
Classes¶
Functions¶
black_scholes(underlying, strike, risk_free_rate, volatility, time_to_maturity)
¶
Calculate call option value using Black-Scholes model.
Formula: C = N(d₁)S - N(d₂)Ke^(-rT) where: d₁ = [ln(S/K) + (r + σ²/2)T] / [σ√T] d₂ = d₁ - σ√T
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
underlying
|
float
|
Current price of underlying asset (S). |
required |
strike
|
float
|
Strike price (K). |
required |
risk_free_rate
|
float
|
Risk-free rate (r). |
required |
volatility
|
float
|
Volatility of underlying (σ). |
required |
time_to_maturity
|
float
|
Time to maturity in years (T). |
required |
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with call option value. |
Example
result = black_scholes(20_000_000, 5_000_000, 0.05, 0.40, 1.0) round(result.value / 1_000_000, 2) 15.24
Source code in src/startup_valuation/advanced.py
binomial_tree(underlying, strike, risk_free_rate, volatility, time_to_maturity, steps=3)
¶
Value an option using a binomial tree model.
Formulas
u = e^(σ√Δt) d = e^(-σ√Δt) p = (e^(rΔt) - d) / (u - d)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
underlying
|
float
|
Current price of underlying asset. |
required |
strike
|
float
|
Strike price. |
required |
risk_free_rate
|
float
|
Risk-free rate. |
required |
volatility
|
float
|
Volatility. |
required |
time_to_maturity
|
float
|
Time to maturity in years. |
required |
steps
|
int
|
Number of time steps. |
3
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with option value. |
Source code in src/startup_valuation/advanced.py
monte_carlo_valuation(market_size_dist, market_share_dist, margin_dist, exit_multiple, discount_rate, years, num_simulations=10000, seed=None)
¶
Monte Carlo simulation for startup valuation.
Formula: PV = (Market Size × Market Share × Margin × Multiple) / (1 + r)^n
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
market_size_dist
|
Distribution
|
Distribution for market size. |
required |
market_share_dist
|
Distribution
|
Distribution for market share. |
required |
margin_dist
|
Distribution
|
Distribution for profit margin. |
required |
exit_multiple
|
float
|
Exit multiple. |
required |
discount_rate
|
float
|
Discount rate. |
required |
years
|
float
|
Years to exit. |
required |
num_simulations
|
int
|
Number of simulations. |
10000
|
seed
|
int | None
|
Random seed for reproducibility. |
None
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with mean, percentiles, and full distribution. |
Source code in src/startup_valuation/advanced.py
scenario_analysis(scenarios)
¶
Calculate expected value across scenarios.
Formula: E[V] = Σ pᵢ × Vᵢ
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scenarios
|
list[Scenario]
|
List of scenarios with name, probability, and value. |
required |
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with expected value. |
Example
scenarios = [ ... Scenario("bull", 0.20, 10_000_000), ... Scenario("base", 0.60, 5_000_000), ... Scenario("bear", 0.20, 1_000_000), ... ] result = scenario_analysis(scenarios) result.value 5200000.0
Source code in src/startup_valuation/advanced.py
ltv_cac_valuation(ltv_dist, cac_dist, market_size_dist, num_simulations=10000, seed=None)
¶
Valuation using LTV/CAC ratio with Monte Carlo.
Formula: Valuation = (LTV/CAC) × Market Size × 0.1
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ltv_dist
|
Distribution
|
Distribution for LTV. |
required |
cac_dist
|
Distribution
|
Distribution for CAC. |
required |
market_size_dist
|
Distribution
|
Distribution for market size. |
required |
num_simulations
|
int
|
Number of simulations. |
10000
|
seed
|
int | None
|
Random seed. |
None
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with mean valuation. |
Source code in src/startup_valuation/advanced.py
binomial_valuation(underlying, strike, risk_free_rate, volatility, time_to_maturity, steps=50)
¶
Value a startup option using binomial tree with high resolution.
Formula: Same as binomial_tree with steps=50 for convergence to Black-Scholes.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
underlying
|
float
|
Current value of startup. |
required |
strike
|
float
|
Liquidation preference or strike price. |
required |
risk_free_rate
|
float
|
Risk-free rate. |
required |
volatility
|
float
|
Volatility of startup value. |
required |
time_to_maturity
|
float
|
Time to exit in years. |
required |
steps
|
int
|
Number of time steps (default 50 for convergence). |
50
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with option value. |
Example
result = binomial_valuation(20_000_000, 5_000_000, 0.05, 0.40, 1.0, 50) round(result.value / 1_000_000, 2) 15.24