情報係数と投資指標
イントロ
情報係数(Information Coefficient)や決定係数を参考として暗号資産トレードの投資指標の選考を行っている記事が散見されます(主にnoteでの著者の皆さま)。同じようにしてJupyter Notebookを使用した散布図の描画し、その結果から投資指標を選択してみました。試験的にこの投資指標を暗号資産のトレードに適用してみた結果を考察します(概ね既知の内容です、 IC を計算しているJupyter Notebookはそのまま流用できます)。
まずbitbank.cc APIから得られる分足のOHLCVデータから1分後のリターンに対する投資指標の相関を計算して、情報係数(Information Coefficient) 0.382 を得ました(投資指標については後述)。情報係数については『シストレのススメ 3.5.投資指標の探索要領』やこちらの記事で解説されていますが、厳密には予測したリターンと実際のリターンの相関を見ることのようです。予測されたリターンは投資指標から導かれると限定すれば相関値自体に違いは出ないものと考えられます(と前提させてください)。[1]
The information coefficient describes the correlation between predicted and actual stock returns, sometimes used to measure the contribution of a financial analyst.
散布図は他の方が行ってることと同様に投資指標をスコアとして標準化した数値を横軸、実際のリターンを縦軸としてプロットしてみました。
Jupyter Notebookでの具体的な描画のコードはgithubに上げてあります。見づらいのですが、赤線が単回帰でリターンとスコアを表現した線、紫線がリターンの区間平均値です。このデータは1日分の分足のみで計算しているので、1440点です(散布図は指標の計算の都合上で1435点になっています)。1日は1440分です。比較的綺麗に相関が確認できたのでこの投資指標を取り上げています。
さて単回帰の式からはスコアが1変化するごとに316.489円の変化があることが分かります。しかしスコアがプラスであればロング、マイナスであればショートという戦略は少々短絡的で、リターンやスコアの分布を確認した上でトレード方式を考えたほうが良さそうです。どちらの形状も正規分布ではありません。
ここで2次元正規分布の形状を確認してみます。以下は、スコアの平均が2、リターンの平均が5で共分散をそれぞれ0.05とした2次元の正規分布のコードです。グラフ上でスコアは標準化されています。スコアは標準化されているため正規分布の特性から-1/1はそのまま-1シグマ/1シグマの区間に相当し、その区間内に落ちる確率は0.6827(68%)と計算できます。
先の投資指標ではどうでしょうか。以下は各統計量を describe
で求めた結果です。またscipyで歪度(skewness)と尖度(Kurtosis)も計算してみました。歪度は0に近く非対称性はあまり見られないことが分かります。従って投資指標のロング側、ショート側への指示は偏りなく均等に行っても良さそうです(若干右の裾が長いですが)。尖度は-0.99でした。これは正規分布に比べ非常に丸く鈍い形をしていることを表しています。
count 1435.000000
mean 47.514687
std 165.752269
min -296.194968
25% -89.961576
50% 44.072640
75% 181.645785
max 397.621407
dtype: float64
今回使用した投資指標のグラフの再掲です。散布図を見るとスコア+1以上ではリターンがマイナスである点が少なく、スコア-1以下では同様にリターンがプラスである点が少なく見えます。スコアが+2以上もしくは-2以下では分単位で4000円以上の値動きがある点も散布図上に確認できます。トレードはスコアの+1以上か-1以下が出現した場合に、売買を行いその1分後に精算するというシンプルな戦略を採用してみました。
スコアは標準化されているため実際の計算では、投資指標を標準化して考えるかスコア-1から1を投資指標の値へ計算し戻して考えます。例えばスコア1は投資指標では1*165.752269+47.514687=213.266956、スコア-1は-1*165.752269+47.514687=-118.237582となります。統計量の値と比べると213.266956は75%点よりも大きく、-118.237582は25%点よりも小さいことも分かります。
ちなみに今計算している指標は分足から計算した1分後のリターンをy軸としているため、シグナルが現れた際にロング・ショートを差し込んで1分後に精算すれば期待するリターンが得られるはずという予測にたっています。どのようなデータからどのように指標を計算し、どの時点でのリターンを描画しているのかを理解した上でトレードロジックに落とし込んでいく必要があるでしょう。
トレードしてみた
5/7に実際このトレード戦略によるトレードを実施してみました。トレードはスコアの+1以上か-1以下が出現した場合に、0.05 BTCの売買を行いその1分後に精算するという戦略です。ロジックを走らせて1時間ほどでマイナスが出てきたためプログラムを停止しました。bitbank.ccの取引履歴をcsvでダウンロードして、pandasで加工したデータが以下の表です(1時間の中から動きの分かりやすい5分間を切り取っています)。この5分間でTotalは196.9660円のプラスとなっています。Tradeは支払った金額、もしくは受け取った金額でTTradeはテイカー・メイカー手数料を含め支払った金額、もしくは受け取った金額です。TotalはTradeの累計和、TTotalはTTradeの累計和です。Tradeを平均的な5分間での投資損益とするとTotalは24時間で56,726円です。実際の損益はTTradeなのでTTotalの値は5分で-396.5838円、24時間換算では-114,216円になります。
このTTradeにあたるマイナス分が膨らんできたためにトレードは停止しました。次にこの結果の考察を行いますが、パッと見ただけでテイカー手数料にあたるFeeが利益を殺していることと、売り買いした後の値が投資指標とリターンの関係で見たほど大きくないことが分かると思います。投資指標とリターンの関係とは赤色の線で示した単回帰式のことでスコアが1変化するごとに316.489円のリターンが発生することでした。次の考察ではどの要素が計算との乖離を生んでいるのか考えた内容を記載しています。
bitbank.ccの取引履歴のcsvファイルからこのデータフレームを作成するコードを貼っておきます。ファイルはダウンロード時に trade_history_<date>.csv
という名前で与えられます。
結論は特にないのですがこの取引における問題を3つほど列挙してみました。1) メイカー/テイカー手数料、2) 分析データと実取引の乖離、3) タイムスタンプや取引のずれの3つです。
メイカー/テイカー手数料
利益を圧迫していたテイカー手数料についてです。bitbank.ccの手数料は以下に記載されています。今回の取引ロジックでは仲値から少しずらして発注しているものの、ほとんどがテイカー取引となっており売り買いを単位として2回のテイカー手数料を支払っています。仮に1 BTCが1,000,000円のとき、1 BTC辺りのテイカー手数料は1,200円(1,000,000円の0.12%)が2回で2,400円になってしまいます。この手数料はスコアが+1以上か-1以下で取引した際のリターンである316.489円を大きく超えてしまっています。高頻度に取引を行い、利幅が取引ごとに小さい場合には、テイカーではなくメイカー取引を行っていく必要があると考えられます。[2]
対応として相関の高い投資指標を選択し、その方向へメイカー注文を建てるという戦略が実行できます。高頻度取引のロジック内で行う方向性検出に対して、リターンに相関の高い投資指標は有効であると考えられるでしょう。[3]
分析データと実取引の乖離
この相関図では分足のOHLCVデータを使用して計算を行いました。この投資指標は分足のデータとその終値におけるリターンの関係となっています。実際の取引で計算される投資指標はティッカー情報から得られる毎分のものですが、発注して約定する価格というのは終値ではなくあくまで市場の需給に基づいた実価格であって、終値で約定できるわけではありません。取引の表を見て頂ければわかりますが、0.05 BTCの取引に対しても複数の価格で約定しており、この単回帰の結果と実取引における投資指標とリターンの関係には乖離が存在しています。板の情報や歩値をデータとして合わせて取得しておくとより現実的な相関が計算できるかもしれません。
タイムスタンプや取引のずれ
APIで提供されるOHLCVデータはどのタイミングで取得されたデータかが分かりません。データが取得された時間と記録された時間に差がある可能性が存在します。タイムスタンプの値がデータベースへデータが記録された時間だと考えると、記録されるデータが取得された時間とOHLCVデータのタイムスタンプの時間にはずれが発生しているはずです。取引ロジックをOHLCVデータのタイムスタンプの周期に合わせたとしても(毎分の取引の刻み方をタイムスタンプと一致させる)、そのタイムスタンプは本来取引したかった時刻ではない可能性があります。さらにこの時間のずれに合わせて、取引ロジックの注文が板へ乗って約定するまでの時間にも多少のタイムラグの発生が確認できます。
高頻度な取引の場合、マーケット・メイクを行う要素を取り入れないと大きな利益を生むことは難しいという印象です。買って売る、売って買う場合には往復の手数料がかかるので取り上げた問題のうちで手数料が最も利幅への影響が大きいと考えられます。