Bagaimana harga Bitcoin berkinerja? Apa penyebab kenaikan dan penurunan harga mata uang digital? Apakah harga pasar dari berbagai koin yang berbeda terhubung secara tak terpisahkan atau sebagian besar independen? Bagaimana kita bisa memprediksi apa yang akan terjadi selanjutnya?
Artikel-artikel tentang mata uang digital seperti Bitcoin dan Ethereum sekarang penuh dengan spekulasi, dengan ratusan orang yang menyebut diri mereka ahli yang menganjurkan tren yang mereka harapkan; banyak dari analisis ini tidak memiliki dasar data dasar dan model statistik yang kuat.
Tujuan dari artikel ini adalah untuk memberikan pengenalan singkat tentang analisis mata uang digital menggunakan Python. Kami akan mencari, menganalisis, dan memvisualisasikan data dari berbagai mata uang digital melalui skrip Python sederhana. Dalam perjalanan, kami akan menemukan perilaku pasar yang berfluktuasi ini dan tren menarik tentang bagaimana mereka berkembang.
Ini bukan sebuah artikel yang menjelaskan mata uang digital, atau sebuah pandangan tentang mata uang tertentu yang akan naik dan yang akan turun. Sebaliknya, yang kita fokuskan dalam tutorial ini hanyalah mendapatkan data mentah dan menemukan cerita yang tersembunyi dalam angka.
Tutorial ini dirancang untuk digunakan oleh para penggemar, insinyur, dan ilmuwan data dari semua tingkatan keterampilan. Tidak peduli apakah Anda seorang industri besar atau seorang programmer muda, satu-satunya keterampilan yang Anda butuhkan adalah pengetahuan dasar tentang bahasa pemrograman Python dan cukup pengetahuan tentang operasi baris perintah (untuk mengatur proyek ilmu data).
发明者量化平台FMZ.COM除了提供优质的各大主流交易所的数据源,还提供一套丰富的API接口以帮助我们在完成数据的分析后进行自动化交易。这套接口包括查询账户信息,查询各个主流交易所的高,开,低,收价格,成交量,各种常用技术分析指标等实用工具,特别是对于实际交易过程中连接各大主流交易所的公共API接口,提供了强大的技术支持。
Semua fitur yang disebutkan di atas terbungkus ke dalam sistem yang mirip dengan Docker, dan yang harus kita lakukan adalah membeli atau menyewa layanan komputasi awan kami sendiri dan kemudian mengimplementasikan sistem Docker ini.
Dalam nama resmi platform kuantitatif penemu, sistem Docker ini disebut sistem host.
Untuk informasi lebih lanjut tentang cara mengimplementasikan administrator dan robot, lihat artikel saya sebelumnya:https://www.fmz.com/bbs-topic/4140
Untuk pembaca yang ingin membeli host yang mendistribusikan server cloud mereka sendiri, baca artikel ini:https://www.fmz.com/bbs-topic/2848
Setelah berhasil menerapkan layanan cloud dan sistem administrator, selanjutnya kita akan menginstal python terbesar saat ini: Anaconda.
Untuk menerapkan semua lingkungan program yang diperlukan untuk artikel ini (dependencies, version management, dll.), cara termudah adalah dengan menggunakan Anaconda. Ini adalah ekosistem ilmu data Python yang dikemas dan manajer repositori dependen.
Karena kami menginstal Anaconda pada layanan cloud, kami merekomendasikan server cloud untuk menginstal versi Anaconda pada sistem Linux dengan baris perintah.
Untuk cara menginstal Anaconda, lihat panduan resmi Anaconda:https://www.anaconda.com/distribution/
Jika Anda seorang programmer Python berpengalaman dan merasa tidak perlu menggunakan Anaconda, itu tidak masalah sama sekali. Saya akan berasumsi Anda tidak perlu bantuan dalam menginstal dependensi yang diperlukan, Anda bisa langsung melompat ke bagian kedua.
Setelah Anaconda diinstal, kita perlu membuat lingkungan baru untuk mengelola paket ketergantungan kita.
conda create --name cryptocurrency-analysis python=3
Untuk membuat lingkungan Anaconda baru untuk proyek kami.
Kemudian, masukkan
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
Untuk mengaktifkan lingkungan ini.
Setelah itu, masukkan:
conda install numpy pandas nb_conda jupyter plotly
Untuk menginstal proyek ini, Anda harus menggunakan berbagai dependen.
Catatan: Mengapa menggunakan lingkungan Anaconda? Jika Anda berencana untuk menjalankan banyak proyek Python di komputer Anda, pemisahan paket ketergantungan dari proyek yang berbeda (publikasi perangkat lunak dan paket) untuk menghindari konflik sangat membantu.
Setelah lingkungan dan paket ketergantungan sudah diinstal, berjalan
jupyter notebook
Untuk memulai kernel iPython, gunakan browser Anda untuk mengakses http://localhost:8888/Untuk membuat notebook Python baru, pastikan untuk menggunakan:
Python [conda env:cryptocurrency-analysis]
Nuklir
Setelah membuat notebook Jupyter yang kosong, hal pertama yang harus kita lakukan adalah mengimpor paket ketergantungan yang kita inginkan.
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)
Setelah persiapan selesai, sekarang kita bisa mulai mendapatkan data yang akan dianalisis. Pertama, kita akan mendapatkan data harga Bitcoin dengan menggunakan antarmuka API dari inventor untuk mengukur platform.
Ini akan menggunakan fungsi GetTicker, untuk detail tentang penggunaan kedua fungsi ini, lihat:https://www.fmz.com/api
Untuk memudahkan pengambilan data, kita harus menulis sebuah fungsi untuk mengunduh dan menyinkronkan data dari Quandl.quandl.comIni adalah antarmuka data keuangan gratis yang sangat terkenal di luar negeri. Platform kuantitatif penemu juga menyediakan antarmuka data serupa, terutama untuk digunakan saat perdagangan real-time, karena artikel ini terutama untuk analisis data, di sini kita menggunakan data Quandl.
Pada saat perdagangan real-time, Anda dapat langsung memanggil fungsi GetTicker dan GetRecords di Python untuk mendapatkan data harga. Untuk penggunaan mereka, 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
Fungsi ini akan mengembalikan data dalam format Dataframe Panda. Jika Anda tidak begitu akrab dengan konsep dataframe, Anda dapat membayangkan itu sebagai bentuk Excel yang kuat.
Jika kita menggunakan bursa Bitcoin Kraken sebagai contoh, kita akan mulai dengan harga Bitcoin yang diperolehnya.
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
Untuk melihat lima baris pertama dari kotak data, gunakan metode head ().
btc_usd_price_kraken.head()
Hasilnya adalah:
BTC | Buka | Tinggi | Rendah | Dekat | Volume (BTC) | Volume (Mata Uang) | Harga Tertimbang |
---|---|---|---|---|---|---|---|
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 akan membuat tabel sederhana untuk memverifikasi kebenaran data dengan metode visualisasi.
# 做出BTC价格的表格
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])
这里,我们用Plotly来完成可视化部分。相对于使用一些更成熟的Python数据可视化库,比如Matplotlib,用Plotly是一个不那么普遍的选择,但Plotly确实是一个不错的选择,因为它可以调用D3.js的充分交互式图表。这些图表有非常漂亮的默认设置,易于探索,而且非常方便嵌入到网页中。
Petunjuk: Anda dapat membandingkan grafik yang dihasilkan dengan grafik harga Bitcoin dari bursa utama (seperti grafik di OKEX, Binance atau Huobi) sebagai pemeriksaan integritas cepat untuk memastikan bahwa data yang diunduh secara umum konsisten.
Pembaca yang berhati-hati mungkin telah memperhatikan bahwa data di atas tidak memiliki data, terutama pada akhir 2014 dan awal 2016; terutama di Kraken. Kami tentu tidak ingin data yang hilang mempengaruhi analisis harga.
Pertukaran mata uang digital memiliki karakteristik bahwa harga mata uang ditentukan oleh hubungan pasokan dan permintaan. Oleh karena itu, tidak ada harga transaksi yang dapat menjadi harga utama pasar. Untuk mengatasi masalah ini, dan masalah hilangnya data yang baru saja disebutkan (mungkin karena gangguan teknis dan kesalahan data), kami akan men-download data dari tiga bursa bitcoin utama di dunia dan kemudian menghitung harga bitcoin rata-rata.
Mari kita mulai dengan mengunduh data dari masing-masing bursa ke dalam kumpulan data yang terdiri dari jenis 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
Selanjutnya, kita akan mendefinisikan fungsi khusus yang menggabungkan kolom yang dibagikan di setiap kolom data menjadi satu kolom data baru. Mari kita sebut fungsi ini 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, selaraskan semua data yang ada di dalam satu dataset dengan harga perkalian berdasarkan dataset yang berbeda.
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
Akhirnya, kami menggunakan metode penjumlahan untuk melihat lima baris terakhir data setelah penggabungan untuk memastikan data 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 |
Dari tabel di atas, Anda dapat melihat bahwa data ini sesuai dengan harapan kami, dengan rentang data yang hampir sama, hanya sedikit berbeda berdasarkan keterlambatan atau karakteristik masing-masing bursa.
Dari logika analitik, langkah selanjutnya adalah membandingkan data ini dengan visualisasi. Untuk ini, kita perlu mendefinisikan fungsi tambahan terlebih dahulu, dengan memberikan perintah satu baris untuk membuat grafik dengan data, mari kita sebut 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)
Untuk memudahkan Anda memahami, artikel ini tidak akan membahas terlalu banyak tentang prinsip-prinsip logis dari fungsi bantu ini. Untuk informasi lebih lanjut, lihat dokumen panduan resmi Pandas dan Plotly.
Sekarang, kita dapat dengan mudah membuat grafik dari data harga Bitcoin!
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Dari grafik di atas dapat dilihat bahwa meskipun keempat rangkaian data mengikuti jalur yang hampir sama, ada beberapa perubahan yang tidak teratur di dalamnya, dan kami akan berusaha membersihkan perubahan yang tidak teratur tersebut.
Selama periode 2012-2017, kita tahu bahwa harga Bitcoin tidak pernah sama dengan nol, jadi kita menghapus semua nol dari kotak data terlebih dahulu.
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
Setelah mengkonstruksikan kembali dataset, kita bisa melihat grafik yang lebih jelas tanpa kehilangan data.
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Kami sekarang dapat menghitung kolom baru: harga rata-rata bitcoin harian di semua bursa.
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
Kolom baru adalah indeks harga Bitcoin! Kami menggambarnya lagi untuk memeriksa apakah data itu terlihat bermasalah.
# 绘制平均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 nanti kita akan terus menggunakan data deret harga yang dijumlahkan ini untuk dapat menentukan nilai tukar pertukaran antara mata uang digital lainnya dan dolar.
Sejauh ini, kita sudah memiliki data urutan waktu harga Bitcoin. Selanjutnya kita akan melihat beberapa data dari mata uang digital non-Bitcoin, yaitu mata uang kripto (Altcoins), tentu saja, kata kripto mungkin sedikit berlebihan, tetapi untuk perkembangan mata uang digital saat ini, selain yang berada di posisi 10 teratas (seperti Bitcoin, Ethereum, EOS, USDT, dll.), sebagian besar dapat disebut kripto tidak masalah, kita harus menjauhinya saat berdagang karena mereka terlalu membingungkan dan menipu.
Pertama, kami menggunakan API Poloniex untuk mendapatkan informasi data dari transaksi mata uang digital. Kami mendefinisikan dua fungsi tambahan untuk mendapatkan data yang terkait dengan bitcoin, yang terutama memuat dan menyimpan data JSON melalui API.
Pertama, kita mendefinisikan fungsi get_json_data, yang akan men-download 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
Selanjutnya, kita mendefinisikan fungsi baru yang akan menghasilkan permintaan HTTP dari API Poloniex dan memanggil fungsi get_json_data yang baru saja didefinisikan untuk menyimpan hasil data yang dipanggil.
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 karakter pasangan mata uang digital (misalnya binary BTC_ETH binary) dan mengembalikan data binary yang berisi dua harga sejarah mata uang.
Sebagian besar Bitcoin tidak dapat dibeli secara langsung dengan dolar AS, dan individu yang ingin mendapatkan cryptocurrency ini biasanya harus membeli Bitcoin terlebih dahulu, dan kemudian menukarnya menjadi Bitcoin berdasarkan rasio harga mereka. Oleh karena itu, kita harus mengunduh nilai tukar Bitcoin untuk setiap cryptocurrency, dan kemudian mengkonversi ke dolar menggunakan data harga Bitcoin yang ada.
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
Saat ini, kami memiliki sebuah kamus yang berisi 9 data stack, masing-masing berisi data harga rata-rata harian antara Bitcoin dan Bitcoin.
Kami dapat menilai apakah data tersebut benar dengan melihat beberapa baris terakhir dari tabel harga Ethereum.
altcoin_data['ETH'].tail()
ETH | Buka | Tinggi | Rendah | Dekat | Volume (BTC) | Volume (Mata Uang) | Harga Tertimbang |
---|---|---|---|---|---|---|---|
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 |
Saat ini, kita dapat menggabungkan data BTC dengan nilai tukar Bitcoin dengan indeks harga Bitcoin kami untuk menghitung harga historis masing-masing Bitcoin secara langsung (unit: 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 untuk setiap kotak data koin untuk menyimpan harga dolar yang sesuai.
Selanjutnya, kita dapat menggunakan kembali fungsi merge_dfs_on_column yang telah didefinisikan sebelumnya untuk membangun data stack yang tergabung, mengintegrasikan harga dolar dari setiap mata uang digital.
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
Ini sudah selesai!
Sekarang mari kita tambahkan harga Bitcoin sebagai titik akhir pada data yang digabungkan.
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
Sekarang kami memiliki dataset unik yang berisi harga dolar harian dari 10 mata uang digital yang sedang kami verifikasi.
Kami memanggil kembali fungsi df_scatter sebelumnya untuk menampilkan harga yang sesuai untuk semua koin yang beredar dalam bentuk grafik.
Diagram ini menunjukkan kepada kita gambaran keseluruhan tentang perubahan harga setiap mata uang digital dalam beberapa tahun terakhir.
Catatan: Di sini kita menggunakan y-axis dari spesifikasi logaritma untuk membandingkan semua mata uang digital pada gambar yang sama. Anda juga dapat mencoba nilai parameter lain yang berbeda (misalnya scale=
Pembaca yang berhati-hati mungkin telah memperhatikan bahwa harga mata uang digital tampaknya terkait, meskipun mereka memiliki perbedaan besar dalam nilai mata uang mereka, dan mereka sangat volatile. Terutama sejak kenaikan pesat pada bulan April 2017, bahkan banyak fluktuasi kecil tampaknya terjadi bersamaan dengan fluktuasi pasar secara keseluruhan.
Tentu saja, kesimpulan yang didukung oleh data lebih meyakinkan daripada intuisi berdasarkan gambar.
Kita dapat menggunakan fungsi Pandas untuk memverifikasi asumsi korelasi di atas. Alat pengujian ini menghitung koefisien korelasi Pearson yang sesuai untuk setiap batang data lain.
2017.8.22 Modifikasi: Perubahan pada bagian ini adalah untuk menggunakan nilai absolut dari nilai pengembalian harian dan bukan harga saat menghitung faktor terkait.
Perhitungan langsung berdasarkan serangkaian waktu non-statis (misalnya data harga mentah) dapat menyebabkan deviasi koefisien korelasi. Untuk masalah ini, solusi kami adalah menggunakan metode pct_change (), yang mengubah nilai absolut dari setiap harga dalam heap data menjadi tingkat pengembalian harian yang sesuai.
Sebagai contoh, mari kita hitung koefisien yang terkait pada tahun 2016.
# 计算2016年数字货币的皮尔森相关系数
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')
Nama | 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 |
Gambar di atas menunjukkan semua koefisien yang terkait. Koefisien yang mendekati 1 atau-1, masing-masing, berarti bahwa urutan ini terkait positif atau terbalik, dan koefisien yang terkait mendekati 0 menunjukkan bahwa objek yang terkait tidak terkait, dan fluktuasi mereka independen satu sama lain.
Untuk menampilkan hasil visualisasi yang lebih baik, kami membuat fitur bantuan 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 gelap mewakili korelasi yang kuat (setiap mata uang jelas terkait dengan ketinggian mereka sendiri), dan nilai biru gelap menunjukkan korelasi terbalik. Semua warna di antara - biru muda / ungu / abu-abu / coklat - memiliki nilai yang berbeda yang mewakili korelasi lemah atau tidak terkait.
Pada dasarnya, ini menunjukkan bahwa harga berbagai mata uang digital mengalami fluktuasi selama tahun 2016 dengan hampir tidak ada hubungan yang signifikan secara statistik.
Sekarang, untuk memverifikasi hipotesis kami tentang peningkatan relevansi mata uang digital dalam beberapa bulan terakhir, selanjutnya kami akan mengulangi tes yang sama menggunakan data yang dimulai pada tahun 2017.
combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')
Nama | 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-data di atas lebih relevan? Apakah cukup untuk menjadi kriteria penilaian investasi?
Namun, perlu dicatat bahwa hampir semua mata uang digital telah menjadi semakin saling terkait.
correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")
Seperti yang bisa dilihat dari gambar di atas, hal-hal menjadi semakin menarik.
Tapi kenyataannya, saya juga tidak yakin...
Tanggapan pertama saya adalah bahwa hedge fund baru-baru ini mulai terbuka untuk berdagang di pasar mata uang digital. Dana-dana ini memiliki modal yang jauh lebih besar daripada pedagang biasa, ketika dana yang hedge modal masukan mereka di antara beberapa mata uang digital, kemudian menggunakan strategi perdagangan yang sama untuk setiap mata uang berdasarkan variabel independen (misalnya, pasar saham).
Memahami lebih dalam tentang XRP dan STR
Sebagai contoh, dari grafik di atas dapat dilihat dengan jelas bahwa XRP (token Ripple) memiliki hubungan paling rendah dengan mata uang digital lainnya. Namun, satu pengecualian yang patut diperhatikan adalah STR (token Stellar, yang nama resminya adalah "Lumens"), yang memiliki hubungan yang kuat dengan XRP (koefisien hubungan: 0.62).
Menariknya, Stellar dan Ripple adalah platform fintech yang sangat mirip, keduanya bertujuan untuk mengurangi langkah-langkah yang rumit saat melakukan transfer lintas negara antar bank. Diharapkan, mengingat kemiripan layanan blockchain menggunakan token, beberapa pemain besar dan hedge fund mungkin menggunakan strategi perdagangan yang sama untuk investasi mereka di Stellar dan Ripple. Mungkin itulah mengapa XRP memiliki hubungan yang lebih kuat dengan STR dibandingkan mata uang digital lainnya.
Hal-hal di atas sebagian besar bersifat spekulatif, dan mungkin Anda akan melakukannya dengan lebih baik. Berdasarkan dasar yang telah kita buat, Anda memiliki ratusan atau ribuan cara berbeda untuk terus mengeksplorasi cerita yang tersembunyi dalam data.
Di bawah ini adalah beberapa saran saya yang dapat digunakan oleh pembaca untuk melakukan penelitian lebih lanjut ke arah ini:
Bagian terbaik tentang Bitcoin, dan tentang mata uang digital pada umumnya, adalah sifat desentralisasi mereka, yang membuatnya lebih bebas, demokratis daripada aset lain. Anda dapat berbagi analisis Anda dengan sumber terbuka, berpartisipasi dalam komunitas, atau menulis blog!https://www.fmz.com/bbsPerhatikan komentarnya.
ruixiao1989Artikel yang sangat berharga, saya belajar, terima kasih.
KebaikanTerima kasih atas suka Anda! Bersama-sama!