R の「fOptions」パッケージの使用に問題があります。ビルトインの MonteCarloSimulator を標準のイノベーションとパス ジェネレーターと共に使用している間に、ペイオフ関数を変更してパリ オプションの価格を設定します。私の問題は、MCSimulation が Option を 0.2 だけ上回っていることです。
今私の質問は: 私が書いたコードは正しいですか? 次のことを行う必要があります(関数の一部であり、他のものは正しいです):
幾何学的なブラウン モシアンの指数から構築されるベクトル「パス」を取得するため、最初の行でこの「パス」を Underlying の値を含むベクトルに変更します。
基になる値がバリア H を下回る 1 を含む 0-1 ベクトルになるようにパスを変更します。
アセットがバリア H を下回っている連続したステップが k 個以上ある場合、パスを情報を含む True-False Vector に変更します。
この場合、ペイオフを 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 を実行して取得した行列は、ペイオフ関数に行ごとに挿入されるため、元の質問のコードの「パス」はベクトルです。