基于BSM的美式看跌期权偏微分方程的有限差分方法(隐格式)-python

本文详细介绍了如何运用Python和numpy库,采用隐式有限差分方法解决基于Black-Scholes-Merton(BSM)模型的美式看跌期权定价问题。
摘要由CSDN通过智能技术生成

注:美式看跌期权的求解

import pandas as pd
import numpy as np

T=5/12
n=10
Smax=100
m=20
dt=T/n
ds=Smax/m
r=0.1
sigma=0.4
k=50
q=0
a=lambda j:0.5*(r-q)*j*dt-1/2*sigma**2*j**2*dt
b=lambda j:1+sigma**2*j**2*dt+r*dt
c=lambda j:-0.5*(r-q)*j*dt-0.5*sigma**2*j**2*dt

#定义纵轴为股票价格向上递增 横轴为到期时间且向右递减
f=np.zeros((m+2,n+2))

#第0行为时间
for i in range(1,n+2):
    f[0,i]=T-(i-1)*dt

#第0列为股票价格
for j in range(1,m+2):
    f[j,0]=Smax-(j-1)*ds

#边界条件1:到期时间为0的期权价格等于max( k-sT,0)
for j in range(1,m+2):
    x=f[j,0]
    
    if k-x>=0:
        f[j,11]=k-x
    else:
        f[j,11]=0

#边界条件2:资产价格为0即 s=0时 美式看跌期权价格为k
for i in range(1,n+2):
    f[21,i]=k

#边界条件3:标的资产价格趋于无穷 期权价格趋于0
for i in range(1,n+2):
    f[1,i]=0

# #求解期权价格
xishu=np.zeros((m-1,m+1))
#i从0~m-2
j=m-1
jj=1
for i in range(m-1):
    
    a1=a(j)
    #print(a1)
    b1=b(j)
    c1=c(j)
    
    xishu[i,jj-1]=c1
    xishu[i,jj]=b1
    xishu[i,jj+1]=a1
    jj=jj+1
    j=j-1
xishu=np.matrix(xishu)
xishu1=xishu[:,1:(m)]
#系数的逆
xishu2=xishu1.I

#取到期期限为0的数列
qq_price0=f[2:m+1,n+1]


#从n+1(11)到2
for i in range(n+1,1,-1):
    qq_price0=f[2:m+1,i]

    qq_price0[0]=qq_price0[0]-c(m-1)*f[1,i-1]
    
    qq_price0[m-2]=qq_price0[m-2]-a(1)*f[m+1,i-1]
    f[m,i]=k-f[m,0]

    qq_price1=qq_price0.reshape(-1,1)
    
  
    #解出上一期的期权价格
    qq_price2=xishu2*qq_price1
  
    for j in range(2,m+1):
        f[j,i-1]=max(qq_price2[j-2],(k-f[j,0]))
    
g=pd.DataFrame(f)
g.columns=['股票价格','5个月','4.5个月','4个月','3.5个月','3个月','2.5个月','2个月','1.5个月','1个月','0.5个月','0个月']
g.set_index('股票价格',inplace=True)

h=g.tail(len(g)-1)
h
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值