3

私はPythonを初めて使用するので、質問は簡単かもしれませんが、しばらくお待ちください:

ニュートンラフソン法を呼び出して、コール/プットオプションの価格設定のブラックショールズ式のインプライドボラティリティを計算しようとしていたので、最初に、scipy.optimize のニュートン法は関数のゼロを計算するようですが、Black- Scholes 式では、関数の値をゼロではなくオプション価格にしたいと考えています。(私はここでプログラミングについては初めてなので、いくつかのテクニックについてはわかりません。)次のようなことを行う別の関数を作成する必要があります。

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

次に、newton メソッドを呼び出すときに、args=() を関数の 1 つのパラメーターとして取ります。次のように記述します。

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

その理由を教えてください。修正方法は?とても有難い。

4

1 に答える 1

-1

ニュートン・ラフソン法はインプライド ボラティリティの計算には適していません。導関数 (「ベガ」) が特定のポイントで小さすぎる可能性があるため、この方法では解が見つからないことがあります。

0 から開始し、特定のアプリケーション/ターゲット市場にとって途方もなく高いボラティリティを使用して、二分法を使用します。必要に応じて 1000%/年を使用することもできますが、通常のボラティリティが 25%/年である場合、解を見つけるのが少し遅くなります。

于 2014-02-05T23:04:30.980 に答える