一、目前国际上主流的期权定价模型主要有:
- BSM定价模型
- BAW定价模型
- CRR定价模型
- 二叉树模型
二、模型适用,需要说明的是:
1、可以直接用BS模型计算欧式期权的理论价格。
2、BS模型对欧式期权定价有较好的支持,但美式期权由于可以随时执行,影响模型对时间和价格的参数设置,因此对美式期权定价存在困难。
3、BAW定价模型,对美式期权价格进行了近似解析方法求解。该模型,多用于美式期权定价。
4、CRR模型也可以对美式期权进行定价。
5、二叉树模型对美式期权和欧式期权定价都具有较好的支持,但是为了达到一定的精度,必须有大量的模拟运算,对系统要求较高。
三、欧式期权定价的python实现
#期权定价与希腊字母
import numpy as np
from math import sqrt, log
from scipy import stats
# 欧式期权BSM定价公式
#欧式期权的看涨期权价格及各种希腊值
"""
Parameters:
==========
S0: float
标的物初始价格水平
K: float
行权价格
T: float
到期日
r: float
固定无风险短期利率
sigma: float
波动因子
==========
"""
def d(S0, K, T, r, sigma):
S0 = float(S0)
d1 = (np.log(S0 /K) + (r + 0.5 * sigma**2) * T )/(sigma * np.sqrt(T))
d2 = (np.log(S0 /K) + (r - 0.5 * sigma**2) * T )/(sigma * np.sqrt(T))
return (d1,d2)
def N(d):
value = stats.norm.cdf(d, 0, 1)
return value
#看涨期权价格
def bsm_call_value(S0, K, T, r, sigma):
S0 = float(S0)
d1 = d(S0, K, T, r, sigma)[0]
d2 = d(S0, K, T, r, sigma)[1]
value = S0 * N(d1) - K * np.exp(-r * T) * N(d2)
return value
def bsm_call_value_div(S0, K, T, r, sigma, div):
S0 = float(S0)
S0 = S0 - div * np.exp(-r * T)
d1 = d(S0, K, T, r, sigma)[0]
d2 = d(S0, K, T, r, sigma)[1]
value = S0 * N(d1) - K * np.exp(-r * T) * N(d2)
return value
#看跌期权价格
def bsm_put_value(S0, K, T, r, sigma):
S0 = float(S0)
d1 = d(S0, K, T, r, sigma)[0]
d2 = d(S0, K, T, r, sigma)[1]
value = bsm_call_value(S0, K, T, r, sigma) - S0 + K * np.exp(-r * T)
return value
def bsm_delta (S0, K, T, r, sigma, n):
"""
delta 计算
认购期权的n为1
认沽期权的n为-1
"""
d1 = d(S0, K, T, r, sigma)[0]
delta = n * N(n * d1)
return delta
def bsm_gamma(S0, K, T, r, sigma):
"""
gamma 计算
"""
S0 = float(S0)
d1 = d(S0, K, T, r, sigma)[0]
gamma = N(d1)/(S0*sigma*np.sqrt(T))
return gamma
def bsm_vega(S0, K, T, r, sigma):
"""
vega 计算
"""
S0 = float(S0)
d1 = d(S0, K, T, r, sigma)[0]
vega = S0 * N(d1) * np.sqrt(T)
return vega
def bsm_theta(S0, K, T, r, sigma):
"""
theta 计算
"""
d1 = d(S0, K, T, r, sigma)[0]
d2 = d(S0, K, T, r, sigma)[1]
theta = -(St * dN(d1) * sigma / (2 * np.sqrt(T))
+ r * K * np.exp(-r * T) * N(d2))
return theta
def bsm_rho(S0, K, T, r, sigma):
"""
rho 计算
"""
d1 = d(S0, K, T, r, sigma)[0]
d2 = d(S0, K, T, r, sigma)[1]
rho = K * T * np.exp(-r * T ) * N(d2)
return rho
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
四、美式期权的python实现
1、熟悉那几个希腊字母。
2、用Python 写一下,欧式期权、美式期权和二元期权数据模型验证的结果。
3、欧式期权的定价
(1)BS模型公式计算。比较简单,直接用Python 编程,按照公式计算即可实现。
(2)蒙特卡洛模拟计算:Python 版本和Python 向量化版本
最后,还可以进一步计算各种希腊字母。
4、国内市场,豆粕、白糖、玉米、棉花、橡胶的商品期权都是美式期权。