期权定价模型是一种数学模型,用于根据当前的基础资产价格、期权的行权价格、到期时间和基础资产价格波动率等多种因素,计算出期权的理论价值。常用的期权定价模型包括 Black-Scholes 模型、二叉树模型和蒙特卡罗模拟模型。
Black-Scholes 模型是最常用的期权定价模型之一,由 Fischer Black 和 Myron Scholes 在 1973 年开发。该模型假设基础资产价格遵循几何布朗运动,并且在期权有效期内不会支付任何股息。Black-Scholes 模型考虑了当前基础资产价格、期权行权价格、到期时间、无风险利率和基础资产价格波动率等因素。
import numpy as np
from scipy.stats import norm
def black_scholes(S, K, T, r, sigma, option='call'):
"""
计算欧式期权的 Black-Scholes 价格。
S: float, 基础资产当前价格
K: float, 期权行权价格
T: float, 期权到期时间(年)
r: float, 无风险利率
sigma: float, 基础资产价格波动率
option: str, 期权类型('call' 或 'put')
"""
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
if option == 'call':
price = S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
elif option == 'put':
price = K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)
else:
raise ValueError("Invalid option type. Must be 'call' or 'put'.")
return price
二叉树模型是另一种常用的期权定价模型,它使用基于格的方法来模拟基础资产的价格变化。相比 Black-Scholes 模型,二叉树模型更加灵活,可以处理具有提前行权功能和分红的资产。二叉树模型也考虑了当前基础资产价格、期权行权价格、到期时间、无风险利率和基础资产价格波动率等因素。
import numpy as np
def binomial_tree(S, K, T, r, sigma, N, option='call'):
"""
计算欧式期权的二叉树价格。
S: float, 基础资产当前价格
K: float, 期权行权价格
T: float, 期权到期时间(年)
r: float, 无风险利率
sigma: float, 基础资产价格波动率
N: int, 二叉树步数
option: str, 期权类型('call' 或 'put')
"""
dt = T / N
u = np.exp(sigma*np.sqrt(dt))
d = 1/u
p = (np.exp(r*dt) - d) / (u - d)
# 初始化二叉树
stock_tree = np.zeros((N+1, N+1))
option_tree = np.zeros((N+1, N+1))
for i in range(N+1):
for j in range(i+1):
stock_tree[j, i] = S * d**(i-j) * u**j
# 计算期权价值
if option == 'call':
option_tree[:, N] = np.maximum(stock_tree[:, N] - K, 0)
elif option == 'put':
option_tree[:, N] = np.maximum(K - stock_tree[:, N], 0)
else:
raise ValueError("Invalid option type. Must be 'call' or 'put'.")
# 向后逐步计算期权价值
for i in range(N-1, -1, -1):
for j in range(i+1):
option_tree[j, i] = np.exp(-r*dt) * (p*option_tree[j, i+1] + (1-p)*option_tree[j+1, i+1])
return option_tree[0, 0]
蒙特卡罗模拟模型是一种更为复杂的模型,它使用随机过程来模拟基础资产未来的价格变化。当基础资产价格难以用闭合形式的方程来模拟,或者存在提前行权或美式期权等复杂特征时,蒙特卡罗模拟模型通常会被使用。蒙特卡罗模拟模型也考虑了当前基础资产价格、期权行权价格、到期时间、无风险利率和基础资产价格波动率等因素。
import numpy as np
def monte_carlo(S, K, T, r, sigma, n_simulations, n_steps, option='call'):
"""
计算欧式期权的蒙特卡罗模拟价格。
S: float, 基础资产当前价格
K: float, 期权行权价格
T: float, 期权到期时间(年)
r: float, 无风险利率
sigma: float, 基础资产价格波动率
n_simulations: int, 模拟次数
n_steps: int, 模拟步数
option: str, 期权类型('call' 或 'put')
"""
dt = T / n_steps
# 模拟基础资产价格路径
stock_paths = np.zeros((n_simulations, n_steps+1))
stock_paths[:, 0] = S
for i in range(n_steps):
stock_paths[:, i+1] = stock_paths[:, i] * np.exp((r - 0.5*sigma**2)*dt + sigma*np.sqrt(dt)*np.random.normal(size=n_simulations))
# 计算期权价值
if option == 'call':
option_values = np.maximum(stock_paths[:, -1] - K, 0)
elif option == 'put':
option_values = np.maximum(K - stock_paths[:, -1], 0)
else:
raise ValueError("Invalid option type. Must be 'call' or 'put'.")
# 计算期权价格
discount_factor = np.exp(-r*T)
option_price = discount_factor * np.mean(option_values)
return option_price
总之,期权定价模型是一种数学模型,用于计算期权的理论价值。常用的模型包括 Black-Scholes 模型、二叉树模型和蒙特卡罗模拟模型。期权定价模型是投资者和交易者的重要工具,帮助他们确定期权的公平价格,并做出有根据的交易和对冲策略决策。