python - Python中的障碍期权定价
问题描述
我们有一个欧式障碍看涨期权,具有执行价格 K>0
和障碍价值
0 < b< S0
,
哪里S_0
是起始价格。根据合同, 0<t_1<...<t_k<T
必须检查价格S(t_k)>b
的次数k
。
假设S(t)
用u=1.1
和 d = 0.9
、r=0.05
、T=10
和的二项式期权模型来描述,t_1=2,t_2=4
以及t-3=7
必须检查资产的次数。还要考虑S_0=100,K=125
和 障碍b=60
。
我的尝试如下:
# Initialise parameters
S0 = 100 # initial stock price
K = 125 # strike price
T = 10 # time to maturity in years
b = 60 # up-and-out barrier price/value
r = 0.05 # annual risk-free rate
N = 4 # number of time steps
u = 1.1 # up-factor in binomial models
d = 0.9 # ensure recombining tree
opttype = 'C' # Option Type 'C' or 'P'
def barrier_binomial(K,T,S0,b,r,N,u,d,opttype='C'):
#precompute values
dt = T/N
q = (1+r - d)/(u-d)
disc = np.exp(-r*dt)
# initialise asset prices at maturity
S = S0 * d**(np.arange(N,-1,-1)) * u**(np.arange(0,N+1,1))
# option payoff
if opttype == 'C':
C = np.maximum( S - K, 0 )
else:
C = np.maximum( K - S, 0 )
# check terminal condition payoff
C[S >= b] = 0
# backward recursion through the tree
for i in np.arange(N-1,-1,-1):
S = S0 * d**(np.arange(i,-1,-1)) * u**(np.arange(0,i+1,1))
C[:i+1] = disc * ( q * C[1:i+2] + (1-q) * C[0:i+1] )
C = C[:-1]
C[S >= H] = 0
return C[0]
barrier_binomial(K,T,S0,b,r,N,u,d,opttype='C')
我什么也没收到,因为出了点问题,我不知道是什么
但这是模拟吗?
有人帮忙吗?
解决方案
在您使用的循环中C[S >= H] = 0
,但您的障碍参数定义为b
. 此外,您C
仅用 0 填充数组,因此请检查支付条件。一般来说,我发现在使用树模型时循环矩阵要容易得多。
推荐阅读
- c# - 如何使用 mongodb c# 驱动程序按存储为字符串的 TimeSpan 字段进行过滤?
- python - 如何简单地为 numpy 直方图设置替代不等式条件?
- node.js - 通过NodeJS将文件加载到facebook messenger的问题
- r - 带闪亮的在线按钮
- c# - SQL SERVER Compact 4.0 中的加密/哈希密码表
- c# - 为什么我的项目没有从 Visual Studio 上传到 github?
- python - 烧瓶复选框和文本框问题
- python - 如何在 Seaborn catplot 中指定自定义误差线?
- android - 我是否安全地注入了上下文?匕首,Android Studio 警告
- xml - Odoo 10:安全访问自定义模块