0
フォロー
78
フォロワー

デジタル通貨市場の定量分析

作成日:: 2019-08-16 10:37:23, 更新日:: 2023-10-19 21:04:20
comments   3
hits   3748

デジタル通貨市場の定量分析

デジタル通貨投機を分析するためのデータ駆動型アプローチ

ビットコインの価格はどうなっているのでしょうか?暗号通貨の価格が急騰したり急落したりする原因は何ですか?さまざまなアルトコインの市場価格は密接に関連しているのでしょうか、それとも大部分は独立しているのでしょうか?次に何が起こるかをどのように予測するのでしょうか?

ビットコインやイーサリアムなどのデジタル通貨に関する記事には、現在、憶測が溢れており、何百人もの自称専門家が、今後出現すると予想されるトレンドを主張している。これらの分析の多くに欠けているのは、基礎となるデータと統計モデルの強固な基盤です。

この記事の目的は、Python を使用した暗号通貨分析の簡単な紹介を提供することです。さまざまな暗号通貨のデータを取得、分析、視覚化するための簡単な Python スクリプトについて説明します。その過程で、私たちはこれらの不安定な市場の動きとその発展の興味深い傾向を発見するでしょう。

デジタル通貨市場の定量分析

これは暗号通貨を説明する記事ではなく、また、特定の通貨が上昇し、どの通貨が下落するかについての意見記事でもありません。代わりに、このチュートリアルでは、生のデータを取得して、数字に隠されたストーリーを発見することに焦点を当てます。

ステップ1: データ作業環境を構築する

このチュートリアルは、あらゆるスキル レベルの愛好家、エンジニア、データ サイエンティスト向けに設計されています。業界の専門家でもプログラミング初心者でも、必要なスキルは Python プログラミング言語の基本的な理解と、コマンド ライン操作に関する十分な知識だけです。 (データ サイエンス プロジェクトを設定できれば十分です)。

1.1 Inventor Quant Host をインストールし、Anaconda をセットアップする

  • 定量化された管理システムの発明者

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 に進んでください。

1.2 Anacondaデータ分析プロジェクト環境を作成する

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 は、すべてのパッケージを適切に管理および区別できるように、各プロジェクトの依存パッケージごとに特別な環境ディレクトリを作成します。

1.3 Jupyterノートブックを作成する

環境と依存パッケージがインストールされたら、以下を実行します。

jupyter notebook

iPython カーネルを起動するには、ブラウザで http://localhost:8888/ にアクセスし、新しい Python ノートブックを作成して、以下を使用していることを確認します。

Python [conda env:cryptocurrency-analysis]

カーネル

デジタル通貨市場の定量分析

1.4 依存パッケージのインポート

新しい空の 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)

ステップ2: デジタル通貨の価格情報を取得する

準備が完了したので、分析するデータの取得を開始できます。まず、Inventor Quantitative Platform の API インターフェースを使用して Bitcoin の価格データを取得する必要があります。

これには GetTicker 関数が使用されます。これら 2 つの関数の使用方法の詳細については、https://www.fmz.com/api を参照してください。

2.1 Quandlデータ収集関数の記述

データの取得を容易にするために、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 スプレッドシートと考えてください。

2.2 Kraken取引所から暗号通貨の価格データを取得する

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 など) のビットコイン価格チャートと比較すると、ダウンロードしたデータがほぼ一貫しているかどうかを簡単に確認できます。

2.3 主要なビットコイン取引所からの価格データの取得

注意深い読者は、上記のデータ、特に 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

2.4 すべてのデータを1つのデータフレームに統合する

次に、各データ フレームの共通列を新しいデータ フレームにマージする特別な関数を定義します。これを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

上記の表からわかるように、これらのデータは私たちの予想と一致しています。データの範囲はほぼ同じですが、各取引所のレイテンシーや特性によって若干の違いがあります。

2.5 価格データの可視化プロセス

分析ロジックの観点から、次のステップは視覚化を通じてこれらのデータを比較することです。これを行うには、まず、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')

デジタル通貨市場の定量分析

2.6 価格データのクリーンアップと集計

上のグラフからわかるように、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])

デジタル通貨市場の定量分析

問題はなさそうです。今後は、この集計された価格系列データを引き続き使用して、他の暗号通貨と米ドルの為替レートを判断できるようになります。

ステップ3: アルトコインの価格を収集する

これまでのところ、ビットコインの価格に関する時系列データがあります。次に、ビットコイン以外のデジタル通貨、つまりアルトコインの状況についてのデータを見てみましょう。もちろん、アルトコインという言葉は少し強すぎるかもしれませんが、現在のデジタル通貨の発展については、時価総額ランキングに加えて上位 10 位のほとんど (ビットコイン、イーサリアム、EOS、USDT など) は、アルトコインと呼ぶことができます。問題ありません。これらの通貨は混乱を招きやすく、欺瞞的であるため、取引時にはこれらの通貨を避けるようにしてください。高い。

3.1 Poloniex取引所APIを介した補助機能の定義

まず、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&currencyPair={}&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」など) を抽出し、両方の通貨の履歴価格を含むデータ フレームを返します。

3.2 Poloniexからの取引価格データのダウンロード

ほとんどのアルトコインは米ドルを使って直接購入することはできません。個人がこれらのデジタル通貨を入手したい場合は、通常、最初にビットコインを購入し、その後、両者の価格比率に基づいてアルトコインに交換する必要があります。したがって、各デジタル通貨のビットコインへの為替レートをダウンロードし、既存のビットコインの価格データを使用して米ドルに変換する必要があります。イーサリアム、ライトコイン、リップル、イーサリアムクラシック、ステラ、ダッシュ、シアコイン、モネロ、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

3.3 すべての価格データは米ドルで表記される必要がある

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’ など)を試して、さまざまな視点からデータを理解することもできます。

3.4 相関分析を開始する

注意深い読者は、デジタル通貨の金銭的価値は大きく異なり、非常に不安定であるにもかかわらず、デジタル通貨の価格は相関しているように見えることに気付いたかもしれません。特に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 と強い相関関係にある理由かもしれません。

さあ、あなたの番です!

上記の説明は主に推測に基づくものであり、もっと良い説明ができるかもしれません。私たちが築いた基盤を基に、データ内のストーリーを探索し続けるための方法は何百通りもあります。

読者が研究の方向性を検討する際に考慮すべきいくつかの提案を以下に示します。

  • 全体的な分析にさらに多くの暗号通貨のデータを追加する
  • 相関分析の時間範囲と粒度を調整して、傾向の詳細なビューまたは大まかなビューを取得します。
  • 取引量やブロックチェーン データ マイニングの傾向を見つけます。将来の価格変動を予測したい場合は、生の価格データよりも売買量比率データが必要になる場合があります。
  • 株式、商品、法定通貨の価格データを追加して、どれが暗号通貨と相関しているかを判断します(ただし、「相関は因果関係を意味するものではない」という古い格言を覚えておいてください)
  • Event Registry、GDELT、Google トレンドを使用して、特定の暗号通貨を取り巻く「ホットワード」の数を定量化します。
  • データを使用して予測機械学習モデルをトレーニングし、明日の価格を予測します。もっと意欲的な場合は、上記のトレーニングをリカレント ニューラル ネットワーク (RNN) で実行することを検討することもできます。
  • 分析結果を使用して、「Poloniex」や「Coinbase」などの取引所のウェブサイトで、対応するアプリケーション プログラミング インターフェイス (API) を介して使用できる自動取引ボットを作成します。注意してください: パフォーマンスの悪いボットは、あなたの資産を一瞬にして消し去ってしまう可能性があります。発明者の定量プラットフォーム FMZ.COM を使用することをお勧めします。

ビットコイン、そしてデジタル通貨全般の最も優れた点は、その分散型の性質であり、これによりビットコインは他のどの資産よりも自由で民主的なものになります。分析結果をオープンソースとして共有したり、コミュニティに参加したり、ブログ記事を書いたりしましょう。これで、独自の分析を実施するために必要なスキルが身につき、今後読む仮想通貨に関する投機的な記事、特にデータに裏付けられていない予測について批判的に考えることができるようになったと思います。お読みいただきありがとうございます。このチュートリアルについてコメント、提案、批判などがありましたら、https://www.fmz.com/bbs にメッセージを残してください。