
Bagaimana kinerja harga Bitcoin? Apa yang menyebabkan harga mata uang kripto melonjak dan anjlok? Apakah harga pasar altcoin yang berbeda saling terkait erat atau sebagian besar independen? Bagaimana kita memprediksi apa yang akan terjadi selanjutnya?
Artikel tentang mata uang digital, seperti Bitcoin dan Ethereum, kini penuh dengan spekulasi, dengan ratusan pakar yang menyatakan diri mengadvokasi tren yang mereka harapkan akan muncul. Apa yang hilang dari banyak analisis ini adalah landasan yang kuat dalam data dasar dan model statistik.
Tujuan artikel ini adalah untuk memberikan pengenalan sederhana tentang analisis mata uang kripto menggunakan Python. Kita akan mempelajari skrip Python sederhana untuk mengambil, menganalisis, dan memvisualisasikan data untuk berbagai mata uang kripto. Sepanjang perjalanan, kita akan menemukan tren menarik dalam perilaku pasar yang bergejolak ini dan bagaimana perkembangannya.

Ini bukan artikel yang menjelaskan mata uang kripto, juga bukan opini tentang mata uang mana yang akan naik dan mana yang akan turun. Sebaliknya, fokus kami dalam tutorial ini hanyalah mengambil data mentah dan menemukan cerita yang tersembunyi dalam angka-angka.
Tutorial ini dirancang untuk para penggemar, teknisi, dan ilmuwan data dari semua tingkat keahlian. Baik Anda seorang pakar industri atau pemula pemrograman, satu-satunya keahlian yang Anda butuhkan adalah pemahaman dasar tentang bahasa pemrograman Python dan pengetahuan yang memadai tentang operasi baris perintah. (Hanya dapat menyiapkan proyek ilmu data).
Selain menyediakan sumber data berkualitas tinggi dari bursa utama, Inventor Quantitative Platform FMZ.COM juga menyediakan serangkaian antarmuka API yang lengkap untuk membantu kami melakukan transaksi otomatis setelah menyelesaikan analisis data. Seperangkat antarmuka ini mencakup alat-alat praktis seperti menanyakan informasi akun, menanyakan harga tinggi, harga pembukaan, harga terendah, harga penutupan, volume perdagangan, berbagai indikator analisis teknis yang umum digunakan oleh berbagai bursa utama, dll., terutama untuk menghubungkan ke bursa utama utama secara aktual. proses perdagangan. Antarmuka API publik menyediakan dukungan teknis yang kuat.
Semua fungsi yang disebutkan di atas dirangkum dalam sistem yang mirip dengan Docker. Yang perlu kita lakukan adalah membeli atau menyewa layanan komputasi awan kita sendiri, lalu menerapkan sistem Docker.
Dalam nama resmi Inventor Quantitative Platform, sistem Docker ini disebut sistem host.
Untuk informasi lebih lanjut tentang cara menyebarkan host dan robot, silakan lihat artikel saya sebelumnya: https://www.fmz.com/bbs-topic/4140
Pembaca yang ingin membeli host penyebaran server komputasi awan mereka sendiri dapat merujuk ke artikel ini: https://www.fmz.com/bbs-topic/2848
Setelah berhasil menerapkan layanan komputasi awan dan sistem host, kami akan menginstal alat Python paling kuat: Anaconda
Untuk mencapai semua lingkungan program relevan yang diperlukan untuk artikel ini (perpustakaan dependen, manajemen versi, dll.), cara termudah adalah menggunakan Anaconda. Ini adalah ekosistem ilmu data Python dan manajer ketergantungan yang dikemas.
Karena kami menginstal Anaconda pada layanan cloud, kami sarankan Anda menginstal sistem Linux plus versi baris perintah Anaconda pada server cloud.
Untuk metode instalasi Anaconda, silakan lihat panduan resmi Anaconda: https://www.anaconda.com/distribution/
Jika Anda seorang programmer Python berpengalaman dan tidak merasa perlu menggunakan Anaconda, itu tidak masalah. Saya berasumsi bahwa Anda tidak memerlukan bantuan dalam menginstal dependensi yang diperlukan dan Anda dapat melompat ke Bagian 2.
Setelah Anaconda terinstal, kita perlu membuat lingkungan baru untuk mengelola paket ketergantungan kita. Pada antarmuka baris perintah Linux, kita masukkan:
conda create --name cryptocurrency-analysis python=3
Mari buat lingkungan Anaconda baru untuk proyek kita.
Selanjutnya, masukkan
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
Untuk mengaktifkan lingkungan ini
Selanjutnya, masukkan:
conda install numpy pandas nb_conda jupyter plotly
Untuk menginstal berbagai paket dependensi yang diperlukan untuk proyek ini.
Catatan: Mengapa menggunakan lingkungan Anaconda? Jika Anda berencana menjalankan banyak proyek Python di komputer Anda, ada baiknya memisahkan dependensi (pustaka dan paket) dari berbagai proyek guna menghindari konflik. Ananconda membuat direktori lingkungan khusus untuk setiap paket dependensi proyek sehingga semua paket dapat dikelola dan dibedakan dengan benar.
Setelah paket lingkungan dan ketergantungan diinstal, jalankan
jupyter notebook
untuk memulai kernel iPython, lalu arahkan browser Anda ke http://localhost:8888/ dan buat buku catatan Python baru, pastikan ia menggunakan:
Python [conda env:cryptocurrency-analysis]
Inti

Buat buku catatan Jupyter baru yang kosong, dan hal pertama yang perlu kita lakukan adalah mengimpor paket dependensi yang diperlukan.
import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime
Kita juga perlu mengimpor Plotly dan mengaktifkan mode offline
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
Sekarang persiapan sudah selesai, kita dapat mulai memperoleh data untuk dianalisis. Pertama, kita perlu menggunakan antarmuka API dari Inventor Quantitative Platform untuk memperoleh data harga Bitcoin.
Ini akan menggunakan fungsi GetTicker. Untuk detail tentang penggunaan kedua fungsi ini, silakan lihat: https://www.fmz.com/api
Untuk memfasilitasi akuisisi data, kita perlu menulis fungsi untuk mengunduh dan menyinkronkan data dari Quandl (quandl.com). Ini adalah antarmuka data keuangan gratis yang sangat terkenal di luar negeri. Platform Kuantitatif Inventor juga menyediakan antarmuka data serupa, yang utamanya digunakan untuk perdagangan waktu riil. Karena artikel ini utamanya ditujukan untuk analisis data, kami tetap menggunakan data Quandl di sini.
Saat melakukan perdagangan secara real time, Anda dapat langsung memanggil fungsi GetTicker dan GetRecords dalam Python untuk memperoleh data harga. Untuk penggunaan fungsi-fungsi tersebut, silakan lihat: 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
Pustaka pickle digunakan di sini untuk membuat serial data dan menyimpan data yang diunduh sebagai berkas, sehingga program tidak mengunduh ulang data yang sama setiap kali dijalankan. Fungsi ini akan mengembalikan data dalam format Pandas Dataframe. Jika Anda tidak familiar dengan konsep kerangka data, anggap saja itu adalah lembar kerja Excel yang canggih.
Mari kita gunakan bursa Bitcoin Kraken sebagai contoh dan mulai dengan mengetahui harga Bitcoinnya.
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
Gunakan metode head() untuk melihat lima baris pertama bingkai data.
btc_usd_price_kraken.head()
Hasilnya adalah:
| 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 |
Selanjutnya, kita perlu membuat tabel sederhana untuk memverifikasi kebenaran data melalui visualisasi.
# 做出BTC价格的表格
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])

Di sini, kami menggunakan Plotly untuk melengkapi bagian visualisasi. Plotly merupakan pilihan yang kurang umum dibandingkan dengan beberapa pustaka visualisasi data Python yang lebih matang, seperti Matplotlib, tetapi merupakan pilihan yang baik karena dapat menggunakan D3.js untuk bagan yang sepenuhnya interaktif. Grafiknya memiliki pengaturan default yang sangat bagus, mudah dijelajahi, dan sangat praktis untuk disematkan di halaman web.
Kiat: Anda dapat membandingkan grafik yang dihasilkan dengan grafik harga Bitcoin dari bursa utama (seperti yang ada di OKEX, Binance, atau Huobi) sebagai pemeriksaan kewarasan cepat untuk mengonfirmasi bahwa data yang diunduh secara kasar konsisten.
Pembaca yang cermat mungkin telah memperhatikan bahwa ada data yang hilang dalam data di atas, terutama pada akhir tahun 2014 dan awal tahun 2016. Kesenjangan data ini terutama terlihat dalam bursa Kraken. Kita tentu tidak ingin data yang hilang ini memengaruhi analisis harga kita.
Karakteristik pertukaran mata uang digital adalah bahwa harga mata uang ditentukan oleh penawaran dan permintaan. Oleh karena itu, tidak ada harga transaksi yang dapat menjadi “harga utama” pasar. Untuk mengatasi masalah ini, serta masalah hilangnya data yang baru saja disebutkan (mungkin karena gangguan teknis dan kesalahan data), kami akan mengunduh data dari tiga bursa Bitcoin utama di dunia dan menghitung harga Bitcoin rata-rata.
Mari kita mulai dengan mengunduh data untuk setiap pertukaran ke dalam kerangka data yang terdiri dari tipe kamus.
# 下载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
Berikutnya, kita akan mendefinisikan fungsi khusus untuk menggabungkan kolom-kolom umum dari setiap bingkai data ke dalam bingkai data baru. Mari kita sebut saja fungsi 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)
Sekarang, gabungkan semua kerangka data bersama-sama berdasarkan kolom “harga tertimbang” dari setiap kumpulan data.
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
Terakhir, kami menggunakan metode “tail()” untuk melihat lima baris terakhir dari data yang digabungkan untuk memastikan bahwa datanya benar dan lengkap.
btc_usd_datasets.tail()
Hasilnya adalah:
| 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 |
Seperti yang dapat Anda lihat dari tabel di atas, data ini sesuai dengan harapan kami. Rentang datanya kurang lebih sama, tetapi ada sedikit perbedaan berdasarkan latensi atau karakteristik masing-masing pertukaran.
Dari perspektif logika analitis, langkah selanjutnya adalah membandingkan data ini melalui visualisasi. Untuk melakukan ini, pertama-tama kita perlu mendefinisikan fungsi pembantu yang menggunakan data untuk membuat bagan dengan memberikan perintah satu baris. Sebut saja fungsi 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)
Agar mudah dipahami, artikel ini tidak akan membahas secara rinci prinsip logika fungsi bantu ini. Jika Anda ingin mempelajari lebih lanjut, lihat dokumentasi resmi untuk Pandas dan Plotly.
Sekarang kita dapat dengan mudah membuat grafik data harga Bitcoin!
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

Seperti yang dapat Anda lihat dari grafik di atas, meskipun keempat seri mengikuti jalur yang hampir sama, ada beberapa ketidakteraturan di dalamnya, yang akan kami coba perbaiki.
Dalam periode 2012-2017, kita mengetahui bahwa harga Bitcoin tidak pernah sama dengan nol, jadi pertama-tama kita menghapus semua nilai nol dalam kerangka data.
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
Setelah membangun kembali kerangka data, kita dapat melihat grafik yang jauh lebih jelas tanpa data yang hilang.
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

Sekarang kita dapat menghitung kolom baru: harga harian rata-rata Bitcoin di semua bursa.
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
Kolom baru adalah indeks harga Bitcoin! Mari kita plot lagi untuk memeriksa kalau-kalau ada yang salah dengan datanya.
# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])

Tampaknya tidak ada masalah, dan kami akan terus menggunakan data rangkaian harga agregat ini nanti untuk dapat menentukan nilai tukar antara mata uang kripto lainnya dan dolar AS.
Sejauh ini, kami memiliki data deret waktu untuk harga Bitcoin. Selanjutnya, mari kita lihat beberapa data tentang mata uang digital non-Bitcoin, yaitu situasi altcoin. Tentu saja, istilah altcoin mungkin agak terlalu kuat, tetapi untuk perkembangan mata uang digital saat ini, selain peringkat kapitalisasi pasar Sebagian besar dari sepuluh mata uang teratas (seperti Bitcoin, Ethereum, EOS, USDT, dll.) dapat disebut altcoin. Tidak masalah. Kita harus mencoba menjauhi mata uang ini saat berdagang karena terlalu membingungkan dan menipu. tinggi.
Pertama, kami menggunakan API bursa Poloniex untuk memperoleh informasi data tentang transaksi mata uang digital. Kami mendefinisikan dua fungsi tambahan untuk memperoleh data altcoin yang relevan. Kedua fungsi ini terutama mengunduh dan menyimpan data JSON melalui API.
Pertama, kita mendefinisikan fungsi get_json_data, yang akan mengunduh dan menyimpan data JSON dari URL yang diberikan.
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
Berikutnya, kita mendefinisikan fungsi baru yang akan membuat permintaan HTTP ke API Poloniex dan memanggil fungsi get_json_data yang baru saja kita definisikan untuk menyimpan hasil panggilan tersebut.
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
Fungsi di atas akan mengekstrak kode string pasangan mata uang kripto (seperti “BTC_ETH”) dan mengembalikan bingkai data yang berisi harga historis kedua mata uang.
Sebagian besar altcoin tidak dapat dibeli secara langsung menggunakan dolar AS. Jika individu ingin memperoleh mata uang digital ini, mereka biasanya harus membeli Bitcoin terlebih dahulu dan kemudian menukarnya dengan altcoin berdasarkan rasio harga di antara keduanya. Oleh karena itu, kita harus mengunduh nilai tukar setiap mata uang digital ke Bitcoin, lalu menggunakan data harga Bitcoin yang ada untuk mengonversinya ke dolar AS. Kami akan mengunduh data transaksi untuk 9 mata uang kripto teratas: Ethereum, Litecoin, Ripple, EthereumClassic, Stellar, Dash, Siacoin, Monero, dan NEM.
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
Kami sekarang memiliki kamus yang berisi 9 bingkai data, masing-masing berisi data harga rata-rata harian historis antara altcoin dan Bitcoin.
Kita dapat menentukan apakah datanya benar dengan melihat beberapa baris terakhir tabel harga Ethereum.
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 |
Sekarang kita dapat menggabungkan data nilai tukar BTC ke altcoin dengan Indeks Harga Bitcoin untuk langsung menghitung harga historis setiap altcoin dalam 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']
Di sini, kami menambahkan kolom baru ke kerangka data untuk setiap altcoin untuk menyimpan harga USD yang sesuai.
Berikutnya, kita dapat menggunakan kembali fungsi merge_dfs_on_column yang kita definisikan sebelumnya untuk membuat kerangka data gabungan yang mengintegrasikan harga USD dari setiap mata uang kripto.
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
Selesai!
Sekarang mari kita tambahkan harga Bitcoin sebagai kolom terakhir pada kerangka data gabungan.
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
Sekarang kami memiliki kerangka data unik yang berisi harga USD harian untuk sepuluh mata uang kripto yang kami validasi.
Kami memanggil fungsi sebelumnya df_scatter lagi untuk menampilkan harga altcoin yang sesuai dalam bentuk grafik.

Grafiknya terlihat bagus dan memberi kita gambaran lengkap tentang bagaimana harga tukar setiap mata uang kripto telah berubah selama beberapa tahun terakhir.
Catatan: Di sini kami menggunakan sumbu y logaritmik untuk membandingkan semua mata uang kripto pada grafik yang sama. Anda juga dapat mencoba nilai parameter yang berbeda (seperti skala=‘linear’) untuk memahami data dari berbagai perspektif.
Pembaca yang cermat mungkin telah memperhatikan bahwa harga mata uang digital tampaknya berkorelasi, meskipun nilai moneternya sangat bervariasi dan sangat fluktuatif. Terutama sejak kenaikan cepat pada bulan April 2017, bahkan banyak fluktuasi kecil tampaknya terjadi selaras dengan fluktuasi seluruh pasar.
Tentu saja, kesimpulan yang didukung oleh data lebih meyakinkan daripada intuisi berdasarkan gambar.
Kita dapat menggunakan fungsi Pandas corr() untuk memverifikasi hipotesis korelasi di atas. Pengujian ini menghitung koefisien korelasi Pearson untuk setiap kolom kerangka data dengan setiap kolom lainnya.
2017.8.22 Catatan Revisi: Bagian ini dimodifikasi untuk menggunakan pengembalian harian, bukan harga absolut saat menghitung koefisien korelasi.
Perhitungan langsung berdasarkan rangkaian waktu yang tidak padat (seperti data harga mentah) dapat menyebabkan penyimpangan dalam koefisien korelasi. Solusi kami untuk masalah ini adalah menggunakan metode pct_change() untuk mengubah nilai absolut setiap harga dalam kerangka data menjadi tingkat pengembalian harian yang sesuai.
Misalnya, mari kita hitung koefisien korelasi untuk tahun 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 |
Grafik di atas menunjukkan koefisien korelasi. Koefisien yang mendekati 1 atau -1 berarti bahwa urutan tersebut berkorelasi positif atau berkorelasi terbalik. Koefisien korelasi yang mendekati 0 berarti bahwa objek yang sesuai tidak berkorelasi dan fluktuasinya tidak bergantung satu sama lain.
Untuk memvisualisasikan hasil dengan lebih baik, kami membuat fungsi pembantu visualisasi baru.
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")

Di sini, nilai merah tua mewakili korelasi yang kuat (setiap koin jelas sangat berkorelasi dengan dirinya sendiri), dan nilai biru tua mewakili korelasi terbalik. Semua warna di antaranya - biru muda/oranye/abu-abu/coklat - memiliki nilai yang mewakili berbagai tingkat korelasi lemah atau tidak ada korelasi sama sekali.
Apa yang gambar ini katakan pada kita? Pada dasarnya, grafik ini menunjukkan bagaimana harga berbagai mata uang kripto berfluktuasi sepanjang tahun 2016, dengan sedikit korelasi yang signifikan secara statistik.
Sekarang, untuk memverifikasi hipotesis kami bahwa “mata uang kripto menjadi lebih berkorelasi dalam beberapa bulan terakhir”, kami akan mengulangi pengujian yang sama menggunakan data dari tahun 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 |
Apakah data ini lebih relevan? Apakah cukup untuk dijadikan kriteria investasi? Jawabannya adalah tidak.
Perlu dicatat, bagaimanapun, bahwa hampir semua mata uang kripto telah menjadi semakin saling terhubung.
correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")

Seperti yang Anda lihat pada gambar di atas, segala sesuatunya menjadi semakin menarik.
Pertanyaan bagus! Namun kenyataannya, saya tidak begitu yakin…
Reaksi pertama saya adalah bahwa dana lindung nilai baru-baru ini mulai berdagang secara publik di pasar mata uang kripto. Dana ini memiliki modal yang jauh lebih besar daripada pedagang rata-rata. Jika suatu dana melindungi modal investasinya di antara beberapa mata uang kripto dan kemudian menggunakan faktor risiko yang sama untuk setiap mata uang berdasarkan variabel independen (misalnya, pasar saham), maka dana tersebut akan lebih menguntungkan. strategi. Jika dilihat dari perspektif ini, tren peningkatan korelasi masuk akal.
Pemahaman lebih dalam tentang XRP dan STR
Misalnya, dari grafik di atas, jelas bahwa XRP (token Ripple) memiliki korelasi paling rendah dengan mata uang kripto lainnya. Namun satu pengecualian penting di sini adalah STR (token Stellar, yang secara resmi disebut “Lumens”), yang memiliki korelasi kuat dengan XRP (koefisien korelasi: 0,62).
Menariknya, Stellar dan Ripple adalah platform fintech yang sangat mirip yang keduanya bertujuan untuk mengurangi langkah-langkah rumit yang terlibat dalam transfer uang antar bank lintas batas. Dapat dibayangkan bahwa beberapa pemain besar dan dana lindung nilai mungkin menggunakan strategi perdagangan serupa untuk investasi mereka di Stellar dan Ripple, mengingat kesamaan token yang digunakan oleh layanan blockchain. Ini mungkin sebabnya XRP memiliki korelasi yang lebih kuat dengan STR daripada mata uang kripto lainnya.
Penjelasan di atas sebagian besar bersifat spekulatif, dan Anda mungkin bisa mendapatkan jawaban yang lebih baik. Berdasarkan fondasi yang telah kita buat, ada ratusan cara berbeda yang dapat Anda lakukan untuk terus mengeksplorasi cerita dalam data Anda.
Berikut ini adalah beberapa saran saya bagi para pembaca untuk dipertimbangkan dalam arahan penelitian mereka:
Bagian terbaik tentang Bitcoin, dan tentang mata uang digital secara umum, adalah sifatnya yang terdesentralisasi, yang membuatnya lebih bebas dan lebih demokratis daripada aset lainnya. Bagikan analisis Anda sebagai sumber terbuka, terlibatlah dalam komunitas, atau tulis postingan blog! Mudah-mudahan, Anda sekarang memiliki keterampilan yang Anda perlukan untuk melakukan analisis Anda sendiri dan mampu berpikir kritis tentang artikel spekulatif mata uang kripto yang Anda baca di masa mendatang, terutama prediksi yang tidak didukung oleh data. Terima kasih telah membaca. Jika Anda memiliki komentar, saran, atau kritik tentang tutorial ini, silakan tinggalkan pesan di https://www.fmz.com/bbs.