Location : Home > Languages > Perl > Package
Title : Math::Business::BlackScholes
Toolbox Logo

名称

 Math::Business::BlackScholes - ブラック=ショールズ式の計算


概要

use Math::Business::BlackScholes
  qw/call_price call_put_prices implied_volatility_call/;

my $volatility=implied_volatility_call(
  $current_market_price, $option_price_in, $strike_price_in,
  $remaining_term_in, $interest_rate, $fractional_yield
);

my $call=call_price(
  $current_market_price, $volatility, $strike_price,
  $remaining_term, $interest_rate, $fractional_yield
);

$volatility=Math::Business::BlackScholes::historical_volatility(
  \@closing_prices, 251
);

my $put=Math::Business::BlackScholes::put_price(
  $current_market_price, $volatility, $strike_price,
  $remaining_term, $interest_rate
); # $fractional_yield のデフォルト値は 0.0

my ($c, $p)=call_put_prices(
  $current_market_price, $volatility, $strike_price,
  $remaining_term, $interest_rate, $fractional_yield
);

説明

 ブラック=ショールズモデルに従うヨーロピアン・オプションの公正な市場価格を推定する。
 call_price() はコール・オプションの価格を返す。
 put_price() はプット・オプションの値を返す。
 call_put_prices() は1つめの要素がコール・オプションの価格で、2つめの要素が同じパラメータに対するプット・オプションの価格であるような2要素の配列を返す。同じ引数に対して call_price() 及び put_price() を連続して呼び出すことで効率的に計算することを期待している。
 これらのルーチンは同じパラメータの集合を受け入れる。

パラメータ値の決定

 $volatility と $fractional_yield は履歴データから推定される。$interest_rate は伝統的に現在の米国債の利子率(T-bill rate)に設定される。モデルでは、これらのパラメータがオプション権利行使可能な期間を通じて変化しないものと仮定している。

 $volatility (通常 sigma と表現される)はパーセントで表示される場合もあるが、これは比率ではないので注意する必要がある。$interest_rate 及び $fractional_yield についても同様である。

  $volatility を推計するには2つの方法がある。
 historical_volatility() は証券の、連続した、少なくとも 10 ( 100 以上であればなお望ましい) 日終値(時間の昇順または降順)の列を必要とする。日毎の利益率の対数に分散を乗じて第2引数で指定された年間取引日数(デフォルトでは250日)で割り、その平方根の年間換算値を返す。

 implied_volatility_call() は異なる権利行使価格や期間をもつ同一条件の証券のコールオプションの取引価格に基づき Newton-Raphson 法を用いて計算する。call_price() のように第2引数をコールオプション価格としてとり、ボラティリティを返す。デフォルトのオプション価格の許容範囲 1e-4 を $fractional_yield で上書きすることもできる。帰り値の第2要素は誤差の大きさの推定値である。第3要素は結果を得るのに必要であった繰り返し回数である。誤差の大きさはきわめて大きい場合がある。例外は $Math::Business::BlackScholes::max_iter (デフォルトでは100)回の繰り返し以内で収束した場合にプログラムが落ちた場合である。implied_volatility_put() でも同様である。

アメリカン・オプション

 ヨーロピアン・オプションが満期日にのみ権利行使されるのに対し、アメリカン・オプションは満期日までのいつでも権利行使することができる。アメリカン・オプションの価格は通常対応するヨーロピアン・オプションの価格と等しい。なぜならオプションの期待値はその本質的価値よりもたいていの場合大きいからである。しかしながら、配当(コールオプションの場合)や利子率(プットオプションの場合)が高ければ、また権利行使の時期と関係した税があればアメリカン・オプションは保有したほうが価値がある。

負の市場価値

 負の市場価格の証券とは「ショート」であることを意味する。ショートを買うということは証券を売ることに等しい。したがってショートでコールオプションを買うとはプットオプションを買うことに等しい。これはいくらか混乱を招くが、利用された場合にはほぼ間違いなく警告がでる。


確認

 負の期間に対するオプションを評価しようとする試みは croak() で行われる。それは無意味だからだ。不適当な値を通すと(例えば 負の利子率)は記述的な警告メッセージを発する。そのようなメッセージを防ぐためには以下のようにすればよい。

{
   local($SIG{__WARN__})=sub{};
   $value=call_price( ... );
}

注意事項


バグ


参考資料

 Math::CDF


著者

 Anders Johnson, <anders@ieee.org>


謝辞

 インプライド・ボラティリティ関数のデバッグ支援について Richard Solberg に感謝する。.

Toolbox Logo
Updated : 2007/04/16