我正在尝试创建一个简单函数来解决给定股票值x0,某个执行价格K,无风险利率r,波动率和到期时间T的给定数组的看跌期权的值。在这里找到公式:

https://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model

我认为这是一个相对简单的实现功能,但是对于更大的股票价格,我似乎得到了错误的价值。这是我的代码:

def FinalTimeAnalyticalSolution(x0,K,r,vol,T):

   x0 = np.array(x0)
   N = len(x0) - 1
   t = 0.0

   U = np.empty(N+1)

   U[0] = K * math.exp(-r * (T - t))

   for i in range(1,N+1):

       d1 = (1.0/(vol*(math.sqrt(T - t)))) * (math.log(x0[i]/K) + (r - (vol**2)/2)*(T-t))
       d2 = d1 - vol * math.sqrt(T-t)

       U[i] = norm.cdf(-d2) * K * math.exp(-r * (T - t)) - norm.cdf(-d1) * x0[i]

return U


例如,

x = np.linspace(0,3,7)
U = FinalTimeAnalyticalSolution(x,2.0,0.04,0.2,2.0)
for i in range(len(x)):
    print x[i]
    print U[i]


给我结果

0.0, 1.84623269277

0.5, 1.34623275338

1.0, 0.847891622826

1.5, 0.404448071531

2.0, 0.139395618544

2.5, 0.0372942572641

3.0, 0.00832440115615


我一直在使用在线期权价值计算器进行测试,例如
http://www.danielsoper.com/fincalc/calc.aspx?id=38,我得到以下信息。

0.0, 1.834133,
0.5, 1.334133,
1.0, 0.836973,
1.5, 0.405401,
2.0, 0.15085,
2.5, 0.047112,
3.0, 0.013392,


如您所见,我的解决方案对于较小的x来说是相对正确的,但是随着它的增加,它们的距离越来越远。我真的不确定为什么。我觉得这是我的代码中的一个小错误,但是我已经停留了一天。

提前致谢
詹姆士

最佳答案

错误是d1公式中的单个符号:

... (r - (vol**2)/2) ...


它应该是

... (r + (vol**2)/2) ...

关于python - Black Scholes认沽期权,分析解决方案实现-Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32016313/

10-09 05:54