業務でC#を用いることになったので、最近勉強していなくて朧気になってきた知識をReviseする意味でも、以下の書籍を読みながらC#で実装してみる。今日はページが少し離れてP.33の演習1.8。
2. グリークス(続き)
オプションは、理論価格があるために、入力パラメータが明示的にわかっている。あらためて挙げるとこのとおり:
このため、この5つの変化がオプション価格に影響を与える。そこでリスク(価格変化)を管理するには、それらが変化したときにオプション価格がどの程度動くかを評価する。各パラメータに対する価格変化の指標をまとめてグリークス(Greeks)という。
なお行使価格は契約で決まっている(定数である)ため、リスク管理には用いない。
2.4 ロー
リスクフリーレートの変化に対するオプション価格の変化をローという。
プット・オプションのローは、プット・コール・パリティを用いれば*1
と同値である。
さらに展開してみよう。
である。ここに
および
を代入することで
さらに
を代入することで
を得る。
プット・オプションの場合、
まとめよう:
- コール・オプションのロー
- プット・オプションのロー
2.5 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> /// <param name="CallPutFlg">コール・プットを表すフラグ。0ならばコール・オプション、1ならばプット・オプションの価格を返す。</param> /// <returns>ヨーロピアン・コール・オプションまたはプット・オプションのローを返す。</returns> public static double Rho(double S, double K, double r, double sigma, double T, int CallPutFlg) { double d = Math.Log(S / K) + (r + 0.5 * Math.Pow(sigma, 2.0)) * T; d /= (sigma * Math.Sqrt(T)); double sign = -2.0 * CallPutFlg + 1.0; double Rho = sign * K * T * Math.Exp(- r * T) * MathNet.Numerics.Distributions.Normal.CDF(0.0, 1.0, sign * (d - sigma * Math.Sqrt(T))); return Rho; } /// <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 RhoByNumericalDifferential(double S, double K, double r, double sigma, double T, int CallPutFlg) { double Bin = 0.00001; double sign = -2.0 * CallPutFlg + 1.0; double rho = OptionPricing(S, K, r + Bin, sigma, T, CallPutFlg); rho -= OptionPricing(S, K, r - Bin, sigma, T, CallPutFlg); rho /= (2.0 * Bin); return rho; }