pubDate: 2024-05-22
author: sakakibara
tick
トーレディングのデータに限らず取引のデータは通常, 表形式に成っていることが多い。
そのカラムは取引Noをキーとして種類、数量、価格、日時などが含まれる。
このような表形式のデータを金融ではバーと呼ぶ。
ここでbarとは一定の基準で区切られた表形式のデータであり、データ一点のことではない。データの集まり(表)のことである。
研究で使われるバーは大分して2つ。一つは標準バー方式、もう一つが情報ドリブン方式である。後者の法を使用している実務家は多いと聞く。
以下にこれからの議論の重要な点をまとめる。
情報は一定のエントロピー速度で市場に届くわけではない。
時系列的な間隔でデータをサンプリングすることは、個々の観測者の情報コンテンツが一定からほど遠いことを意味する。
より良いアプローチは、交換される情報量に従属する過程として観測データをサンプリングすることである。
当然だが、機械学習の多くの技術ではデータをそのままNNなどに突っ込めば良いということは無く、正規化や標準化を行ってから機械学習などにかけることが多い。
標準バー方式はどのようにデータをサンプリングするかを決めるバーのサンプリング方式のことである。
目的とするところは、データがiidのノイズが乗ったデータとなるように時系列データを適切にサンプリングし、解析(計量時系列分析なり機械学習なり)をしやすくすることである。
time-bar
生のデータは取引No毎に送られてくることが多い。
time-bar方式は1分毎に1回情報をサンプリングする方法である。
これはごく自然な方法であり、最も人気があり、実際に研究論文などでもこの方法が最も多く使われているだろう。
しかし、精度の良い解析のためにはこの方法は避けるべきだ。
というのも、取引が活発な時間帯とそうでない時間帯を同じように扱ってしまうからである。
例えば、日本の株式市場の場合、取引が活発な時間帯は朝のオープンと昼の昼休み明けであるが、ここでの取引とそれ以外の時間帯の取引では出来高が異なる。
つまり、取引の活発な時間帯は過小にサンプリングし、閑散な時間帯は過大にサンプリングしてしまう。
さらにそれがHFTによって非常に激しく成っている場合、この方法は適切ではない。
メリット:
デメリット:
系列相関(観測値が前後の観測値とどの程度関連しているか)
分散不均一性(時間とともに分散が一定ではなくなること)
非正規分布リターン(極端な下落、上昇などが予想以上に存在すること)
という功罪をもたらす。
などFlow Toxicity and liquidity in a high-frequency world にも関連している。
ticks-bar
100回の取引毎にデータを区切ったらどうだろうか?
あまりにも単純な考えだが、これがtick-barである。
じつはこの方法はtime-barよりも優れた統計的性質を持っている。
On The Distribution of Stock Price Difference が発表されたのは1967年のことだ。
考えて見れば当然といえば当然だ。
time-barは取引毎から見たら相当不均一なデータをサンプリングしていると言えるが、ticks-barはそれよりかは少しだけマシなのである。
volume-bar
ではticks-barが最適かというとそうではない。
分割注文があるとtickに恣意性が含まれてしまうのだ。
例えば、10株の売り注文が1つあると、これは1 1 1 ticksとしてカウントされるが、1株の売り注文を10個あると、これは10 10 10 ticksとしてカウントされるのだ。
取引所や証券会社の売買マッチングエンジンによってはこのような分割注文が多く発生することがある。
このような恣意性を排除して見たいものをクリアにする必要がある。
volume-barは一定の出来高毎に表をサンプリングする方法である。
実はvolume-barによるリターンはtick-barによるサンプリングよりもiid従ったリターン分布になることが知られている。
dollar-bar
dollar-barは一定の金額毎にサンプリングする方法である。
これはvolume-barと似たような発想だが、volume-barよりも時間に対して一日あたりの平均バー数が一定になるというメリットがある。
情報ドリブン方式
情報ドリブン方式は標準バー方式とは異なり、新たなデータが来るたびに情報が含まれているかを検知し、より高頻度にサンプリングする方法である。つまり、動的にバーのサイズを変更する方法である。
tirck-imbalance-bar
tick系列を{ ( p t , v t ) } ( t = 1 , … , T ) \set{(p_t, v_t)}(t=1,\ldots, T) { ( p t , v t ) } ( t = 1 , … , T ) とする。p t p_t p t はtickt t t の価格であり、v t v_t v t はティックt t t の出来高(取引ドル)とする。
ここで、次のような系列{ b t } t = 1 , … , T \set{b_t}t=1,\ldots, T { b t } t = 1 , … , T を定義する。
b t = { 1 if v t − 1 < v t b t − 1 if v t − 1 = v t − 1 if v t − 1 > v t b_t =
\begin{cases}
1 & \text{if} v_{t-1} < v_t \\
b_{t-1} & \text{if} v_{t-1} = v_t \\
-1 & \text{if} v_{t-1} > v_t \\
\end{cases} b t = ⎩ ⎨ ⎧ 1 b t − 1 − 1 if v t − 1 < v t if v t − 1 = v t if v t − 1 > v t
ここでb t ∈ { − 1 , 1 } b_t \in \set{-1, 1} b t ∈ { − 1 , 1 } であり、この累積が一定値を超えたらサンプリングするという方法である。
T T T までの累積をtick-imbalanceとし、以下のように定義する。
θ T = ∑ t = 1 T b t \theta_T = \sum_{t=1}^T b_t θ T = t = 1 ∑ T b t
ここで注意すべきはTはバーのサイズであり、確率変数である。
当然θ T \theta_T θ T も確率変数である。
現状を整理する。
まず、取引一つずつの情報が送られてくる。
この取引一つの情報をtickと呼ぶ。
このtick全体(ticks)を適切にサンプリングするためにサンプリングの幅T T T を決めようと思う。
つまりticksを{ 1 , … , T 0 } , { 1 , … , T 1 } , … , { 1 , … , T n } \set{1,\ldots, T_0}, \set{1, \ldots, T_1}, \ldots, \set{1, \ldots, T_n} { 1 , … , T 0 } , { 1 , … , T 1 } , … , { 1 , … , T n } のように分割する幅T T T を決定することを取り組む。
θ T \theta_T θ T はT T T を決めれば当然求まる。が、そもそもT T T を決める道具としてθ T \theta_T θ T を使おうとしていたことを思い返してほしい。
そこで、θ T \theta_T θ T の期待値を計算する。
E [ θ T ] = E [ T ∑ t = 1 T b t T ] = E [ T ] ( num of ( b = 1 ) T − num of ( b = − 1 ) T ) = E [ T ] ( P ( b t = 1 ) − P ( b t = − 1 ) ) \begin{aligned}
\mathbb{E}[\theta_T] &= \mathbb{E}[{T\frac{\sum_{t=1}^Tb_t}{T}}] \\
&= \mathbb{E}[T](\frac{\text{num of}(b=1)}{T} - \frac{\text{num of}(b=-1)}{T}) \\
&= \mathbb{E}[T](P(b_t=1) - P(b_t=-1))
\end{aligned} E [ θ T ] = E [ T T ∑ t = 1 T b t ] = E [ T ] ( T num of ( b = 1 ) − T num of ( b = − 1 ) ) = E [ T ] ( P ( b t = 1 ) − P ( b t = − 1 ))
ここで、計算に使用した系列{ b t } \set{b_t} { b t } は過去の値を使う。
より、具体的にはE [ T ] \mathbb{E}[T] E [ T ] は前のバーまでの指数加重移動平均、
P ( b t = 1 ) − P ( b t = − 1 ) P(b_t=1)-P(b_t=-1) P ( b t = 1 ) − P ( b t = − 1 ) は前のバーまでのtickのb t b_t b t を使う。
そして、現在のtick-imbalance-barを以下のように定める。
T ∗ = arg min T { ∣ θ T ∣ ≥ ∣ E [ T ] ( P ( b t = 1 ) − P ( b t = − 1 ) ) ∣ } T^* = \arg\min_T\set{|\theta_T|\geq|\mathbb{E}[T](P(b_t=1) - P(b_t=-1))|} T ∗ = arg T min { ∣ θ T ∣ ≥ ∣ E [ T ] ( P ( b t = 1 ) − P ( b t = − 1 )) ∣ }
つまり、θ T \theta_T θ T の期待値よりも大きい値が出たらサンプリングするという方法である。
volume/dollar-imbalance-bar
volume/dollar-imbalance-barはtick-imbalance-barと同様に考えることができる。
imbalanceを以下のように定義する。
θ T = ∑ t = 1 T b t v t \theta_T = \sum_{t=1}^T b_tv_t θ T = t = 1 ∑ T b t v t
ここで、v t v_t v t は出来高ならばvolume-imbalance, 取引ドルならばdollar-imbalanceとなる。
以降、∑ t ∈ { t ∣ b t = 1 } \sum_{t\in\{t|b_t=1\}} ∑ t ∈ { t ∣ b t = 1 } を∑ t ∣ b t = 1 \sum_{t|b_t=1} ∑ t ∣ b t = 1 と表記する。
その期待値は
E [ θ T ] = E [ T ∑ t = 1 T b t v t T ] = E [ T ∑ t ∣ b t = 1 v t − ∑ t ∣ b t = − 1 v t T ] = E [ T ( ∑ t ∣ b t = 1 v t T − ∑ t ∣ b t = − 1 v t T ) ] = E [ T ( P ( b t = 1 ) E [ v t ∣ b t = 1 ] − P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] ) ] = E [ T ] ( P ( b t = 1 ) E [ v t ∣ b t = 1 ] − P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] ) \begin{aligned}
\mathbb{E}[\theta_T] &= \mathbb{E}[T\frac{\sum_{t=1}^{T}b_tv_t}{T}] \\
&= \mathbb{E}[T\frac{\sum_{t|b_t=1}v_t - \sum_{t|b_t=-1}v_t}{T}] \\
&= \mathbb{E}[T(\frac{\sum_{t|b_t=1}v_t}{T} - \frac{\sum_{t|b_t=-1}v_t}{T})] \\
&= \mathbb{E}[T(P(b_t=1)E[v_t|b_t=1] - P(b_t=-1)E[v_t|b_t=-1])] \\
&= \mathbb{E}[T](P(b_t=1)E[v_t|b_t=1] - P(b_t=-1)E[v_t|b_t=-1]) \\
\end{aligned} E [ θ T ] = E [ T T ∑ t = 1 T b t v t ] = E [ T T ∑ t ∣ b t = 1 v t − ∑ t ∣ b t = − 1 v t ] = E [ T ( T ∑ t ∣ b t = 1 v t − T ∑ t ∣ b t = − 1 v t )] = E [ T ( P ( b t = 1 ) E [ v t ∣ b t = 1 ] − P ( b t = − 1 ) E [ v t ∣ b t = − 1 ])] = E [ T ] ( P ( b t = 1 ) E [ v t ∣ b t = 1 ] − P ( b t = − 1 ) E [ v t ∣ b t = − 1 ])
ここで、簡略化のためにv + = P ( b t = 1 ) E [ v t ∣ b t = 1 ] v^+=P(b_t=1)E[v_t|b_t=1] v + = P ( b t = 1 ) E [ v t ∣ b t = 1 ] とし,
v − = P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] v^-=P(b_t=-1)E[v_t|b_t=-1] v − = P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] とすると
E [ θ T ] = E [ T ] ( v + − v − ) \mathbb{E}[\theta_T] = \mathbb{E}[T](v^+ - v^-) E [ θ T ] = E [ T ] ( v + − v − )
のように簡略化して表すことができる。
そして、tick-barと同様に以下に考えられる。
T ∗ = arg min T { ∣ θ T ∣ ≥ ∣ E [ T ] ( v + − v − ) ∣ } T^* = \arg\min_T\set{|\theta_T|\geq|\mathbb{E}[T](v^+ - v^-)|} T ∗ = arg T min { ∣ θ T ∣ ≥ ∣ E [ T ] ( v + − v − ) ∣ }
Tick Run bar
tick-imbalance-bar, volume/dollar-imbalance-barはtickの情報を使って注文の不均衡を捉える方法である。
ところで、大口トレーダーは注文版を一気に一掃したり、親注文を複数の子注文に分割して取引することがある。
このような注文は{ b t } t = 1 , … , T \set{b_t}_ {t=1,\ldots, T} { b t } t = 1 , … , T に同じ値の繰り返しという形で痕跡を残す。
前まではimbalanceを使っていたが、ここではその痕跡をrunと呼ぶ。
これを利用できないだろうか。例えば、
出来高全体のうち買い , 売り のみの連続性を監視し、その累積が既定値を超えていたらサンプリングするという方法である。
θ T = max { ∑ t ∣ b t = 1 b t , − ∑ t ∣ b t = − 1 b t } \theta_T = \max\big\set{\sum_{t|b_t=1} b_t,\ -\sum_{t|b_t=-1}b_t} θ T = max { t ∣ b t = 1 ∑ b t , − t ∣ b t = − 1 ∑ b t }
次に、これまでと同じようにimbalanceの期待値を
E [ θ T ] = E [ T ] max { P ( b t = 1 ) , P ( b t = − 1 ) } \mathbb{E}[\theta_T] = \mathbb{E}[T]\max\set{P(b_t=1),\ P(b_t=-1)} E [ θ T ] = E [ T ] max { P ( b t = 1 ) , P ( b t = − 1 ) }
とする。
これにより、barのサイズを決定することができる。
T ∗ = arg min T { ∣ θ T ∣ ≥ ∣ E [ T ] max { P ( b t = 1 ) , P ( b t = − 1 ) } ∣ } T^* = \arg\min_T\set{|\theta_T|\geq|\mathbb{E}[T]\max\set{P(b_t=1),\ P(b_t=-1)}
|} T ∗ = arg T min { ∣ θ T ∣ ≥ ∣ E [ T ] max { P ( b t = 1 ) , P ( b t = − 1 ) } ∣ }
ここで、θ T \theta_T θ T が期待値よりも大きい期待値が出たらサンプリングするという方法である。
このrunの定義では買いと売りの最長連続系列のみを測定し、売りと買いの打ち消しなしでカウントする。
Volume/Dollar Run bar
volume-run-bar, dollar-run-barはtick-run-barと同様の考えを出来高や売買代金に対して適応したものである。
runは以下のように定義できる。
θ T = max { ∑ t ∣ b t = 1 b t v t , − ∑ t ∣ b t = − 1 b t v t } \theta_T = \max\big\set{\sum_{t|b_t=1} b_tv_t,\ -\sum_{t|b_t=-1}b_tv_t} θ T = max { t ∣ b t = 1 ∑ b t v t , − t ∣ b t = − 1 ∑ b t v t }
そして、期待値は
E [ θ T ] = E [ T ] max { P ( b t = 1 ) E [ v t ∣ b t = 1 ] , P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] } \mathbb{E}[\theta_T] = \mathbb{E}[T]\max\set{P(b_t=1)\mathbb{E}[v_t|b_t=1],\ P(b_t=-1)\mathbb{E}[v_t|b_t=-1]} E [ θ T ] = E [ T ] max { P ( b t = 1 ) E [ v t ∣ b t = 1 ] , P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] }
そして、runによるbarのサイズは
T ∗ = arg min T { ∣ θ T ∣ ≥ ∣ E [ T ] max { P ( b t = 1 ) E [ v t ∣ b t = 1 ] , P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] } ∣ } T^* = \arg\min_T\set{|\theta_T|\geq| \\
\mathbb{E}[T]\max\set{P(b_t=1)\mathbb{E}[v_t|b_t=1],\ P(b_t=-1)\mathbb{E}[v_t|b_t=-1]}
|} T ∗ = arg T min { ∣ θ T ∣ ≥ ∣ E [ T ] max { P ( b t = 1 ) E [ v t ∣ b t = 1 ] , P ( b t = − 1 ) E [ v t ∣ b t = − 1 ] } ∣ }
となる。
ETFトリック
先物スプレッド(spread of futures)を売買する戦略を発展させるとしよう。ここで、いくつか厄介な点が発生する。
スプレッドは時間経過とともに変化する重みのベクトル(tuple)によって特徴づけられる。すると、価格が変化しなくても、スプレッド自体が収束する可能性がある。結果、その系列を取引するモデルはPnLがそのウェイトによって生じたものであると誤解することになる。
スプレッド自体が負の値をとることになる。たいていのモデルは負の入力を想定していない。
取引時間は全ての構成銘柄で正確に一致しているわけではない、スプレッドは常に公表された最後の水準で取引可能であるとは限らず(bitaskspreadのリスクあり)、遅延リスクもゼロではない。
この回避策として、ETFトリックがある。
ETFトリックとは1ドルをスプレッドに投資し、その価値を反映するような時系列{ K t } \set{K_t} { K t } を作成することである。
言ってしまえば、ETFトリックとは複数の商品データセットを単一のデータセットに変換して、トータルリターンETFのように扱う方法である。
このテクニックは複雑で異なる構成要素を持つ時系列であっても、常に現金のような(有効期限のないキャッシュインストゥルメントのような)商品だけを取引しているとコードが過程できるようにすることができる。
その時系列{ K t } \set{K_t} { K t } の変化はPnLの変化を反映し、時系列は厳密に正(株の損益なので最小でも0 0 0 )となり、執行コストを考慮したものである。
この系列はあたかもETFのようにモデル化、シグナル生成、取引に使用される。
前セクションで述べたのように、様々な方法で得られたbarの履歴が与えられたとする。なお、このb a r bar ba r ではb a r 1 , b a r 2 , … , b a r T bar_1, bar_2,\ldots, bar_T ba r 1 , ba r 2 , … , ba r T のようにbarの系列が与えられているとする。ここでT T T はbarの数であり、barのサイズではない。
o i , t o_{i,t} o i , t はbart = 1 , … , T t=1,\ldots,T t = 1 , … , T におけるopen時の商品i = 1 , … , I i=1,\ldots,I i = 1 , … , I の価格を示す。取引開始時点の価格で、そのbarの価格動向の基準点として機能する。
p i , t p_{i,t} p i , t はbart = 1 , … , T t=1,\ldots,T t = 1 , … , T におけるclose時の商品i = 1 , … , I i=1,\ldots,I i = 1 , … , I の源系列である。取引終了時の価格で、そのbarの市場の最終的な評価を示す。
φ i , t \varphi_{i,t} φ i , t はbart = 1 , … , T t=1,\ldots,T t = 1 , … , T における商品i i i への資金の流入または流出を表す。これには購入、売却、リバランスのための資金移動が含まれる。
v i , t v_{i,t} v i , t はbart = 1 , … , T t=1,\ldots,T t = 1 , … , T における商品i = 1 , … , I i=1,\ldots,I i = 1 , … , I の出来高である。
なお、全ての商品i = 1 , … , I i=1,\ldots, I i = 1 , … , I はbart = 1 , … , T t=1,\ldots,T t = 1 , … , T で取引可能であるとする。
取引可能というのは、言い換えれば、いくつかの商品が[ t − 1 , t ] [t-1, t] [ t − 1 , t ] の間で取引が不可能であったとしてもピンポイントの点t , t − 1 t, t-1 t , t − 1 では取引可能であるとする。
$1を投資した際の時系列{ K t } \set{K_t} { K t } をbarB ⊂ { 1 , … , T } B\sub \set{1,\ldots, T} B ⊂ { 1 , … , T } においてアロケーションベクトルω t \omega_t ω t でリバランス(重み付けられること)によって特徴付けられる先物バスケットに対して以下のように定義する。
K t = K t − 1 + ∑ i = 1 I h i , t − 1 φ i , t δ i , t h i , t = { ω i , t K t o i , t + 1 φ i , t ∑ i = 1 I ∣ ω i , t ∣ if t ∈ B h i , t − 1 otherwise δ i , t = { p i , t − o i , t if t − 1 ∈ B Δ p i , t otherwise \begin{aligned}
K_t &= K_{t-1} + \sum_{i=1}^I h_{i,t-1}\varphi_{i,t}\delta_{i,t} \\
h_{i,t} &=
\begin{cases}
\frac{\omega_{i,t}K_t}{o_{i,t+1}\varphi_{i,t}\sum_{i=1}^I|\omega_{i,t}|} & \text{if}\ t \in B \\
h_{i,t-1} & \text{otherwise}
\end{cases} \\
\delta_{i,t} &=
\begin{cases}
p_{i,t}-o_{i,t} & \text{if}\ t-1 \in B \\
\Delta p_{i,t} & \text{otherwise}
\end{cases} \\
\end{aligned} K t h i , t δ i , t = K t − 1 + i = 1 ∑ I h i , t − 1 φ i , t δ i , t = { o i , t + 1 φ i , t ∑ i = 1 I ∣ ω i , t ∣ ω i , t K t h i , t − 1 if t ∈ B otherwise = { p i , t − o i , t Δ p i , t if t − 1 ∈ B otherwise
ここで、投資価値(AUM)の初期値をK 0 = 1 K_0=1 K 0 = 1 とする。
h i , t h_{i,t} h i , t は時点t t t での資産i i i の保有量である。ETFトリックを使用する際、異なる資産間でバランスをとるために各資産の保有量を調整する必要がある。ここで、ω i , t \omega_{i,t} ω i , t は時点t t t での資産i i i のウェイトを表すが、これは戦略に基づいて資産に割り当てられrう相対的な重要度や比率を表す。h i , t h_{i,t} h i , t にはω i , t / ( ∑ i = 1 I ∣ ω i , t ∣ ) \omega_{i,t}/(\sum_{i=1}^I|\omega_{i,t}|) ω i , t / ( ∑ i = 1 I ∣ ω i , t ∣ ) が含まれており、全資産のウェイトの合計が1になるように正規化されており、レバレッジが特定のレベルに制限されている場合に重要である。これにより、たとえば、ある資産のパフォーマンスが良いために市場価値が上昇し、ポートフォリオ内で過大評価されるリスクを防ぐために他の資産とのバランスを取る必要がある。正規化により、各資産への投資比率を戦略に基づいて適切に調整し、リスク分散を図ることができる。
δ i , t \delta_{i,t} δ i , t は時点t t t での資産i i i の価格変動を表す。この値は資産価格の変動に基づいて、戦略のPnLを計算するために使われる。
K t K_t K t これは全体の資本またはポートフォリオの合計値を表す。この値は時点t t t での全資産の総価値を表し、ポートフォリオのパフォーマンスを評価するために用いられる。
さて、この式の意味がわからないかもしれないが、
K t = K t − 1 + ∑ i = 1 I t 期での合計損益 = K t − 1 + ∑ i = 1 I { t − 1 期での株数 } × { 各株からの利益率 } = K t − 1 + ∑ i = 1 I { t − 1 期での株数 } × { 為替レート } × { 株の価格変動 } \begin{aligned}
K_t &= K_{t-1} + \sum_{i=1}^I t\text{期での合計損益} \\
&= K_{t-1} + \sum_{i=1}^I \{t-1\text{期での株数}\}\times \{\text{各株からの利益率}\} \\
&= K_{t-1} + \sum_{i=1}^I \{t-1\text{期での株数}\} \\
&\times \{\text{為替レート}\} \times \{\text{株の価格変動}\}\\
\end{aligned} K t = K t − 1 + i = 1 ∑ I t 期での合計損益 = K t − 1 + i = 1 ∑ I { t − 1 期での株数 } × { 各株からの利益率 } = K t − 1 + i = 1 ∑ I { t − 1 期での株数 } × { 為替レート } × { 株の価格変動 }
PCAによるウェイト
自分がどれだけのリスク(標準偏差)σ \sigma σ を許容するか、どのようなリスク分布R = { R i } i = 1 , … , I R=\set{R_i}_ {i=1,\ldots,I} R = { R i } i = 1 , … , I を望むかによって、各証券に割り当てるウェイト{ ω i } i = 1 , … , I \set{\omega_i}_ {i=1,\ldots,I} { ω i } i = 1 , … , I を逐次的に変更することができる。そこで、I I I 種類の証券の分散共分散行列をV V V とし、市場から得られる分散共分散行列V V V と自身が望むリスク分布R R R とリスクσ \sigma σ から、各証券に割り当てるウェイトω \omega ω の関係を調べる。
なお、この分散共分散行列V V V はiidガウス過程により生成されたものとする。
Vを固有値分解し, Λ = W T V W \Lambda = W^{T}VW Λ = W T VW とする。なお、Λ \Lambda Λ の対角成分は降順に並べられるものとする。
この場合のポートフォリとのリスクは
σ 2 = ω T V ω = ω T W T Λ W ω = β T Λ β = ∑ i = 1 I λ i β i 2 \begin{aligned}
\sigma^2 &= \omega^{T}V\omega = \omega^{T}W^{T}\Lambda W\omega \\
&=\beta^{T}\Lambda\beta = \sum_{i=1}^I\lambda_i\beta_i^2
\end{aligned} σ 2 = ω T Vω = ω T W T Λ Wω = β T Λ β = i = 1 ∑ I λ i β i 2
となる。
ここで、β = W ω \beta = W\omega β = Wω とする。
また、i i i 番目の証券のリスク寄与率は
R i = λ i β i 2 ∑ i = 1 I λ i β i 2 = λ i β i 2 σ 2 R_i = \frac{\lambda_i\beta_i^2}{\sum_{i=1}^I\lambda_i\beta_i^2} = \frac{\lambda_i\beta_i^2}{\sigma^2} R i = ∑ i = 1 I λ i β i 2 λ i β i 2 = σ 2 λ i β i 2
のようにして表現される。
またR = { R i } R = \set{R_i} R = { R i } とし
R 1 = 1 R\bm{1} = 1 R 1 = 1
となることに注意する。
さて、
β i 2 = R i σ 2 λ i β i = R i σ 2 λ i \begin{aligned}
{\beta_i}^2 &= \frac{R_i\sigma^2}{\lambda_i} \\
\beta_i &= \sqrt{\frac{R_i\sigma^2}{\lambda_i}}
\end{aligned} β i 2 β i = λ i R i σ 2 = λ i R i σ 2
となる。
よって、β = { β i } \beta = \set{\beta_i} β = { β i } であり、β = W ω \beta = W\omega β = Wω から
ω = W − 1 β = W T β \begin{aligned}
\omega &= W^{-1}\beta \\
&= W^T\beta \\
\end{aligned} ω = W − 1 β = W T β
となる。
ここで、ウェイトはリスク分散によらずリスクと比例の関係であることがわかる。
特徴量サンプリング
データをtime, ticksやvolume, dollarなどにサンプリングすることは前回に行った。
それらは全て良い統計的特徴をもたらす時系列データを取得するためであり、機械学習の学習時の入力として扱うためにはデータの量が多い。
サンプリングで最も簡単な方法は一定の間隔でサンプリングする方法である。
しかし、以下ではイベントベースのサンプリング方法について説明する。
使い方としては、イベントベースでサンプリングした点からbarの採取を行う。
CUSUMフィルタ
CUSUMフィルタは測定した値の平均値が目標値からどれだけ離れているかを検知するためのフィルタである。(異常検知に使える?)
これもimbalanceと同じような考えで、ある累積値を超えたらサンプリングするという方法である。
累積値を
S t = max { 0 , S t − 1 + y t − μ } μ = E t − 1 [ y t ] \begin{aligned}
S_t &= \max\set{0, S_{t-1} + y_t - \mu} \\
\mu &= \mathbb{E}_ {t-1}[y_t]
\end{aligned} S t μ = max { 0 , S t − 1 + y t − μ } = E t − 1 [ y t ]
この累積値が適当な閾値h h h を超えたらサンプリングするという方法である。
また、これは上昇方向、つまりy t y_t y t が上がり調子の場合を検知するが、下がり調子、下落方向を検知する方法もある。
S t + = max { 0 , S t − 1 + + y t − μ } S t − = min { 0 , S t − 1 − + y t − μ } S 0 + = S 0 − = 0 μ = E t − 1 [ y t ] S t = max { S t + , S t − } \begin{aligned}
S_ t^+ &= \max\set{0, S^+_ {t-1} + y_t - \mu} \\
S_ t^- &= \min\set{0, S^-_ {t-1} + y_t - \mu} \\
S_0^+ &= S_0^- = 0 \\
\mu &= \mathbb{E}_ {t-1}[y_t] \\
S_t &= \max\set{S_t^+, S_t^-}
\end{aligned} S t + S t − S 0 + μ S t = max { 0 , S t − 1 + + y t − μ } = min { 0 , S t − 1 − + y t − μ } = S 0 − = 0 = E t − 1 [ y t ] = max { S t + , S t − }
やってることはCUSUMと同じである。これを対象CUSUMと呼ぶ。