(2026/10/19: 14-4節を追加)
第13回で紹介したFXフォワードを通貨オプションで構成すると、シンセティック(synthetic)フォワードという呼び方に変わる。シンセティック フォワードのPutオプションの行使価格をドル安側にずらせば、リスク リバーサルという商品が出来上がる。次回の記事で説明する、この2つの代表的な商品はFXオプションのコールとプットで構成される。
今回はFXオプションの基本となるコールとプットをQuantLibで記述するコードを確認する。TaRFのコードが最終的な目標のため、コールオプションのモンテカルロ法についても例示する。また FX市場では独特の名称と慣習があり、今回と次回の記事はそのあたりに不慣れな読者を意識している。
いつものように拙著「Pythonで学ぶ債券·金利デリバティブ」をテキストと呼ぶが、テキストで取り上げた事項は参照箇所を挙げるのみとし、説明は繰り返していない。
なお テキストでは債券オプションをBlackモデルで説明した。この記事のFXオプションはGarman Kohlhagenモデル(以下GKモデル)で説明するが、金利を確率変数としない場合 2つのモデルは同じ解を算出する (14-4節で説明)。BlackモデルはFXオプションでも多用され、テキストのBlackモデルを理解することは無駄にならない。
14-1. FXオプションのコーディング入門
図14-1は 10-2節の最後に登場したInvesting.comのFXオプションページで9月25日引けのスクショである。

$\qquad\qquad\quad$図14-1:満期3ヶ月FXオプション (2026-9-25 引けデータ)
左上 USD/JPY 157.28 がこの日の円スポットレートで、画面中央のStrike 156.19, Imp Vol. 9.02%と画面 右側の白いスクリーンのU.S.3M 4.175%を基に3ヶ月FXオプション価格 Price 2.753円を算出させるQuantLibコードが図14-2である。
計算結果を確認すると、コード12行目のprint文で出力されたCall価格:2.75271円/$はスクリーン価格の2.753円と一致しているが、この計算ではコード2行目の円金利をjIR=0.01215と設定し、Call価格を一致させた。
このWebページではどのような金利から算出されたかが不明なため、以下の説明では 金利の種類にはこだわらず、QuantLibのFXオプションの記入法に集中しよう。
14-1-1. 満期3ヶ月50D コールのコード
FX市場の慣習に従えば、このオプションはデルタが0.50なので、満期3ヶ月の50デルタコール と呼び、50D Callなどと記す。FX市場では 行使価格ではなく、デルタをベースにボラティリティが建値される (スティッキーデルタ Sticky Delta)。市場参加者はデルタから行使価格が算出できることが求められる。
まず ストライクが与えられているとして、NPVやグリークスが計算できるコーディングを理解しよう。(デルタからストライクの計算は14-3節で説明)

$\qquad\qquad\quad$図14-2:3ヶ月 50D コールのコード例
コード各行を確認するが、大半が短縮形で記述しているため、短縮していないコードを理解できるようにテキストの参照ページを記載した。図14-2のコードは短いが、残念ながら 以下の説明は長い。
一読後 もし理解が不十分と考えた場合、テキスト6.3.2節「確率過程クラスでの算出コード」を復習しよう。
-
(2, 3行) 主な変数:
jpySPスポット円$\qquad$uIR米国3ヶ月金利$\qquad$jIR日本3ヶ月金利
$\qquad\qquad\qquad\quad$uFCドル想定元本 (FCはfaceの略)
$\qquad\qquad\qquad\quad$cSTKコール ストライク$\qquad$cVolコール ボラティリティ -
(5行) expDT, expYR:オプション満期日と満期年数 (expはexpireの略)
-
adM,yrFはadvance(テキストp.3), yearFraction(テキストp.56)の短縮形で、定義はmyABBRモジュールを参照
-
-
(6行) uCvHDL, jCvHDL:日米3ヶ月金利から作成したカーブハンドル
-
この2つのハンドルは、第13回記事で扱ったSOFRカーブとドル担保TONAカーブのそれぞれのハンドル
sfCvHDL,jBsCvHDLに対応する -
makeFFはFlatForwardクラス(テキストp.29)で作成されるイールド タームストラクチャーオブジェクトを戻す関数でmyUTILモジュールで定義- 引数で、compoundingのパラメータが省略されているので、uIR, jIRは連続複利レートとなっている
(金利の種類が不明なための処置) - この関数はオブジェクトとハンドルの2つを戻すが、今回はハンドルのみが必要
(9行目でエンジン設定をしているが、「エンジンにはハンドルが必要」)
- 引数で、compoundingのパラメータが省略されているので、uIR, jIRは連続複利レートとなっている
-
-
(7行) voHDLc:コールのボラティリティ
cVol=0.0902で作成されるボラティリティカーブのハンドル-
makeBvolもmyUTILモジュールで定義された関数で、この部分をフルで記述すると次のようにかなり長いコードとなる-
ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(trdDT, calWK, cVol, dcA365) ) -
BlackConstantVol,BlackVolTermStructureHandleは テキストp.173 図6.8 を参照
-
-
-
(9行) gkPROC:GKモデル
(Garman Kohlhagen model, テキストp.191)のプロセスを作成するコンストラクタGarmanKohlagenProcessを呼び出す短縮形で、myABBRで定義-
このコンストラクタのQLPドキュメント
(テキストp.6)のスクショは次の通りであり、gkPROC短縮形はコンストラクタの名称を短縮させている以外、何の編集も行っていない -
テキストp.173 図6.8の3行目で使われているBlackProcessとくらべ、
foreignRiskFreeTSという引数が1つ増えている -
プロセスについて、不慣れな読者は テキスト6.3.2節を復習すべきと言いたいが、9行目の2つ目のコードでエンジンを解析解とするため、プロセスの重要性は低くなる。
当面は「プロセスとは確率過程、例えば テキストp.158 式(6.1)の微分方程式が作られている」とぼんやり理解すればよい
(式6.1に対応するGKモデルの式は14-4節参照)
-
-
(9行 2つ目) anaEE(gkPSc):anaEEもmyABBRで定義した短縮形でフルの記述は、AnalyticEuropeanEngine(gkPSc)で、オプション評価用の解析解エンジンが作られる
- 9行目の1つ目で作成したプロセスオブジェクト
gkPScを1つだけ引数にとる単純なコンストラクタで、この辺りはテキストp.173 図6.8とほぼ同じコード構成となる
- 9行目の1つ目で作成したプロセスオブジェクト
-
(10行) cOBJ=euOPT( vPoff(oCL,cSTK), excE(expDT) ):コールオプションのオブジェクト
cOBJをEuropeanOptionコンストラクタの短縮形euOPTで作成-
右辺は短縮形の嵐であり、フルに書くと以下となる
-
ql.EuropeanOption( ql.PlainVanillaPayoff( ql.option.Call,
cSTK),
$\qquad\qquad\qquad\qquad$ ql.EuropeanExercise(expDT) $\qquad\qquad\qquad$) -
cSTKとexpDTは2行目, 5行目で定義した変数
-
-
この部分もテキストp.173 図6.8の7行目
VanillaOptionとほぼ同じコード- EuropeanOptionとVanillaOptionは同じコンストラクタで、名称が異なるのみ
- オプションのコンストラクタの引数に関しては、テキストp.175の説明を参照
-
-
(10行 2つ目) setPE( cOBJ, gkENGc ):同様にmyABBRで定義した短縮形でcOBJ.setPricingEngine(gkENGc)に同じ
- 9行目で作成した解析解エンジン
gkENGcをcOBJにセット
- 9行目で作成した解析解エンジン
-
(12~14行):cOBJオブジェクトの各メソッドで、計算結果をプリント
以上が50D コールのコードとなるが、実質的な部分は5行~10行までとなり、慣れれば 大したことはないだろう。
14-1-2. 50デルタ コールのペイオフ図
図14-3がこのコールのペイオフ図で、見慣れたコールの絵となっている。次回の記事で扱う予定のリスク リバーサルなどは 図があると、かなり判りやすくなるので、まずは単純なコールの図でMatplotlibを理解しておこう。

$\qquad\qquad\quad$図14-3:50D コールのペイオフ
もし、Matplotlibが不慣れな場合、テキスト1.2.3節を参照し、その後は場当たり的な理解で十分であろう (Matplotlibは覚えてもすぐに忘れる!)。ここでは注意点のみ 記す。
-
(2行) np.maximum:maximum関数で、満期時ペイオフ額を計算
-
numpyには max関数もあり、相違は次のとおり
関数 機能 np.maximum(a, b)2つの配列を要素ごとに比較し、大きい方を戻す np.max(a, axis=None)配列の最大値を戻す -
axis=None:配列全体の最大値 (初期値)
axis=0:列ごとの最大値 $\qquad$axis=1:行ごとの最大値
-
-
-
(7行):matplotlib用の短縮形でaxオブジェクトに対して、以下の描写を行う
(詳細はmyABBR.pyを参照)-
vline(ax, cSTK)$\qquad\qquad$: cSTKの位置に垂線を書く -
nbShow(ax,cSTK,(-16,20)): cSTKの値を表示 (nbはnumberの略)
$\qquad\qquad\qquad\qquad\qquad\qquad$ (-16,20) は (cSTK,0) 座標からの相対位置 -
lgD(ax)$\qquad\qquad\qquad\quad\ \ $: label 指定の有無をチェック後、凡例を表示 -
gdShow(ax)$\qquad\qquad\qquad\ $: グリッド表示
-
図の中に数値を記入すると、判りやすさが倍増する。nbShow短縮形はMatplotlibの呪文のようなannotate関数を短くしているが、使い勝手は悪くない。(座標の値を変えた表示を各自試そう)
14-2. モンテカルロ法でのコード例
冒頭に記したように、今後 TaRFを評価するコードを予定している。そのためにはパス依存のコードを書く必要があり、その準備として、モンテカルロ法で評価した50D コールの図14-4を説明しよう。
図14-4は1行目でパス数nPA:100,000個, ステップ数nSTP:12を設定し、50Dコールをモンテカルロで評価し、結果は2.7746円 (SE:0.013)を示している。図14-2での解析解 2.75271円にかなり近い値となっている。(SEはstandard errorの略で、14-2-2節で説明)
このコードは テキスト p.177から始まる6.4節をベースに書いた。モンテカルロ法を理解する最も有効な方法は、テキスト6.4節のように、乱数生成から出発し、地道に数値を追うことである。
ここでは詳細な計算過程は省略し、何を計算しているかを概観する。詳細なコーディング法はテキスト6.4節を参照して頂きたい。

$\qquad\qquad\quad$図14-4:パス100,000個 12ステップでの50Dコールの評価
-
(4行) gsPathGEN:
この短縮形は、図14-2の9行目で作成したガーマンコヘーゲンプロセス gkPScを第1引数に取り、gkPScプロセスに従うパスを生成するオブジェクトcPAgnを戻す(gkPScはGarman Kohlhagen process callの略、cPAgnはcall path generatorの略)-
もし、短縮形を使わない場合、次のような呪文のコードとなる
-
ql.GaussianPathGenerator(
gkPSc,expYR,
ql.GaussianRandomSequenceGenerator (
ql.UniformRandomSequenceGenerator (nSTP,
ql.UniformRandomGenerator(nSd) $\ \ \ \quad$ ) ) ) -
最後の3つの呪文はテキスト 図6.12 を参照
-
最初にあるGaussianPathGeneratorはテキスト 図6.13の9行目を参照
-
-
-
(5, 6行) cPAgn.next().value():
next().value()メソッドを1回実行すると、ガーマンコヘーゲンプロセスに従う1つのパスが作成される- 5行目 forループはnPA回 ループするので、100,000個のパスがmtxPA変数に[ 100,000行, (12+1)列 ]の行列として保存される
(mtxPAはmatrix pathの略, +1は初期値を意味) - 詳細はテキスト 図6.13の12行~14行目を参照
- 5行目 forループはnPA回 ループするので、100,000個のパスがmtxPA変数に[ 100,000行, (12+1)列 ]の行列として保存される
14-2-1. パス数:3, ステップ数:2 でのコード例
図14-4の パス 100,000個, ステップ数12は数値が大きすぎ、理解しづらい。図14-5でパス数 3, ステップ数 2, 乱数シードを7番に修正し、7行目でmtxPAがプリントされ、[ 3行, (2+1)列 ]の行列を出力した。
-
この行列は各行がパスとなり、円スポット
jpySP157.28円と乱数から作られた2つのドル円レートで構成(シード7番の理由はこの3つのパスが説明しやすい数値のため) -
この3つのパスを図14-6でグラフ描写
14-2-2. モンテカルロ法の標準誤差 (Standard Error)
テキストでは標準誤差(SE, Standard Error)の説明をしなかったので、計算式と使い方をまとめておく。
- 標準偏差(SD)と標準誤差(SE)の相違は 何のばらつきを測っているかの違い
| 項目 | 標準偏差(SD) | 標準誤差(SE) |
|---|---|---|
| 意味 | 個々のデータのばらつき | 平均値のばらつき |
| 対象 | 個々の観測値 | 平均値 |
| サンプル数を増やすと | 基本的には減らない | $1/\sqrt n$ に比例して減少 |
| 用途 | データの分散状況 | 平均値の推定精度の確認 |
( 計算式 )
以下では、パス数nPAをnで表す。
-
不偏標本分散 $s^2$(Unbiased Sample Variance):n-1で割る点に注意
- 図14-5の11行目コード
ddof=1によって、n-1で割ることを指定 - ddofは Delta Degrees of Freedom(自由度の調整量)の略
- 図14-5の11行目コード
$$
s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2
$$
- (標本)標準偏差 $s$ (Standard diviation)
$$
\displaystyle s=\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2}
$$
- (推定)標準誤差 $\widehat{SE}$:(Standard Error)
(推定量の目印としてハットを付けている)- 図14-5の11行目コードの計算式
$$
\widehat{SE}=\frac{s}{\sqrt{n}}
=\frac{1}{\sqrt{n}}\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2}
$$
これらの式に次の数値を当てはめる。次表の割引後ペイオフ列はペイオフ列に図14-4のjExpDF:0.996975 (オプション満期日DF)を掛けた値。
| パス | 満期円レート | ペイオフ | 割引後ペイオフ$X_i$ |
|---|---|---|---|
| 0 | 145.51392 | 0.00000 | 0.00000 |
| 1 | 157.46931 | 1.27931 | 1.27544 |
| 2 | 165.50072 | 9.31072 | 9.28255 |
(以下 "ペイオフ"は割引後ペイオフを指す)
- 図14-5の出力 (MC)Call円額
cAMTは、ペイオフの3つの平均値 $\bar X$
$$
\bar X:=\frac{X_0+X_1+X_2}{3}
=\frac{0+1.27544+9.28255}{3}
=3.5193円
$$
- 不偏標本分散 $s^2$
$$
s^2=\frac{\sum_{i=1}^{3}(X_i-\bar X)^2}{3-1}
=\frac{12.38569+5.03506+33.21475}{2}
=25.3178
$$
- (標本)標準偏差:個々のパスのペイオフのばらつき
$$
s=\sqrt{25.3178}=5.0317円
$$
- (推定)標準誤差
cSE:ペイオフの平均値 $\bar X$(Call評価額=3.5193円)のばらつき
$$
\widehat{SE}(\bar X)=\frac{s}{\sqrt{n}}=\frac{5.0317}{\sqrt{3}}=2.905円
$$
計算式に関しては、以上となる。まず 個々のパスのペイオフ $X_i$ なのか、ペイオフの平均値 $\bar X$ なのかを区別しよう。
( なぜ$\sqrt n$で割る? )
補足として、なぜ$\sqrt n$で割る項が出てくるかを示しておく。各 $X_i$ が独立で同じ分布に従い、その分散を $\sigma^2$ とすると、"ペイオフの平均"と"平均の分散"は次式となる。
$$
\begin{aligned}
\small{\text{ペイオフの平均: }}
\bar X &=\frac{1}{n}\sum_{i=1}^{n}X_i
\\
\small{\text{平均の分散: }}
Var(\bar X)
&=Var\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right)
=\frac{1}{n^2}\sum_{i=1}^{n}Var(X_i)
=\frac{\sigma^2}{n}
\end{aligned}
$$
標準誤差とは平均の標準偏差であり、$\sqrt n$で割る式となる。
$$
Var(\bar X)=\frac{\sigma^2}{n}
\quad \Rightarrow \quad
SE(\bar X)=\frac{\sigma}{\sqrt n}
$$
( 使い方 )
-
95%信頼区間を次式で算出
$$
\bar X \pm1.96\ \widehat{SE}
$$-
図14-4
(パス100,000のコード)の出力からは、次式となる。インターバルに解析解 2.75271円が含まれ、統計的に矛盾は無い$$
2.7746\pm1.96\times0.013
=[\ 2.74912,\ 2.80008\ ]
$$
-
-
必要なパス数の目安を算出
-
標準誤差SEは概ね $1/\sqrt n$ に比例
- パス数を4倍にすると、SEは$1/\sqrt 4 = 0.5$ で半分になる
- パス数を100倍にすると、SEは$1/\sqrt{100} = 0.1$ で10分の1になる
-
現在のパス数 $n$ と $\widehat{SE}$ から、目標 $SE_{tgt}$ に必要なパス数 $m$ を概算する式
$$
m = n\left(\frac{\widehat{SE}}{SE_{tgt}}\right)^2
$$- ( 導出法は $\widehat{SE} = \hat\sigma /\sqrt{n}$ と $SE_{tgt} = \hat\sigma / \sqrt{m}$ から $\hat\sigma$ を消去する )
-
図14-5のSEから目標を 0.10 円と置くと、次式より 2,532程度のパスが必要
(3パスから得た分散推定に基づく粗い目安)$$
m = 3\left(\frac{2.905円}{0.10円}\right)^2
=2,532\ パス
$$- 図14-5でnPA=2500で実行すると、SE=0.08となった
(各自確認)- ( 図14-6のパスのグラフも2500本 描かれて面白い )
- 図14-5でnPA=2500で実行すると、SE=0.08となった
-
14-3. デルタから行使価格を計算
では デルタから行使価格を計算するQuantLibのコンストラクタを説明する。まず 25D プットのコードも例示し、図14-1の記憶を呼び戻そう。
14-3-1. 25D プットのコード
図14-1では デルタ25 プットはStrike 151.04, Imp Vol. 10.31%で、1.236円のプレミアムとなっている。
図14-7で算出したプット価格 1.24419円とは若干ズレているが、理由は金利にあるかと思われ、このズレは無視しよう。

$\qquad\qquad\qquad\quad$図14-7:3ヶ月 25D プットのコード例
簡単にコードを確認しておく
-
(2行) voHDLp:50D コールとはボラティリティが異なるため、プット用のボラティリティハンドルを別に作成
(最後のpはputの略) -
(4行) gkPSp, gkENGp:gkPROC関数を使い、プット用のプロセスを解析用エンジンに設定
-
(5行) pOBJ:25D プットのオブジェクトを作成し、エンジンをセット
14-3-2. 25デルタ プットの行使価格
既に記したように、FX市場ではデルタから行使価格が計算できることが前提となっている。図14-8はその計算例で、25デルタ プットの行使価格151.04を pVol=0.1031 からQuantLibのBlackDeltaCalculatorクラスを使って 計算させた。

$\qquad\qquad\qquad\quad$図14-8:25D プットの行使価格算出例
ではコードを確認する。
-
(4, 5行) BlackDeltaCalculatorクラス, strikeFromDeltaメソッド:
QLPドキュメントのスクショは下図となる
-
上段がBlackDeltaCalculatorクラスで、引数は6個必要となるが 注意すべきは以下の2つの引数
-
(第2引数) deltaType:
ql.DeltaVolQuoteクラスを使って指定する-
myABBRモジュールに sptDLT=ql.DeltaVolQuote.Spot と fwdDLT =ql.DeltaVolQuote.Fwd の2つを短縮形として登録
-
必要に応じ、この関連の短縮形は増えるだろう
-
ql.DeltaVolQuoteクラスの詳細はQLPドキュメントを参照
-
-
(第6引数) stdDev:ボラティリティと満期年数から計算する標準偏差を設定
- 図14-8では1,2行目で
pSD=pVol*np.sqrt(expYR)を計算
- 図14-8では1,2行目で
-
(第4, 5引数)
jExpDFは 図14-4で設定したので、このセルではuExpDFのみを設定
-
-
下段はコード5行目で使用された strikeFromDelta メソッドの説明となるが、コード5行目から、デルタ
pDLT=-0.25を与えれば、pSTK=151.0384...が算出される
-
14-4. (補足) GKモデルからBlackモデルの導出
冒頭に記した「金利を確率変数としない場合 GKモデルとBlackモデルが同じ解を算出する」点について説明する。(モデル式に興味が無い場合、読み飛ばしても問題はない)
まず 以下の記号を定義する。その他の記号はテキストに従う。(p189 6.5.3節の記号など)
| 記号 | 定義 |
|---|---|
| $S_t$ | T+0 受渡の FX スポット (1 USD 当たり JPY)
|
| $F_t$ | 受渡日 $T$ の FX フォワード |
| $r_t$ , $r_t^f$ | 国内・外国のリスクフリー金利 |
| $P_t$ , $P_t^f$ | 国内・外国の満期 $T$ の割引債価格 |
国内リスク中立測度 $Q$ の下で、GKモデル のFXスポット は次式となる。
$$
\frac{dS_t}{S_t}=[r_t-r_t^f]\ dt+\sigma\ dW^Q \tag{14-1}
$$
- 外国通貨には外国金利による保有収益があるため、FXスポットのドリフトは国内金利から外国金利を引いたもの
(以下 "国内"が明らかな場合 省略)
カバード金利平価(確定金利)は式(14-2)の最初の等号で、第10回 10-1節で説明した式(10-1)である。ただし、記号をディスカウントファクター $df^D, df^F$ から割引債価格 $P_t, P_t^f$ に修正した。
$$
F_t=S_t\frac{P_t^f}{P_t}=S_t\
\underbrace{\exp\left(\int_t^T[r_u-r_u^f]\ du\right)}_{A_t}
=S_t\ A_t \tag{14-2}
$$
3番目の等号は 2番目の等号の確定的な係数部分を$A_t$と表した。
$$
A_t:=\exp\left(\int_t^T[r_u-r_u^f]\ du\right)
$$
この$A_t$は次の微分方程式の解である。
$$
\frac{dA_t}{A_t}=-[r_t-r_t^f]\ dt
\tag{14-3}
$$
式(14-2)の$F_t=S_t\ A_t$ に伊藤の積の公式(テキストp216 脚注29)を適用する。$A_t$は式(14-3)のように$dt$項だけを持つため、次式 右辺の第3項(2次共変動)はゼロとなる。
$$
dF_t
=A_t\ dS_t+S_t\ dA_t+
\underbrace{dS_t\ dA_t}_{=0}
$$
上式を $F_t=S_t\ A_t$ で割り、式(14-1), 式(14-3)を使い 整理すると、Blackモデル式 (テキストp158 式6.3)を得る。
$$
\begin{aligned}
\frac{dF_t}{F_t}
&=\frac{A_t\ dS_t+S_t\ dA_t}{S_tA_t}
=\frac{dS_t}{S_t}+\frac{dA_t}{A_t}\\
&=[r_t-r_t^f]\ dt+\sigma\ dW_t^Q
-[r_t-r_t^f]\ dt\\
&=\sigma\ dW^Q =\sigma\ dW^T
\end{aligned}
\tag{14-4}
$$
最後の等号は「金利が確定的な場合、リスク中立測度$Q$とT-フォワード測度$Q^T$は一致」するため。なお 式(14-4)において、次を確認しよう。
-
リスク中立測度のまま、スポットからフォワードへ変数を変えただけでドリフトが無くなった
(測度変換は行っていない) -
満期時点$T$で $F_T=S_T$ であり、満期のペイオフは同じになる
($S_t$と$F_t$のパスが同じという意味ではない)
( なぜメジャーは一致するのか )
銀行預金の過程を$B_t=\exp(\int_0^t r_u\ du)$, $B_0=1$ とすると、リスク中立測度から$T$-フォワード測度へのRadon–Nikodym微分(密度過程)は次式となる。 (Radon–Nikodym微分は第11回 11-3-2節 参照)
$$
\left.\frac{dQ^T}{dQ}\right|_{\mathcal t}
=\frac{P_t\ B_0}{P_0\ B_t}=1
$$
国内金利が確定的なら、分子の$P_t$は次式で表わせるので、密度過程は常に $1$ となり、$Q^T=Q$ である。(ニュメレールは違っても、両者の比が確定的に一定なら同じメジャー)
$$
P_t=\exp\left(-\int_t^T r_u\ du\right)
=P_0\ B_t
$$
まとめ
- GarmanKohlagenProcessコンストラクタ
(短縮形 gkPROC)による50デルタ コールの解析解とモンテカルロ法でのコード - モンテカルロ法での標準誤差の使い方
- BlackDeltaCalculatorクラス, strikeFromDeltaメソッドによるデルタから行使価格の算出
- 記事中のコードはテキストのサポートページ より、取得可能
(今回のコードはq14-fxOpt.ipynb。myABBR, myUTILの更新も忘れずに!)



