Black Scholes提出了选项,解析解决方案实现 - Python

时间:2015-08-14 18:12:21

标签: python options finance

我试图创建一个简单的函数来求解给定数组股票价值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来说是相对正确的,但随着它的增加它们越来越远。我真的不确定为什么。我觉得这是我的代码中的一个小错误,但我已经被困了一天了。

提前致谢 詹姆斯

1 个答案:

答案 0 :(得分:3)

错误是d1公式中的单一符号:而不是




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




它应该是




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