業務でC#を用いることになったので、最近勉強していなくて朧気になってきた知識をReviseする意味でも、以下の書籍を読みながらC#で実装してみる。今日はP.18。
2. グリークス(続き)
オプションは、理論価格があるために、入力パラメータが明示的にわかっている。あらためて挙げるとこのとおり:
このため、この5つの変化がオプション価格に影響を与える。そこでリスク(価格変化)を管理するには、それらが変化したときにオプション価格がどの程度動くかを評価する。各パラメータに対する価格変化の指標をまとめてグリークス(Greeks)という。
なお行使価格は契約で決まっている(定数である)ため、リスク管理には用いない。
2. 8 ベガ
ボラティリティの変化に対するオプション価格の変化をベガという。
プット・オプションのベガは、プット・コール・パリティを用いれば*1
と同値である。
さらに展開してみよう。
である。ここで
および
および
を代入することで
である。
プット・オプションの場合、
まとめよう:
- コール・オプションのベガ
- プット・オプションのベガ
2.9 C#での実装
前回と同様に、理論値および数値解それぞれのメソッドを実装した:
using System;
using MathNet.Numerics;
/// <summary>
/// ベガの理論値を返す。
/// </summary>
/// <param name="S">原資産価格</param>
/// <param name="K">行使価格</param>
/// <param name="r">リスクフリーレート</param>
/// <param name="sigma">原資産価格のボラティリティ</param>
/// <param name="T">満期までの期間</param>
/// <returns>ヨーロピアン・コール・オプションまたはプット・オプションのベガ。</returns>
public static double Vega(double S, double K, double r, double sigma, double T)
{
double d = Math.Log(S / K) + (r + 0.5 * Math.Pow(sigma, 2.0)) * T;
d /= (sigma * Math.Sqrt(T));
double Vega = S * Math.Sqrt(T) * MathNet.Numerics.Distributions.Normal.PDF(0.0,1.0,d);
return Vega;
}
/// <summary>
/// ベガの数値微分による値を返す。
/// </summary>
/// <param name="S">原資産価格</param>
/// <param name="K">行使価格</param>
/// <param name="r">リスクフリーレート</param>
/// <param name="sigma">原資産価格のボラティリティ</param>
/// <param name="T">満期までの期間</param>
/// <param name="CallPutFlg">コール・プットを表すフラグ。0ならばコール・オプション、1ならばプット・オプションの価格を返す。</param>
/// <returns>コール・オプションまたはプット・オプションのベガ。</returns>
public static double VegaByNumericalDifferential(double S, double K, double r, double sigma, double T, int CallPutFlg)
{
double Bin = 0.00001;
double sign = -2.0 * CallPutFlg + 1.0;
double vega = OptionPricing(S, K, r, sigma + Bin, T, CallPutFlg);
vega -= OptionPricing(S, K, r, sigma - Bin, T, CallPutFlg);
vega /= (2.0 * Bin);
return vega;
}
