2

私はしばらくの間、これに悩まされてきました:

解決する前に 5 つの変数に依存する関数があります (Black-Scholes)。BS のこの 1 つのインスタンスの価格を解決した後、さまざまな入力 (時間など) の範囲を作成し、それらを対応する出力 (他のすべての変数が一定に保たれた解) に対してプロットしたいと思います。

うまくいけば、私は次のようなものをプロットするでしょう

class BS

    def __init__(self, args)
        self.a = float(args[0])
        self.b = float(args[1])
        self.c = float(args[2])
        self.d = float(args[3])
        self.e = float(args[4])
    ...
    ...
    the math
    ...
    ...

これで、T または時間から価格を計算するメソッドを保持するクラスのインスタンスを作成できます。

def price(self)
   'math that only requires T'
    return price

したがって、BS.price() を実行するだけで、次のような出力が可能です。

t = range(T-200, T+200, 1)

prices = [BS.price() for x in t]
rhos = [BS.rho() for x in t]
vegas = [BS.vega() for x in t]
parities = [BS.parity() for x in t]


pylab.plot(prices,t)
pylab.plot(rhos,t)
pylab.plot(vegas,t)
pylab.plot(parities,t)

価格の唯一の変数が時間である場合。Pythonで単一変数の依存関係を観察するより良い方法はありますか? 私はRの方が好きですが、それは私次第ではありません。

ご協力いただきありがとうございます!

編集:時間変数が math.sqrt() や scipy.cdf() のような数学演算を受けているときにリスト内包表記を使用する方法がわかりません。これを行う方法はありますか?float である変数 t に依存する関数を作成する方法を知っています。値のリストを math.sqrt() または scipy.cdf() に入力するにはどうすればよいですか? 助けてくれてありがとう!

4

1 に答える 1

1

時間変数が math.sqrt() や scipy.cdf() などの数学演算を受けているときにリスト内包表記を使用する方法がわかりません。これを行う方法はありますか?float である変数 t に依存する関数を作成する方法を知っています。値のリストを math.sqrt() または scipy.cdf() に入力するにはどうすればよいですか?

考慮すべきいくつかのオプションがあります。

  • Python ジェネレーターを使用すると、コレクション/値のリストを反復処理するときに、その場で結果を生成できます。ここに非常に良い議論があります:
    http://wiki.python.org/moin/Generators

  • Python の map 関数と reduce 関数を使用すると、関数 (sqrt など) をリスト内の各要素に適用できます。reduce を使用すると、リストに対する操作の結果をそれぞれ 1 つの値に減らすことができます (2.1「リストのマッピング」を確認してください)。
    http://www.siafoo.net/article/52

于 2012-07-30T02:23:29.743 に答える