TypeError:只能将元组(不是“float”)连接到元组

时间:2013-08-26 04:02:50

标签: python tuples typeerror newtons-method

我是python的新手,所以问题可能很简单,无论如何,感谢您的耐心等待:

当我试图用newton-raphson方法来计算Black-Scholes公式中的看跌/看跌期权定价的隐含波动率时, 首先,scipy.optimize中的牛顿方法似乎计算函数的零,但在Black-Scholes公式中,我希望函数的值是期权价格,而不是零。 (我是关于编程的新手,所以我不确定一些技巧。)我应该编写另一个函数来执行以下操作:

def f(sigma, price):
    return bsformula(S0,K,r,T,q,sigma) - price

然后,在调用newton方法时,它将args =()作为函数中的一个参数,我这样写:

value = newton(bsprice2, 0.5, args=price)

但收到此错误消息:

File "BS.py", line 36, in bsimpvol
    value = newton(bsprice2, 0.5, args=float(price))
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/zeros.py", line 143, in newton
    q0 = func(*((p0,) + args))
TypeError: can only concatenate tuple (not "float") to tuple
你能告诉我为什么会这样吗?怎么解决? 非常感谢。

1 个答案:

答案 0 :(得分:-1)

Newton-Raphson方法计算隐含波动率并不是一个好方法,因为衍生物(“vega”)在某些点上可能太小,这使得该方法可以捕获并且永远找不到解决方案。

使用二分法,从0开始,某些波动率对于您的特定应用/目标市场而言非常高。如果您愿意,可以使用1000%/年,如果您的典型波动率为25%/年,则找到解决方案的速度会慢一些。