Black-Scholesフォーミュラで短いオプションの値を計算する方法は?
-
28-09-2019 - |
質問
私は将来のさまざまな時期に短い電話の利益/損失を計算しようとしていますが、それは正しくありません。有効期限と比較して、残りの時間があるものは行使価格を上回る利益が少なくなりますが、ストライキ以下のある時点では、t = 0行ほど速く価値を失いません。以下は擬似コードの式ですが、何が間違っているのですか?
profit(stockprice) = -1 * (black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration) - premium);
実際のMATLABコード:
function [ x ] = sell_call( current,strike,price,days)
if (days > 0)
Sigma = .25;
Rates = 0.05;
Settle = today;
Maturity = today + days;
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, 'EndDates',...
Maturity, 'Rates', Rates, 'Compounding', -1);
StockSpec = stockspec(Sigma, current);
x = -1 * (optstockbybls(RateSpec, StockSpec, Settle, Maturity, 'call', strike) - price);
else
x = min(price,strike-current-price);
end
終わり
ありがとう、CP
解決 2
私は問題を発見しました、それはRatePec引数に関係していました。金利を渡すと、オプションの価格設定に影響します。
他のヒント
あなたの式は正しくありません。私がそれを配布するとき、「フォーミュラ」が単純なものであるため、なぜあなたがそのリーディング-1が乗数として必要な理由を知りません。
profit(stockprice) = premium - black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration);
ものすごく単純。つまり、問題はコールの価格でその機能に埋もれているということですよね?
あなたの式をウィキペディアの定義と見なしているものと比較すると、通信はまったく見られません。あなたのMATLABコードも役に立ちません。関数を掘り下げて、どこで間違ったかを確認してください。
あなたはそれらを書きましたか?このより大きな関数に組み立てる前に、どのようにテストしましたか。より大きなものに組み立てる前に、小さなブロックをテストします。
どのベースラインに対してテストしていますか?計算をどのような既知の状況と比較していますか?利用可能なBS計算機がたくさんあります。たぶんあなたはそれらのいずれかを使用することができます。
Matlabではなく、コードのエラーだと思います。または、あなたが通過したパラメーターの意味を誤解しました。あなたのものをもっと注意深く見て、その機能のドキュメントを読み直し、ベースラインのケースの良いセットを取得します。