【问题标题】:finite difference for Black Scholes equation not accurateBlack Scholes 方程的有限差分不准确
【发布时间】:2016-04-09 02:03:33
【问题描述】:

我将 Blacks Scholes 方程转换为 Heat 方程。我尝试使用显式有限差分法来求解这个 PDE 并获得看涨期权的价格。我还通过“分析”使用布莱克 schols 方程来解决这个问题。

问题是我无法得到更准确的数值结果。这是我的 Python 代码。

这是我的算法的注释: https://drive.google.com/file/d/0B5h3oewtgjFgdVFpNFJRNTB5LXM/view?usp=sharing

import math
import numpy as np
from scipy.stats import norm

s0 = 15
sigma = 0.2
r = 0.01
t = 1
Xmax = 10

'''B-S price''' 

def C(s,k,t):
    d1 = (math.log(s/k)+(r+sigma*sigma/2)*t)/(sigma*math.sqrt(t))
    d2 = (math.log(s/k)+(r-sigma*sigma/2)*t)/(sigma*math.sqrt(t))
    return s*norm.cdf(d1)-math.exp(-r*t)*k*norm.cdf(d2)  

print('B-S',  C(s0,10,t))

'''Explicit_finite_difference'''

EFD_n_x = 500
EFD_n_t = 100
EFD_k = Xmax/EFD_n_x
EFD_h = t/EFD_n_t
EFD_xx = np.linspace(Xmax,-Xmax, 2 * EFD_n_x + 1)
EFD_xx = EFD_xx[1:2 * EFD_n_x]

def EFD_T0_Bound(x):
    return max(math.exp(x)-10*math.exp(-r*t),0) 
def EFD_U_Bound(tao):
    return math.exp(Xmax)-10*math.exp(-r*(t-tao))
def EFD_L_Bound(tao):
    return 0
EFD_T0bound = np.vectorize(EFD_T0_Bound)
EFD_lambda = EFD_h*sigma*sigma/2/EFD_k/EFD_k

EFD_A = (np.eye(2 * EFD_n_x - 1) * (1-2*EFD_lambda)
        + np.eye(2 * EFD_n_x - 1, k=1)*EFD_lambda
        + np.eye(2 * EFD_n_x - 1, k=-1)*EFD_lambda)

EFD_Y = np.zeros(2 * EFD_n_x - 1)
EFD_U = EFD_T0bound(EFD_xx)

for i in range(EFD_n_t):
    EFD_Y[0] = EFD_lambda*EFD_U_Bound(EFD_h*i)
    EFD_Y[2 * EFD_n_x - 2] = EFD_lambda*EFD_L_Bound(EFD_h*i)
    EFD_U = np.dot(EFD_A,EFD_U) + EFD_Y       #U_t_i+1 = A * U_t_i + Y

print('Explicit_finite_difference',EFD_U[EFD_n_x - 1 - round(math.log(s0)/EFD_k)])

【问题讨论】:

  • 您了解为什么目前您的准确性受到限制吗?
  • 我不知道。我尝试调整网格中的点数,但并没有提高准确性。
  • 我也不清楚为什么,没有单步执行代码并观察变量逐行变化,这可能是您获得所需理解的最简单方法
  • 我相信我的代码是正确的。我猜这可能与数值偏微分方程的误差分析有关

标签: python numerical-methods financial pde


【解决方案1】:

在我看来,由于您使用的是显式方案(不是无条件稳定的),因此您不能单独设置资产步长的 nb 和时间步长的 nb。通常人们将它们与波动性联系在一起以保持方案稳定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2022-07-05
    • 1970-01-01
    • 2020-11-10
    • 2022-01-24
    相关资源
    最近更新 更多