ペアのボラティリティの分離

ペアのボラティリティを分離してベース、クウォートそれぞれのボラティリティを推測してみる。

ペアのボラティリティを計算

先ず、推測に当たって、以下のモデルを使用することとする。

\[ V_{BaseQuote} = \sqrt{V_{Base}^{2} + V_{Quote}^{2}} \]

次にA、B、Cというデータがあって、ボラティリティがそれぞれ1、2、3であるとする。

\[ V_{A} = 1 \] \[ V_{B} = 2 \] \[ V_{C} = 3 \]

そして、AB、BC、CAというペアを作り、モデルに基づいてボラティリティを計算する。

V_AB

\[ V_{AB} = \sqrt{V_{A}^{2} + V_{B}^{2}} \] \[ V_{AB} = \sqrt{1^{2} + 2^{2}} \] \[ V_{AB} = \sqrt{1 + 4} \] \[ V_{AB} = \sqrt{5} \]

V_BC

\[ V_{BC} = \sqrt{V_{B}^{2} + V_{C}^{2}} \] \[ V_{BC} = \sqrt{2^{2} + 3^{2}} \] \[ V_{BC} = \sqrt{4 + 9} \] \[ V_{BC} = \sqrt{13} \]

V_CA

\[ V_{CA} = \sqrt{V_{C}^{2} + V_{A}^{2}} \] \[ V_{CA} = \sqrt{3^{2} + 1^{2}} \] \[ V_{CA} = \sqrt{9 + 1} \] \[ V_{CA} = \sqrt{10} \]

ペアのボラティリティから逆算

各ペアのボラティリティは以下のようである。

\[ V_{AB} = \sqrt{5} \] \[ V_{BC} = \sqrt{13} \] \[ V_{CA} = \sqrt{10} \]

今度は逆算によって、A、B、Cそれぞれのボラティリティを求める。

準備①

\[ V_{AB}^{2} = \sqrt{5}^{2} \] \[ V_{BC}^{2} = \sqrt{13}^{2} \] \[ V_{CA}^{2} = \sqrt{10}^{2} \]

準備②

\[ V_{AB}^{2} = 5 \] \[ V_{BC}^{2} = 13 \] \[ V_{CA}^{2} = 10 \]

準備③

\[ V_{A}^{2} + V_{B}^{2} = 5 \] \[ V_{B}^{2} + V_{C}^{2} = 13 \] \[ V_{C}^{2} + V_{A}^{2} = 10 \]

V_A①

\[ (V_{A}^{2} + V_{B}^{2}) - (V_{B}^{2} + V_{C}^{2}) = 5 - 13 \] \[ V_{A}^{2} + V_{B}^{2} - V_{B}^{2} - V_{C}^{2} = -8 \] \[ V_{A}^{2} - V_{C}^{2} = -8 \]

V_A②

\[ (V_{A}^{2} - V_{C}^{2}) + (V_{C}^{2} + V_{A}^{2}) = -8 + 10 \] \[ (V_{A}^{2} - V_{C}^{2}) + V_{C}^{2} + V_{A}^{2} = 2 \] \[ 2 * V_{A}^{2} = 2 \] \[ V_{A}^{2} = 1 \] \[ V_{A} = \sqrt{1} \] \[ V_{A} = 1 \]

V_B

\[ V_{A}^{2} + V_{B}^{2} = 5 \] \[ 1 + V_{B}^{2} = 5 \] \[ V_{B}^{2} = 4 \] \[ V_{B} = \sqrt{4} \] \[ V_{B} = 2 \]

V_C

\[ V_{C}^{2} + V_{A}^{2} = 10 \] \[ V_{C}^{2} + 1 = 10 \] \[ V_{C}^{2} = 9 \] \[ V_{C} = \sqrt{9} \] \[ V_{B} = 3 \]

以上の計算から、A、B、Cのボラティリティがそれぞれ1、2、3であることが分かる。

EUR、JPY、USDのボラティリティを推測

EURJPY、EURUSD、USDJPYのボラティリティを用いてEUR、JPY、USDのボラティリティを推測してみる。データは2016年の日足を使う。ボラティリティはデータを対数変換してから求める。

先ず、EURJPY、EURUSD、USDJPYそれぞれのボラティリティは以下のようである。

v_ej =  0.008034703792983185
v_eu =  0.005214348106485007
v_uj =  0.007917959753776157

これに対して上の逆算を行うと以下のようになる。

v_e =  0.00381128617097714
v_j =  0.00707322859547864
v_u =  0.00355858453581227

サンプルプログラム

○以下のプログラムをSpyderの「IPython console」にコピー&ペーストして「Enter」キーを2回押す。

# coding: utf-8

import forex_system as fs
from datetime import datetime
from sympy import solve, symbols

start = datetime.strptime('2016.01.01 00:00', '%Y.%m.%d %H:%M')
end = datetime.strptime('2016.12.31 23:59', '%Y.%m.%d %H:%M')

v_ej = fs.i_log_return('EURJPY', 1440, 1, 0)[start:end].std()
v_eu = fs.i_log_return('EURUSD', 1440, 1, 0)[start:end].std()
v_uj = fs.i_log_return('USDJPY', 1440, 1, 0)[start:end].std()

print('v_ej = ', v_ej)
print('v_eu = ', v_eu)
print('v_uj = ', v_uj)

v_e, v_j, v_u = symbols('v_e v_j v_u')
ans = solve([v_e**2 + v_j**2 - v_ej**2, v_e**2 + v_u**2 - v_eu**2, v_u**2 +
             v_j**2 - v_uj**2], [v_e, v_j, v_u])
# 解が8個あるが、ボラティリティは負にならないので最後の解を採用する。
v_e = ans[7][0]
v_j = ans[7][1]
v_u = ans[7][2]

print('v_e = ', v_e)
print('v_j = ', v_j)
print('v_u = ', v_u)
(2017/02/08更新)

コメント

非公開コメント