【问题标题】:TypeError: can only concatenate tuple (not "float") to tupleTypeError:只能将元组(不是“浮动”)连接到元组
【发布时间】:2013-08-28 11:42:20
【问题描述】:

我是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

你能告诉我这是为什么吗?如何解决? 非常感谢。

【问题讨论】:

  • 把你的price放在括号里,我很确定这是你的问题
  • 谢谢,我试过了,还是不行,同样的错误。
  • value = newton(bsprice2, 0.5, args=(price, ))
  • 你试过让 args 成为一个元组吗?
  • args =(price,) 我刚刚发现,如果我这样更正它,它可以工作!

标签: python tuples typeerror newtons-method


【解决方案1】:

Newton-Raphson 方法不是计算隐含波动率的好方法,因为导数(“vega”)在某些点可能太小,这使得该方法只能寻找解决方案。

使用二等分法,从 0 开始,并带有一些对于您的特定应用程序/目标市场而言高得离谱的波动率。如果您愿意,您可以使用 1000%/年,如果您的典型波动率为 25%/年,那么找到解决方案只会慢一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多