仮想通貨のストラテジー構築と相関分析

皆さま、こんにちは。クリプトトレーダーです。本日のテーマは「仮想通貨のストラテジー構築と相関分析」です。仮想通貨のストラテジー構築については、やはりマーケットメーキング戦略と大量保有リストを使ったものが軸になり得るのではないかなという気がしています。

この二つのストラテジーについては今後、時間をたっぷり割いて質の良いものに仕上げますので乞うご期待ください。伝統的な定量分析手法である相関分析も大事・・だと思いますので今回は相関分析を中心に展開いたします。

専業システムトレーダーKKさんのツイッターによると、ビットコインbot運用18日目で950円が54万円になったというリターン500倍の話がありました。人気のある話はこんな話ですよね。これはマーケットメーキング戦略の話ですが、残念ながら私自身はどのようなストラテジーなのか見当もつきません。こちらも何か気付けば展開いたしますのでよろしくお願いします。

BTCJPYのデータを取得

BTCJPYの相関分析を取り上げます。まずはBTCJPYのデータ取得を目指します。CryptoCompareでBTCBOX 、QUOINE、bitFlyer、Coincheck、Zaifのデータを取得してみます。日足ベースに整理して、期間は50本分のローソク足です。

[code lang=”js”] import requests
import datetime
import pandas as pd

def daily_price_historical(symbol, comparison_symbol, limit=50, aggregate=1, exchange=”, allData=’true’):
url = ‘https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}&allData=false’\
.format(symbol.upper(), comparison_symbol.upper(), limit, aggregate, allData)
if exchange:
url += ‘&e={}’.format(exchange)
page = requests.get(url)
data = page.json()[‘Data’]

df = pd.DataFrame(data)
df[‘timestamp’] = [datetime.datetime.fromtimestamp(d) for d in df.time] return df

exch_name= ["zaif", "coincheck","bitflyer", "quoine","btcbox"] col = ["timestamp", "close"] df0 = daily_price_historical(‘BTC’,’JPY’,exchange=exch_name[0])
df0=df0[col] df0 = df0.rename(columns={‘close’: exch_name[0]})

for i in range(1,len(exch_name)) :
df1 = daily_price_historical(‘BTC’,’JPY’,exchange=exch_name[i])
df1=df1[col] df1 = df1.rename(columns={‘close’: exch_name[i]})
df0= pd.merge(df1, df0, on=’timestamp’)

print(df0)
[/code]

BTCJPYのデータで相関分析

取得できたデータについて、相関分析をしてみます。Pythonには便利な関数が組み込まれています。各交換所の相関係数を出力し、ヒートマップで表現してみました。

[code lang=”js”] import seaborn as sns
import matplotlib.pyplot as plt

df_corr = df0.corr()
print(df_corr)
colormap = plt.cm.RdBu
sns.heatmap(df_corr,linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor=’white’, annot=True)
[/code]

BTCJPYの相関分析をしてもストラテジー構築にあまり役に立たないかもしれません。仮想通貨交換所間のアービトラージ戦略のアイデア構築材料にはなるかもしれませんが、それであるならば、価格乖離の分析をしたほうが直接的だと考えます。

次は、アルトコインの相関分析をするために同じようなステップを紹介したいと思います。

アルトコインのデータを取得

アルトコインのデータを取得します。交換所に依存しない総合的なアルトコイン指数の数字を使ってみました。CryptoCompareでBTC、ETH、BCH、LTC、XRP、LSK、DASH、IOT、XEMのデータを取得してみます。日足ベースに整理して、期間は50本分のローソク足です。
[code lang=”js”] import requests
import datetime
import pandas as pd

def daily_price_historical(symbol, comparison_symbol, limit=50, aggregate=1, exchange=”, allData=’true’):
url = ‘https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}&allData=false’\
.format(symbol.upper(), comparison_symbol.upper(), limit, aggregate, allData)
if exchange:
url += ‘&e={}’.format(exchange)
page = requests.get(url)
data = page.json()[‘Data’]

df = pd.DataFrame(data)
df[‘timestamp’] = [datetime.datetime.fromtimestamp(d) for d in df.time] return df

fsym= ["BTC","ETH","BCH","LTC","XRP","LSK","DASH","IOT","XEM"] col = ["timestamp", "close"] df0 = daily_price_historical(fsym[0],’USD’,exchange=’CCCAGG’)
df0=df0[col] df0 = df0.rename(columns={‘close’: fsym[0]})

for i in range(1,len(fsym)) :
df1 = daily_price_historical(fsym[i],’USD’,exchange=’CCCAGG’)
df1=df1[col] df1 = df1.rename(columns={‘close’: fsym[i]})
df0= pd.merge(df1, df0, on=’timestamp’)

print(df0)
[/code]

アルトコインのデータで相関分析

取得できたデータについて、相関分析をしてみます。

[code lang=”js”] import seaborn as sns
import matplotlib.pyplot as plt

df_corr = df0.corr()
print(df_corr)
colormap = plt.cm.RdBu
sns.heatmap(df_corr,linewidths=0.1,vmax=1.0, square=False, cmap=colormap, linecolor=’white’, annot=True)
[/code]

BTCJPYとはひと味違った結果が得られました。日足ベースなので、Buy&Hold戦略のボラティリティ減少にも役立たせることができると思います。短期売買戦略であれば、相関の小さい仮想通貨ペアの分析をしてみるのもよいかもしれません。BTCJPYの相関分析と違い、アルトコインの相関分析はアイデア構築の拡がりが期待できそうです。

XRPが飛びぬけて相関が低いですね。直近の急騰が関係しているのかもしれません。

まとめ

BTCJPYとアルトコインの相関分析を試みました。定量分析は、実際に売買を行ううえでのベースとなる作業です。

もちろん、本記事で紹介したアイデアを使って自動売買環境を作ってみるのもいいですが、やはり自分で分析して納得するというプロセスが売買を継続する上で大事だと思います。

この記事をヒントにぜひ自分なりの分析をしてみて下さい。それではよい一日を!

ABOUTこの記事をかいた人

農耕型・堅実派のアルゴリズムトレーダー。夢はヘッジファンドを自動で運用することです。簡単なプログラミングからパソコンの組み立てまで全て一人でできるバランス感覚の持ち主です。 DeFi(分散金融)をわかりやすくお伝えすべく「クリプト訪ねて三千里」に挑戦しています。