
ビットコインの価格はどうなっているのでしょうか?暗号通貨の価格が急騰したり急落したりする原因は何ですか?さまざまなアルトコインの市場価格は密接に関連しているのでしょうか、それとも大部分は独立しているのでしょうか?次に何が起こるかをどのように予測するのでしょうか?
ビットコインやイーサリアムなどのデジタル通貨に関する記事には、現在、憶測が溢れており、何百人もの自称専門家が、今後出現すると予想されるトレンドを主張している。これらの分析の多くに欠けているのは、基礎となるデータと統計モデルの強固な基盤です。
この記事の目的は、Python を使用した暗号通貨分析の簡単な紹介を提供することです。さまざまな暗号通貨のデータを取得、分析、視覚化するための簡単な Python スクリプトについて説明します。その過程で、私たちはこれらの不安定な市場の動きとその発展の興味深い傾向を発見するでしょう。

これは暗号通貨を説明する記事ではなく、また、特定の通貨が上昇し、どの通貨が下落するかについての意見記事でもありません。代わりに、このチュートリアルでは、生のデータを取得して、数字に隠されたストーリーを発見することに焦点を当てます。
このチュートリアルは、あらゆるスキル レベルの愛好家、エンジニア、データ サイエンティスト向けに設計されています。業界の専門家でもプログラミング初心者でも、必要なスキルは Python プログラミング言語の基本的な理解と、コマンド ライン操作に関する十分な知識だけです。 (データ サイエンス プロジェクトを設定できれば十分です)。
Inventor Quantitative Platform FMZ.COM は、主要な主流取引所からの高品質なデータ ソースを提供するだけでなく、データ分析の完了後に自動トランザクションを実行するのに役立つ豊富な API インターフェイスも提供します。このインターフェースセットには、アカウント情報の照会、高値、始値、安値、終値、取引量、さまざまな主流の取引所で一般的に使用されるさまざまなテクニカル分析指標の照会など、特に実際の主要な主流の取引所に接続するための実用的なツールが含まれています。取引プロセス。パブリック API インターフェースは強力な技術サポートを提供します。
上記の機能はすべて、Docker に似たシステムにカプセル化されています。必要なのは、独自のクラウド コンピューティング サービスを購入またはレンタルし、Docker システムを展開することだけです。
Inventor Quantitative Platform の正式名称では、この Docker システムはホスト システムと呼ばれます。
ホストとロボットの展開方法の詳細については、以前の記事を参照してください: https://www.fmz.com/bbs-topic/4140
独自のクラウド コンピューティング サーバー展開ホストを購入したい読者は、この記事を参照してください: https://www.fmz.com/bbs-topic/2848
クラウドコンピューティングサービスとホストシステムを正常に展開したら、最も強力なPythonツールであるAnacondaをインストールします。
この記事で必要なすべての関連プログラム環境 (依存ライブラリ、バージョン管理など) を実現するには、Anaconda を使用するのが最も簡単な方法です。これは、パッケージ化された Python データ サイエンス エコシステムおよび依存関係マネージャーです。
クラウド サービスに Anaconda をインストールするため、クラウド サーバーに Linux システムと Anaconda のコマンド ライン バージョンをインストールすることをお勧めします。
Anacondaのインストール方法については、Anacondaの公式ガイドを参照してください:https://www.anaconda.com/distribution/
経験豊富な Python プログラマーであり、Anaconda を使用する必要性を感じていない場合でも、まったく問題ありません。必要な依存関係のインストールについてはサポートは必要ないと想定し、パート 2 に進んでください。
Anaconda をインストールしたら、依存パッケージを管理するための新しい環境を作成する必要があります。 Linux コマンドライン インターフェイスでは、次のように入力します。
conda create --name cryptocurrency-analysis python=3
プロジェクト用に新しい Anaconda 環境を作成しましょう。
次に、
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
この環境を活性化するには
次に、以下を入力します。
conda install numpy pandas nb_conda jupyter plotly
このプロジェクトに必要なさまざまな依存パッケージをインストールします。
注: Anaconda 環境を使用する理由は何ですか?コンピューター上で多数の Python プロジェクトを実行する予定の場合は、競合を避けるために、異なるプロジェクトの依存関係 (ライブラリとパッケージ) を分離すると役立ちます。 Ananconda は、すべてのパッケージを適切に管理および区別できるように、各プロジェクトの依存パッケージごとに特別な環境ディレクトリを作成します。
環境と依存パッケージがインストールされたら、以下を実行します。
jupyter notebook
iPython カーネルを起動するには、ブラウザで http://localhost:8888/ にアクセスし、新しい Python ノートブックを作成して、以下を使用していることを確認します。
Python [conda env:cryptocurrency-analysis]
カーネル

新しい空の Jupyter ノートブックを作成し、最初に必要な依存パッケージをインポートする必要があります。
import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime
Plotlyをインポートしてオフラインモードを有効にする必要もあります
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
準備が完了したので、分析するデータの取得を開始できます。まず、Inventor Quantitative Platform の API インターフェースを使用して Bitcoin の価格データを取得する必要があります。
これには GetTicker 関数が使用されます。これら 2 つの関数の使用方法の詳細については、https://www.fmz.com/api を参照してください。
データの取得を容易にするために、Quandl (quandl.com) からデータをダウンロードして同期する関数を記述する必要があります。これは海外で非常によく知られている無料の金融データインターフェースです。 Inventor Quantitative Platform も同様のデータ インターフェイスを提供しており、主にリアルタイム取引に使用されます。この記事は主にデータ分析を目的としているため、ここでは Quandl のデータを使用します。
リアルタイム取引を行う場合、価格データを取得するために Python で GetTicker および GetRecords 関数を直接呼び出すことができます。使用方法については、https://www.fmz.com/api を参照してください。
def get_quandl_data(quandl_id):
# 下载和缓冲来自Quandl的数据列
cache_path = '{}.pkl'.format(quandl_id).replace('/','-')
try:
f = open(cache_path, 'rb')
df = pickle.load(f)
print('Loaded {} from cache'.format(quandl_id))
except (OSError, IOError) as e:
print('Downloading {} from Quandl'.format(quandl_id))
df = quandl.get(quandl_id, returns="pandas")
df.to_pickle(cache_path)
print('Cached {} at {}'.format(quandl_id, cache_path))
return df
ここでは、pickle ライブラリを使用してデータをシリアル化し、ダウンロードしたデータをファイルとして保存します。これにより、プログラムが実行されるたびに同じデータを再ダウンロードする必要がなくなります。この関数は、Pandas Dataframe 形式でデータを返します。データ フレームの概念に慣れていない場合は、強力な Excel スプレッドシートと考えてください。
Kraken ビットコイン取引所を例に、ビットコインの価格を調べることから始めましょう。
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
データフレームの最初の 5 行を表示するには、head() メソッドを使用します。
btc_usd_price_kraken.head()
結果は次のとおりです。
| BTC | Open | High | Low | Close | Volume (BTC) | Volume (Currency) | Weighted Price |
|---|---|---|---|---|---|---|---|
| 2014-01-07 | 874.67040 | 892.06753 | 810.00000 | 810.00000 | 15.622378 | 13151.472844 | 841.835522 |
| 2014-01-08 | 810.00000 | 899.84281 | 788.00000 | 824.98287 | 19.182756 | 16097.329584 | 839.156269 |
| 2014-01-09 | 825.56345 | 870.00000 | 807.42084 | 841.86934 | 8.158335 | 6784.249982 | 831.572913 |
| 2014-01-10 | 839.99000 | 857.34056 | 817.00000 | 857.33056 | 8.024510 | 6780.220188 | 844.938794 |
| 2014-01-11 | 858.20000 | 918.05471 | 857.16554 | 899.84105 | 18.748285 | 16698.566929 | 890.671709 |
次に、視覚化を通じてデータの正確性を確認するための簡単な表を作成する必要があります。
# 做出BTC价格的表格
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])

ここでは、Plotly を使用して視覚化部分を完成させます。 Plotly は、Matplotlib などのより成熟した Python データ視覚化ライブラリを使用するよりもあまり一般的ではありませんが、完全にインタラクティブなチャートを作成するために D3.js を呼び出すことができるため、良い選択肢です。チャートには非常に優れたデフォルト設定があり、簡単に探索でき、Web ページに埋め込むのに非常に便利です。
ヒント: 生成されたチャートを主要な取引所 (OKEX、Binance、Huobi など) のビットコイン価格チャートと比較すると、ダウンロードしたデータがほぼ一貫しているかどうかを簡単に確認できます。
注意深い読者は、上記のデータ、特に 2014 年後半と 2016 年初頭のデータが欠落していることに気付いたかもしれません。このデータのギャップは、Kraken 取引所で特に顕著です。この欠落データが価格分析に影響を与えることは絶対に望んでいません。
デジタル通貨取引所の特徴は、通貨の価格が需要と供給によって決まることです。したがって、いかなる取引価格も市場の「主流価格」になることはできません。この問題、および前述のデータ欠落問題(技術的な停止やデータエラーが原因の可能性あり)に対処するために、世界の 3 大ビットコイン取引所からデータをダウンロードし、ビットコインの平均価格を計算します。
まず、各取引所のデータを辞書型で構成されるデータフレームにダウンロードしてみましょう。
# 下载COINBASE,BITSTAMP和ITBIT的价格数据
exchanges = ['COINBASE','BITSTAMP','ITBIT']
exchange_data = {}
exchange_data['KRAKEN'] = btc_usd_price_kraken
for exchange in exchanges:
exchange_code = 'BCHARTS/{}USD'.format(exchange)
btc_exchange_df = get_quandl_data(exchange_code)
exchange_data[exchange] = btc_exchange_df
次に、各データ フレームの共通列を新しいデータ フレームにマージする特別な関数を定義します。これをmerge_dfs_on_column関数と呼びましょう
def merge_dfs_on_column(dataframes, labels, col):
'''Merge a single column of each dataframe into a new combined dataframe'''
series_dict = {}
for index in range(len(dataframes)):
series_dict[labels[index]] = dataframes[index][col]
return pd.DataFrame(series_dict)
次に、各データセットの「加重価格」列に基づいて、すべてのデータフレームを結合します。
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
最後に、「tail()」メソッドを使用して、結合されたデータの最後の 5 行を表示し、データが正確かつ完全であることを確認します。
btc_usd_datasets.tail()
結果は次のとおりです。
| BTC | BITSTAMP | COINBASE | ITBIT | KRAKEN |
|---|---|---|---|---|
| 2017-08-14 | 4210.154943 | 4213.332106 | 4207.366696 | 4213.257519 |
| 2017-08-15 | 4101.447155 | 4131.606897 | 4127.036871 | 4149.146996 |
| 2017-08-16 | 4193.426713 | 4193.469553 | 4190.104520 | 4187.399662 |
| 2017-08-17 | 4338.694675 | 4334.115210 | 4334.449440 | 4346.508031 |
| 2017-08-18 | 4182.166174 | 4169.555948 | 4175.440768 | 4198.277722 |
上記の表からわかるように、これらのデータは私たちの予想と一致しています。データの範囲はほぼ同じですが、各取引所のレイテンシーや特性によって若干の違いがあります。
分析ロジックの観点から、次のステップは視覚化を通じてこれらのデータを比較することです。これを行うには、まず、1 行のコマンドを指定してデータを使用してチャートを作成するヘルパー関数を定義する必要があります。これを df_scatter 関数と呼びます。
def df_scatter(df, title, seperate_y_axis=False, y_axis_label='', scale='linear', initial_hide=False):
'''Generate a scatter plot of the entire dataframe'''
label_arr = list(df)
series_arr = list(map(lambda col: df[col], label_arr))
layout = go.Layout(
title=title,
legend=dict(orientation="h"),
xaxis=dict(type='date'),
yaxis=dict(
title=y_axis_label,
showticklabels= not seperate_y_axis,
type=scale
)
)
y_axis_config = dict(
overlaying='y',
showticklabels=False,
type=scale )
visibility = 'visible'
if initial_hide:
visibility = 'legendonly'
# 每个系列的表格跟踪
trace_arr = []
for index, series in enumerate(series_arr):
trace = go.Scatter(
x=series.index,
y=series,
name=label_arr[index],
visible=visibility
)
# 为系列添加单独的轴
if seperate_y_axis:
trace['yaxis'] = 'y{}'.format(index + 1)
layout['yaxis{}'.format(index + 1)] = y_axis_config
trace_arr.append(trace)
fig = go.Figure(data=trace_arr, layout=layout)
py.iplot(fig)
理解を容易にするために、この記事ではこの補助機能の論理原理については詳しく説明しません。さらに詳しく知りたい場合は、Pandas と Plotly の公式ドキュメントをご覧ください。
ビットコインの価格データのグラフを簡単に作成できるようになりました。
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

上のグラフからわかるように、4 つのシリーズはほぼ同じ経路をたどっていますが、いくつかの不規則性があり、それを解消するように努めます。
2012年から2017年の期間、ビットコインの価格がゼロになったことは一度もなかったことがわかっているので、まずデータフレーム内のすべてのゼロ値を削除します。
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
データフレームを再構築すると、欠落データのない、より鮮明なグラフが表示されます。
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

これで、すべての取引所におけるビットコインの 1 日あたりの平均価格という新しい列を計算できるようになりました。
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
新しいコラムはビットコイン価格指数です!データに何か問題があるかどうかを確認するために、もう一度プロットしてみましょう。
# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])

問題はなさそうです。今後は、この集計された価格系列データを引き続き使用して、他の暗号通貨と米ドルの為替レートを判断できるようになります。
これまでのところ、ビットコインの価格に関する時系列データがあります。次に、ビットコイン以外のデジタル通貨、つまりアルトコインの状況についてのデータを見てみましょう。もちろん、アルトコインという言葉は少し強すぎるかもしれませんが、現在のデジタル通貨の発展については、時価総額ランキングに加えて上位 10 位のほとんど (ビットコイン、イーサリアム、EOS、USDT など) は、アルトコインと呼ぶことができます。問題ありません。これらの通貨は混乱を招きやすく、欺瞞的であるため、取引時にはこれらの通貨を避けるようにしてください。高い。
まず、Poloniex取引所のAPIを使用して、デジタル通貨取引に関するデータ情報を取得します。アルトコインの関連データを取得するために、2 つの補助関数を定義します。これらの 2 つの関数は主に API を介して JSON データをダウンロードしてキャッシュします。
まず、指定された URL から JSON データをダウンロードしてキャッシュする関数 get_json_data を定義します。
def get_json_data(json_url, cache_path):
'''Download and cache JSON data, return as a dataframe.'''
try:
f = open(cache_path, 'rb')
df = pickle.load(f)
print('Loaded {} from cache'.format(json_url))
except (OSError, IOError) as e:
print('Downloading {}'.format(json_url))
df = pd.read_json(json_url)
df.to_pickle(cache_path)
print('Cached {} at {}'.format(json_url, cache_path))
return df
次に、Poloniex API に HTTP リクエストを送信し、先ほど定義した get_json_data 関数を呼び出して呼び出しの結果を保存する新しい関数を定義します。
base_polo_url = 'https://poloniex.com/public?command=returnChartData¤cyPair={}&start={}&end={}&period={}'
start_date = datetime.strptime('2015-01-01', '%Y-%m-%d') # 从2015年开始获取数据
end_date = datetime.now() # 直到今天
pediod = 86400 # pull daily data (86,400 seconds per day)
def get_crypto_data(poloniex_pair):
'''Retrieve cryptocurrency data from poloniex'''
json_url = base_polo_url.format(poloniex_pair, start_date.timestamp(), end_date.timestamp(), pediod)
data_df = get_json_data(json_url, poloniex_pair)
data_df = data_df.set_index('date')
return data_df
上記の関数は、暗号通貨ペアの文字列コード (「BTC_ETH」など) を抽出し、両方の通貨の履歴価格を含むデータ フレームを返します。
ほとんどのアルトコインは米ドルを使って直接購入することはできません。個人がこれらのデジタル通貨を入手したい場合は、通常、最初にビットコインを購入し、その後、両者の価格比率に基づいてアルトコインに交換する必要があります。したがって、各デジタル通貨のビットコインへの為替レートをダウンロードし、既存のビットコインの価格データを使用して米ドルに変換する必要があります。イーサリアム、ライトコイン、リップル、イーサリアムクラシック、ステラ、ダッシュ、シアコイン、モネロ、NEM の 9 つのトップ暗号通貨の取引データをダウンロードします。
altcoins = ['ETH','LTC','XRP','ETC','STR','DASH','SC','XMR','XEM']
altcoin_data = {}
for altcoin in altcoins:
coinpair = 'BTC_{}'.format(altcoin)
crypto_price_df = get_crypto_data(coinpair)
altcoin_data[altcoin] = crypto_price_df
現在、9 つのデータ フレームを含む辞書が作成済みです。各データ フレームには、アルトコインとビットコイン間の過去の日次平均価格データが含まれています。
イーサリアムの価格表の最後の数行を見ると、データが正しいかどうかがわかります。
altcoin_data['ETH'].tail()
| ETH | Open | High | Low | Close | Volume (BTC) | Volume (Currency) | Weighted Price |
|---|---|---|---|---|---|---|---|
| 2017-08-18 | 0.070510 | 0.071000 | 0.070170 | 0.070887 | 17364.271529 | 1224.762684 | 0.070533 |
| 2017-08-18 | 0.071595 | 0.072096 | 0.070004 | 0.070510 | 26644.018123 | 1893.136154 | 0.071053 |
| 2017-08-18 | 0.071321 | 0.072906 | 0.070482 | 0.071600 | 39655.127825 | 2841.549065 | 0.071657 |
| 2017-08-19 | 0.071447 | 0.071855 | 0.070868 | 0.071321 | 16116.922869 | 1150.361419 | 0.071376 |
| 2017-08-19 | 0.072323 | 0.072550 | 0.071292 | 0.071447 | 14425.571894 | 1039.596030 | 0.072066 |
BTC からアルトコインへの為替レートデータを Bitcoin 価格インデックスと組み合わせて、各アルトコインの過去の価格を USD で直接計算できるようになりました。
# 将USD Price计算为每个altcoin数据帧中的新列
for altcoin in altcoin_data.keys():
altcoin_data[altcoin]['price_usd'] = altcoin_data[altcoin]['weightedAverage'] * btc_usd_datasets['avg_btc_price_usd']
ここでは、各アルトコインに対応する USD 価格を格納するために、データフレームに新しい列を追加します。
次に、先ほど定義した merge_dfs_on_column 関数を再利用して、各暗号通貨の USD 価格を統合したマージされたデータフレームを作成します。
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
終わり!
ここで、マージされたデータフレームの最後の列としてビットコインの価格も追加しましょう。
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
これで、検証している 10 種類の暗号通貨の毎日の USD 価格を含む一意のデータフレームができました。
前の関数 df_scatter を再度呼び出して、すべてのアルトコインの対応する価格をチャートの形式で表示します。

チャートは見栄えがよく、過去数年間に各暗号通貨の取引価格がどのように変化したかを完全に把握できます。
注: ここでは、すべての暗号通貨を同じグラフ上で比較するために、対数の Y 軸を使用しました。さまざまなパラメータ値(scale=‘linear’ など)を試して、さまざまな視点からデータを理解することもできます。
注意深い読者は、デジタル通貨の金銭的価値は大きく異なり、非常に不安定であるにもかかわらず、デジタル通貨の価格は相関しているように見えることに気付いたかもしれません。特に2017年4月の急騰以降は、市場全体の変動と連動して小さな変動も多く発生しているようです。
もちろん、データによって裏付けられた結論は、画像に基づく直感よりも説得力があります。
上記の相関仮説を検証するには、Pandas corr() 関数を使用できます。このテストでは、データ フレームの各列と他のすべての列とのピアソン相関係数を計算します。
2017.8.22 改訂注: このセクションは、相関係数を計算する際に絶対価格ではなく日次リターンを使用するように変更されました。
非実在の時系列(生の価格データなど)に基づいて直接計算すると、相関係数に偏差が生じる可能性があります。この問題の解決策は、pct_change() メソッドを使用して、データ フレーム内の各価格の絶対値を対応する日次収益率に変換することです。
たとえば、2016 年の相関係数を計算してみましょう。
# 计算2016年数字货币的皮尔森相关系数
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')
| Name | DASH | ETC | ETH | LTC | SC | STR | XEM | XMR | XRP | BTC |
|---|---|---|---|---|---|---|---|---|---|---|
| DASH | 1.000000 | 0.003992 | 0.122695 | -0.012194 | 0.026602 | 0.058083 | 0.014571 | 0.121537 | 0.088657 | -0.014040 |
| ETC | 0.003992 | 1.000000 | -0.181991 | -0.131079 | -0.008066 | -0.102654 | -0.080938 | -0.105898 | -0.054095 | -0.170538 |
| ETH | 0.122695 | -0.181991 | 1.000000 | -0.064652 | 0.169642 | 0.035093 | 0.043205 | 0.087216 | 0.085630 | -0.006502 |
| LTC | -0.012194 | -0.131079 | -0.064652 | 1.000000 | 0.012253 | 0.113523 | 0.160667 | 0.129475 | 0.053712 | 0.750174 |
| SC | 0.026602 | -0.008066 | 0.169642 | 0.012253 | 1.000000 | 0.143252 | 0.106153 | 0.047910 | 0.021098 | 0.035116 |
| STR | 0.058083 | -0.102654 | 0.035093 | 0.113523 | 0.143252 | 1.000000 | 0.225132 | 0.027998 | 0.320116 | 0.079075 |
| XEM | 0.014571 | -0.080938 | 0.043205 | 0.160667 | 0.106153 | 0.225132 | 1.000000 | 0.016438 | 0.101326 | 0.227674 |
| XMR | 0.121537 | -0.105898 | 0.087216 | 0.129475 | 0.047910 | 0.027998 | 0.016438 | 1.000000 | 0.027649 | 0.127520 |
| XRP | 0.088657 | -0.054095 | 0.085630 | 0.053712 | 0.021098 | 0.320116 | 0.101326 | 0.027649 | 1.000000 | 0.044161 |
| BTC | -0.014040 | -0.170538 | -0.006502 | 0.750174 | 0.035116 | 0.079075 | 0.227674 | 0.127520 | 0.044161 | 1.000000 |
上記のグラフは相関係数を示しています。係数が 1 または -1 に近い場合、シーケンスはそれぞれ正の相関または逆の相関があることを意味します。相関係数が 0 に近い場合、対応するオブジェクトは相関しておらず、それらの変動は互いに独立していることを意味します。
結果をより視覚化しやすくするために、新しい視覚化ヘルパー関数を作成します。
def correlation_heatmap(df, title, absolute_bounds=True):
'''Plot a correlation heatmap for the entire dataframe'''
heatmap = go.Heatmap(
z=df.corr(method='pearson').as_matrix(),
x=df.columns,
y=df.columns,
colorbar=dict(title='Pearson Coefficient'),
)
layout = go.Layout(title=title)
if absolute_bounds:
heatmap['zmax'] = 1.0
heatmap['zmin'] = -1.0
fig = go.Figure(data=[heatmap], layout=layout)
py.iplot(fig)
correlation_heatmap(combined_df_2016.pct_change(), "Cryptocurrency Correlations in 2016")

ここで、濃い赤の値は強い相関関係(各コインは明らかにそれ自体と高い相関関係にある)を表し、濃い青の値は逆相関関係を表します。その間にあるすべての色(ライトブルー/オレンジ/グレー/茶色)には、相関関係の弱さや相関関係がないことを表す値があります。
この写真は何を伝えているのでしょうか?基本的なレベルでは、統計的に有意な相関関係がほとんどないまま、2016 年を通じてさまざまな暗号通貨の価格がどのように変動したかを示しています。
ここで、「暗号通貨はここ数か月で相関性が高まっている」という仮説を検証するために、2017 年のデータを使用して同じテストを繰り返します。
combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')
| Name | DASH | ETC | ETH | LTC | SC | STR | XEM | XMR | XRP | BTC |
|---|---|---|---|---|---|---|---|---|---|---|
| DASH | 1.000000 | 0.384109 | 0.480453 | 0.259616 | 0.191801 | 0.159330 | 0.299948 | 0.503832 | 0.066408 | 0.357970 |
| ETC | 0.384109 | 1.000000 | 0.602151 | 0.420945 | 0.255343 | 0.146065 | 0.303492 | 0.465322 | 0.053955 | 0.469618 |
| ETH | 0.480453 | 0.602151 | 1.000000 | 0.286121 | 0.323716 | 0.228648 | 0.343530 | 0.604572 | 0.120227 | 0.421786 |
| LTC | 0.259616 | 0.420945 | 0.286121 | 1.000000 | 0.296244 | 0.333143 | 0.250566 | 0.439261 | 0.321340 | 0.352713 |
| SC | 0.191801 | 0.255343 | 0.323716 | 0.296244 | 1.000000 | 0.417106 | 0.287986 | 0.374707 | 0.248389 | 0.377045 |
| STR | 0.159330 | 0.146065 | 0.228648 | 0.333143 | 0.417106 | 1.000000 | 0.396520 | 0.341805 | 0.621547 | 0.178706 |
| XEM | 0.299948 | 0.303492 | 0.343530 | 0.250566 | 0.287986 | 0.396520 | 1.000000 | 0.397130 | 0.270390 | 0.366707 |
| XMR | 0.503832 | 0.465322 | 0.604572 | 0.439261 | 0.374707 | 0.341805 | 0.397130 | 1.000000 | 0.213608 | 0.510163 |
| XRP | 0.066408 | 0.053955 | 0.120227 | 0.321340 | 0.248389 | 0.621547 | 0.270390 | 0.213608 | 1.000000 | 0.170070 |
| BTC | 0.357970 | 0.469618 | 0.421786 | 0.352713 | 0.377045 | 0.178706 | 0.366707 | 0.510163 | 0.170070 | 1.000000 |
これらのデータはより関連性がありますか?それは投資の基準として十分でしょうか?答えはノーです。
しかし、ほぼすべての暗号通貨がますます相互接続されるようになっていることは注目に値します。
correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")

上の写真からわかるように、物事はますます面白くなってきています。
いい質問ですね!しかし、実のところ、私はそうは思っていません…
私の最初の反応は、ヘッジファンドが最近暗号通貨市場で公開取引を開始したということでした。これらのファンドは、平均的なトレーダーよりもはるかに多くの資本を保有しています。ファンドが複数の暗号通貨間で投資資本をヘッジし、独立変数(株式市場など)に基づいて各通貨に同様のリスク要因を使用すると、収益性が高まります。取引戦略。この観点から見ると、相関関係が増加する傾向は理にかなっています。
XRPとSTRのより深い理解
たとえば、上のグラフから、XRP(リップルのトークン)は他の暗号通貨との相関が最も低いことがわかります。しかし、ここで注目すべき例外は、XRP と強い相関関係がある STR (Stellar のトークン、正式名称は「Lumens」) です (相関係数: 0.62)。
興味深いことに、Stellar と Ripple は非常によく似たフィンテック プラットフォームであり、どちらも国境を越えて銀行間で送金する際に発生する面倒な手順を削減することを目指しています。ブロックチェーン サービスで使用されるトークンの類似性を考慮すると、一部の大手プレーヤーやヘッジファンドが Stellar と Ripple への投資に同様の取引戦略を使用する可能性も考えられます。これが、XRP が他の暗号通貨よりも STR と強い相関関係にある理由かもしれません。
上記の説明は主に推測に基づくものであり、もっと良い説明ができるかもしれません。私たちが築いた基盤を基に、データ内のストーリーを探索し続けるための方法は何百通りもあります。
読者が研究の方向性を検討する際に考慮すべきいくつかの提案を以下に示します。
ビットコイン、そしてデジタル通貨全般の最も優れた点は、その分散型の性質であり、これによりビットコインは他のどの資産よりも自由で民主的なものになります。分析結果をオープンソースとして共有したり、コミュニティに参加したり、ブログ記事を書いたりしましょう。これで、独自の分析を実施するために必要なスキルが身につき、今後読む仮想通貨に関する投機的な記事、特にデータに裏付けられていない予測について批判的に考えることができるようになったと思います。お読みいただきありがとうございます。このチュートリアルについてコメント、提案、批判などがありましたら、https://www.fmz.com/bbs にメッセージを残してください。