金融ITの会社にいて、デリバティブを扱っているのに、あまりデリバの理論まわりのことを勉強してこなったので、
復習と教育資料の作成をかねて解説とPythonでのプログラムをメモっていく。
ちなみに書籍など一般的に公開されている情報をもとにやっていく。
そのため、仕事のノウハウとは一切関係ありません。
Pythonを使って学ぶデリバティブシリーズ
第1弾: フォワード為替レートの算出-
第2弾: イールドカーブを引く(JPYLiborカーブ)
フォワード為替レートの計算方法
フォワード為替とは、将来のとある時点での為替の交換レートのこと。
フォワード為替レート(FwdFX)は現在の為替の交換レートであるスポット為替レート(SpotFX)と両通貨の金利から算出ができる。
例えば、ドルと円の換算レートを算出する場合、
FwdFX(USD/JPY) = SpotFX(USD/JPY) × DF(USD) / DF(JPY)
で算出できる。
金利といいながら金利が出て来ず、代わりにDFなるものが出てきているが、
DFとはディスカントファクターのことで、
将来のとある時点の価値を現在の価値で割り引くときに使う掛け目みたいなもの。
将来の100万円と現在の100万円は金利があるため、等価値ではなく、
じゃぁ将来の100万円の価値っていくらなの?ってときに100万円かけるDFで価値を算出することができる。
そして、DFは金利から算出できる。
DFまわりの話は主旨が違うのでここではこれ以上話さない。わかっている前提で話をすすめる。
解説
現在の為替レートをS(1ドルS円), 期間をT(年), T年間の連続複利ベースの円スポット金利をRy, 同じくドルスポット金利をRdとする。
(1) 現時点で手持ちの円資金S円をドルに替えてT年間運用した場合、
S \times \frac{1}{S} \times e^{RdT} = e^{RdT}(ドル)
となる。
(2) T年間円のまま運用した場合、
S \times e^{RyT}(円)
となる。
ここで、T年後の為替レートをX(1ドルX円)とおく。
円をドルに替えて運用する(1)と円で運用してドルに替える(2)は同じ結果(※)になるため、
※仮に差があっても経済的に等価になるようにすぐに収斂される
S \times e^{RyT} \times \frac{1}{X} = e^{RdT}
が成り立つ。
よって、フォワード為替レートであるXは
\begin{align}
X &= S \times e^{-RdT} \times \frac{1}{e^{-RyT}} \\
&= S \times \frac{Dfd}{Dfy}
\end{align}
となり、スポット為替レート×DF(ドル) / DF(円)で算出される。
サンプルコード
# -*- coding: utf-8 -*-
import numpy as np
# 諸データ
SFX= 120 # スポット為替レート
ry = 0.01 # 円のスポット金利
rd = 0.05 # ドルのスポット金利
T = 1 # 期間
# 1年の連続複利ベースの金利(R)をスポット金利(r)から算出する。
"""
e^RT = (1+r)^T
RT = ln(1+r)
R = ln(1+r) / T
"""
Ry = np.log(1 + ry) / T
Rd = np.log(1 + rd) / T
# ディスカントファクターはe^RTで算出されるため
DFy = np.exp(-Ry * T)
DFd = np.exp(-Rd * T)
# フォワード為替はスポット為替レート×DF(ドル) / DF(円)で算出されるため
FFX = SFX * DFd / DFy
print(FFX)