0

R の「fOptions」パッケージの使用に問題があります。ビルトインの MonteCarloSimulator を標準のイノベーションとパス ジェネレーターと共に使用している間に、ペイオフ関数を変更してパリ オプションの価格を設定します。私の問題は、MCSimulation が Option を 0.2 だけ上回っていることです。

今私の質問は: 私が書いたコードは正しいですか? 次のことを行う必要があります(関数の一部であり、他のものは正しいです):

  1. 幾何学的なブラウン モシアンの指数から構築されるベクトル「パス」を取得するため、最初の行でこの「パス」を Underlying の値を含むベクトルに変更します。

  2. 基になる値がバリア H を下回る 1 を含む 0-1 ベクトルになるようにパスを変更します。

  3. アセットがバリア H を下回っている連続したステップが k 個以上ある場合、パスを情報を含む True-False Vector に変更します。

  4. この場合、ペイオフを 0 に設定します。

    path = S*exp(cumsum(path))
    path = (path <= H) + 0
    path = (rle(path)$values[which(rle(path)$lengths >= k)] == 1)
    
    if (sum(path) > 0) {payoff = 0}
    

オプション価格がノックアウトの確率を過小評価するため、小さな k = 0、1、2、... のコードは間違っているようです。

よろしくお願いします。

編集:パスは経由で生成されます

wienerPath = function(eps) {
path = (b-sigma*sigma/2)*delta.t + sigma*sqrt(delta.t)*eps
path
}

ここで、「eps」は、ソボルの低不一致数で満たされた行列です。wienerPath を実行して取得した行列は、ペイオフ関数に行ごとに挿入されるため、元の質問のコードの「パス」はベクトルです。

4

1 に答える 1

0

サンプル コードを詳しく調べずにタイトルの質問に答えるには、次のようにします。

foo<-sample(c(0,1),1000,replace=TRUE)
bar<-rle(bar)

bar$values[bar$lengths >=k]

その最後の行から「1」が出れば勝ちです。

于 2013-08-27T13:07:44.223 に答える