「ファイナンス機械学習」2章ETFトリックの具体例

(参考)ETFトリックとは(具体例はすこし下)

なぜETFトリックが必要になるか、ベーシストレーディングというものを使って説明する。

日経225の先物の値段の理論値は、日経225の価格と、利子率と、予想配当利回りと、レポ利率 (=株を借りるのにかかるコスト)から求められる。

先物価格理論値 = 今の日経225価格 + 予想金利収入 - 予想配当収入 - 予想レポ収入

先物と日経225の差、つまり(先物価格 ー 日経225価格)はベーシスと呼ばれる。

マーケットで観測されるベーシスは、理論値と一致するとは限らない。この理論値からのズレを使って収益を上げるトレーディング手法をベーシス・トレーディングという。

例えば、ベーシスが3日連続で上昇したら4日目は下落しやすい、のような法則を見つけることができたら、そのアイデアを使って儲けることができるかもしれない。

ただ、このベーシス自体の時系列を取ってきて、モデル化して予測するのは問題点がある:①ベーシスの値が正になったり負になったりするとモデル化しにくい②構成株のウエイトの変化によって価格が変動してアービトラージの機会がないのにベーシスの値が変わったりする事がある*1ので、正しくベーシスの変動を予測しても儲けられないことがある。

そこで、ベーシスに1ドル投資したら、投資した1ドルはどのくらい増減するか?という問題を考える。「ベーシスに投資する戦略をとるETFがあったら値動きはどうなるか?」という考え方と一緒なので、この手法をETFトリックという。

ベーシストレーディング以外にも、とうもろこしや金などの先物を商品使ったトレード戦略を考える際、とある満期の先物を使うと数ヶ月分のトレード履歴しか取得できないが、ETFのような先物をロールして価格の連続性を保つ方法なら、何十年分のデータが取得可能である。ETFが存在する商品ならそれを使ってしまえば楽だが、そうではない場合、またETF価格は管理手数料が引かれているので正確に計算したい場合は、先物などを自分でETFっぽく変換すると、価格の連続性が保たれた時系列データが手に入る。

時点tでの投資資金を K _ tドルとすると、最初は1ドルからスタートするので、 K_0 = 1 K_tは以下のように求められる。

\begin{align} \displaystyle K _ t &= K _ {t-1} + \text{t期の合計損益} \\ &= K _ {t-1} + \sum _ {全銘柄} \text{t-1期での各株の保} \text{有数} \times \text{各株からの利益率(ドル)} \\ &= K _ {t-1} + \sum _ {全銘柄} (\text{t-1期での各株の保} \text{有数} \times \text{為替レート}) \\ & \times ( \text{1株あたり株} \text{価変動額} + \text{1株の配} \text{当利} \text{回り} ) \\ &= K _ {t-1} + \sum _ {i=1} ^ {I} h _ {i, t-1} \varphi _ {i, t} (\delta _ {i, t} + d _ {i, t}) \end{align}

数あるタイムステップtのうち、株のリバランスのタイミング(ロールの日など)( B)で、株iの保有 h _ {i, t} を、以下のように変化させていく。

\begin{align} \displaystyle h _ {i, t} = \begin{cases} \text{所有資産合計} \times \text{株iへの割合} \div \text{株iの値段(ドル)} & (\text{if } t \in B) \cr h_{i, t-1} & (\text{otherwise}) \end{cases} \end{align}

この条件分岐は、リバランスを行う( B)の時期以外は、株数は前のタイムステップと一緒ということ。

また、ここで、

 \displaystyle \text{所有資産合計} \times \text{株iへの割合} \div \text{株iの値段(ドル)} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )

と表せる。ここで、 \sum _ {全銘柄} | \omega _ {i,t} | に絶対値がついているのは、 \sum _ {\text{全銘柄}}  \omega _ {i,t}  = 0だったときに無限大になってしまうから。

具体例

以下のような金と銀の仮想の先物データでETFトリックを試してみる。

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
(参考) BASIS 1 1 5 6 8 -10 -11 5 2
  • tはタイムステップ
  • Rebalanceは t \in B, つまりtにリバランスがあるかどうかを示している
  • opnは始値(今後資産iの時点tの始値 o _ {i, t}と表す)
  • clsは終値
  • 配当dは単純化のため0とする
  • レート \varphi _ {i, t}は単純化のため1とする
  • 上で述べたように、BASIS自体をモデル化するのは難しそう

まず、アロケーションベクトルωを決定してく。金が上がると思うので今回は金-銀のスプレッドが大きくなる方にベッドしたい。シンプルに金のωを1、銀のωを-1とする↓

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1

次に、金銀それぞれの価格変化δを以下の式から求めていく↓

\begin{align} \displaystyle \delta _ {i, t} = \begin{cases} p _ {i, t} - o _ {i, t} & (\text{if } (t-1) \in B) \cr \Delta p _ {i, t} & (\text{otherwise}) \end{cases} \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1

初期条件の K_0 = 1を表に書き入れる↓

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 ? ? ? ? ? ? ? ?

この K_0 = 1をもとに、金と銀それぞれの保有数hを計算する

 h _ {i, t} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )を使うと、金の初期保有数は

\begin{align} \displaystyle h _ {金, 0} &= 1 \times \frac{1}{2} \div 10 \\ &= 0.05 \end{align}

であり、銀の初期保有数は

\begin{align} \displaystyle h _ {銀, 0} &= 1 \times \frac{-1}{2} \div 8 \\ &= -0.0625 \end{align}

ここで、使われている値段は翌日の始値であることに注意。これは、t=0の引け後の資産を使って翌日の朝、成行注文を出していると考えれば良い。

今求めた保有数は、リバランスが来るまで変わらない。

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 ? ? ? ? ? ? ? ?
gold h 0.05 0.05 0.05 0.05 ? ? ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 ??? ??? ???? ???? ????

 K _ t  = K _ {t-1} + \sum _ {i=1} ^ {I} h _ {i, t-1} \varphi _ {i, t} (\delta _ {i, t} + d _ {i, t})より、 K _ {1}, K _ {2}, K _ {3}, K _ {4}を計算する。

\begin{align} \displaystyle K _ 1 &= K _ {0} + 0 \times 0.05 + 0 \times (-0.0625) \\ &= 1 \\ K _ 2 &= K _ {1} + 1 \times 0.05 + (-3) \times (-0.0625) \\ &= 1.2375 \\ \vdots \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3 1.4375 ? ? ? ?
gold h 0.05 0.05 0.05 0.05 ? ? ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 ??? ??? ???? ???? ????

t=4でリバランスをして、hを調整する。 h _ {i, t} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )より、

金:

\begin{align} \displaystyle h _ {金, 4} = h _ {金, 5} &= 1.4375 \times \frac{1}{2} \div 8 \\ &= 0.089844 \end{align}

銀:

\begin{align} \displaystyle h _ {銀, 4} = h _ {銀, 5} &= 1.4375 \times \frac{-1}{2} \div 17 \\ &= -0.04228 \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3  1.4375  ? ? ? ?
gold h 0.05 0.05 0.05 0.05 0.089844 0.089844 ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 -0.04228 -0.04228 ???? ???? ????

求めたhをもとに、 K _ {5}, K _ {6}を求める(緑色の部分)

(式、表省略)

求めたKをもとに、t=6, 7, 8での株保有数を求める

(式、表省略)

求めた株保有数をもとに、 K _ {7}, K _ {8}を求める

(式、表省略)

以上の計算で、時系列データKtが生成された

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3 1.4375 1.300092 0.972426 0.901213 0.802989
gold h 0.05 0.05 0.05 0.05 0.089844 0.089844 0.027012 0.027012 0.027012
silv h -0.0625 -0.0625 -0.0625 -0.0625 -0.04228 -0.04228 -0.0442 -0.0442 -0.0442
(参考) BASIS 1 1 5 6 8 -10 -11 5 2

間違っていたら教えて下さい。

[付録]その他の章

「ファイナンス機械学習」1章&2章メモ - babaye's notes

「ファイナンス機械学習」3章&4章メモ - babaye's notes

*1:具体例の最初の表のBASIS系列を参照すると、系列がロール時期に大きく動いてしまうことがわかる