Bagaimana harga Bitcoin beraksi? Apakah sebab kenaikan dan penurunan harga mata wang digital? Adakah harga pasaran mata wang kripto yang berbeza saling berkaitan atau sebahagian besarnya bebas? Bagaimana kita boleh meramalkan apa yang akan berlaku seterusnya?
Artikel mengenai mata wang digital, seperti Bitcoin dan Ethereum, kini penuh dengan spekulasi, dengan beratus-ratus ahli yang mengaku-ngaku pakar menyokong trend yang mereka harapkan. Banyak analisis yang tidak mempunyai asas yang kukuh untuk data asas dan model statistik.
Tujuan artikel ini adalah untuk memberikan perkenalan ringkas mengenai analisis mata wang digital menggunakan Python. Kami akan mencari, menganalisis dan memvisualisasikan data dari mata wang digital yang berbeza melalui skrip Python yang mudah. Dalam perjalanan, kami akan menemui tingkah laku pasaran yang berfluktuasi ini dan trend menarik bagaimana ia berkembang.
Ini bukan artikel yang menerangkan mata wang digital, atau pandangan mengenai mata wang tertentu yang akan naik dan mana yang akan jatuh. Sebaliknya, kami hanya memberi tumpuan dalam tutorial ini untuk mendapatkan data mentah dan menemui cerita yang tersembunyi dalam angka.
Tutorial ini direka untuk digunakan oleh peminat, jurutera dan saintis data dari semua peringkat kemahiran, sama ada anda seorang ahli industri atau seorang pengaturcara kecil, satu-satunya kemahiran yang anda perlukan adalah pengetahuan asas mengenai bahasa pengaturcaraan Python dan pengetahuan yang mencukupi mengenai operasi baris arahan (untuk menubuhkan projek sains data).
发明者量化平台FMZ.COM除了提供优质的各大主流交易所的数据源,还提供一套丰富的API接口以帮助我们在完成数据的分析后进行自动化交易。这套接口包括查询账户信息,查询各个主流交易所的高,开,低,收价格,成交量,各种常用技术分析指标等实用工具,特别是对于实际交易过程中连接各大主流交易所的公共API接口,提供了强大的技术支持。
Semua ciri-ciri yang disebutkan di atas dikemas dalam sistem yang serupa dengan Docker, dan apa yang perlu kita lakukan ialah membeli atau menyewa perkhidmatan komputasi awan anda sendiri dan siapkan pelaksanaan sistem Docker.
Dalam nama rasmi platform kuantiti pencipta, sistem Docker ini dikenali sebagai sistem hosts.
Untuk maklumat mengenai cara menggunakan pentadbir dan bot, sila rujuk artikel saya sebelum ini:https://www.fmz.com/bbs-topic/4140
Untuk pembaca yang ingin membeli pelayan pelayaran pelayaran awan mereka sendiri, lihat artikel ini:https://www.fmz.com/bbs-topic/2848
Selepas berjaya menggunakan perkhidmatan dan sistem pentadbir awan yang baik, seterusnya kita akan memasang python terbesar: Anaconda
Untuk mewujudkan semua persekitaran program yang berkaitan yang diperlukan untuk artikel ini (dependencies, version management, dan lain-lain), cara yang paling mudah adalah dengan menggunakan Anaconda. Ia adalah ekosistem sains data Python yang terbungkus dan pengurus perpustakaan bergantung.
Oleh kerana kami memasang Anaconda pada perkhidmatan awan, kami mengesyorkan pelayan awan memasang versi Anaconda pada sistem Linux dengan baris perintah.
Untuk cara memasang Anaconda, sila lihat panduan rasmi Anaconda:https://www.anaconda.com/distribution/
Jika anda seorang pengaturcara Python yang berpengalaman dan tidak mahu menggunakan Anaconda, tidak ada masalah. Saya akan menganggap anda tidak memerlukan bantuan dalam memasang persekitaran bergantung yang diperlukan, anda boleh terus melompat ke bahagian kedua.
Setelah pemasangan Anaconda selesai, kita perlu membuat persekitaran baru untuk menguruskan pakej pergantungan kita.
conda create --name cryptocurrency-analysis python=3
Untuk mewujudkan persekitaran Anaconda baru untuk projek kami.
Seterusnya, masukkan
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
Untuk mengaktifkan persekitaran ini.
Seterusnya, masukkan:
conda install numpy pandas nb_conda jupyter plotly
Perisian ini mempunyai pelbagai pakej bergantung yang diperlukan untuk memasang projek ini.
Perhatian: Mengapa menggunakan persekitaran Anaconda? Jika anda merancang untuk menjalankan banyak projek Python di komputer anda, ia adalah sangat membantu untuk mengelakkan konflik dengan memisahkan pakej pergantungan yang berlainan (paket perisian dan pakej).
Apabila persekitaran dan pakej pergantungan telah dipasang, berjalan.
jupyter notebook
Untuk memulakan kernel Python, gunakan penyemak imbas anda untuk mengakses http://localhost:8888/Untuk membuat buku nota Python baru, pastikan ia menggunakan:
Python [conda env:cryptocurrency-analysis]
Nukleus
Buat satu notebook Jupyter kosong baru, dan perkara pertama yang perlu kita lakukan ialah mengimport pakej bergantung yang diperlukan.
import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime
Kami juga perlu mengimport Plotly dan mulakan mod luar talian.
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
Kerja persediaan telah selesai, dan sekarang kita boleh mula mendapatkan data untuk dianalisis. Pertama, kita akan mendapatkan data harga Bitcoin dengan menggunakan antara muka API platform pencipta untuk mengukur.
Ini akan menggunakan fungsi GetTicker, untuk maklumat mengenai kegunaan kedua-dua fungsi, sila lihat:https://www.fmz.com/api
Untuk mendapatkan data yang mudah, kita perlu menulis fungsi untuk memuat turun dan menyelaraskan data dari Quandl.quandl.comIni adalah antara muka data kewangan percuma yang sangat terkenal di luar negara. Platform kuantiti pencipta juga menyediakan antara muka data yang serupa, terutama untuk digunakan semasa perdagangan sebenar, kerana artikel ini terutamanya untuk analisis data, di sini kita menggunakan data Quandl.
Apabila berdagang secara langsung, anda boleh memanggil fungsi GetTicker dan GetRecords secara langsung di Python untuk mendapatkan data harga. Untuk kegunaan 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
Di sini, perpustakaan pickle digunakan untuk mengurutkan data dan menyimpan data yang dimuat turun ke dalam fail supaya program tidak memuat turun semula data yang sama setiap kali dijalankan. Fungsi ini akan mengembalikan data dalam format bingkai data Panda. Jika anda tidak begitu biasa dengan konsep bingkai data, anda boleh membayangkan ia sebagai satu bentuk Excel yang kuat.
Mari kita gunakan pertukaran Bitcoin Kraken sebagai contoh dan mulakan dengan harga Bitcoin yang diperolehnya.
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
Menggunakan kaedah head (() untuk melihat lima baris pertama dalam bingkai data.
btc_usd_price_kraken.head()
Hasilnya ialah:
BTC | Terbuka | Tinggi | Rendah | Tutup | Jumlah (BTC) | Volume (Mata wang) | Harga Bertingkat |
---|---|---|---|---|---|---|---|
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 |
Seterusnya, kita akan membuat jadual mudah untuk mengesahkan kebenaran data dengan kaedah visual.
# 做出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的充分交互式图表。这些图表有非常漂亮的默认设置,易于探索,而且非常方便嵌入到网页中。
Petua kecil: Jadual yang dihasilkan boleh dibandingkan dengan carta harga Bitcoin di bursa utama (seperti carta di OKEX, Binance atau Huobi) sebagai pemeriksaan integriti yang cepat untuk mengesahkan sama ada data yang dimuat turun adalah hampir sama.
Pembaca yang berhati-hati mungkin telah menyedari bahawa terdapat data yang hilang dalam data di atas, terutamanya pada akhir tahun 2014 dan awal tahun 2016.
Pertukaran mata wang digital mempunyai ciri bahawa hubungan bekalan dan permintaan menentukan harga mata wang tersebut. Oleh itu, tidak ada harga dagangan yang dapat menjadi harga utama pasaran. Untuk menyelesaikan masalah ini, dan masalah kekurangan data yang baru-baru ini disebutkan (mungkin disebabkan oleh gangguan teknologi dan kesalahan data), kami akan memuat turun data dari tiga bursa mata wang utama di dunia untuk mengira harga purata Bitcoin.
Mari kita mulakan dengan memuat turun data dari setiap bursa ke dalam set data yang terdiri daripada 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
Pada langkah seterusnya, kita akan menentukan fungsi khas untuk menggabungkan barisan yang dikongsi oleh setiap barisan data menjadi barisan data baru. Mari kita panggilnya 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)
Kini, harga pangkat pangkat berdasarkan set data yang berbeza akan disusun, dan semua pangkat data akan disatukan.
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
Akhirnya, kami menggunakan kaedah penjumlahan untuk melihat lima baris terakhir data yang digabungkan untuk memastikan data adalah betul dan lengkap.
btc_usd_datasets.tail()
Hasilnya ialah:
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 jadual di atas, anda dapat melihat bahawa data ini sesuai dengan jangkaan kami, dengan jumlah data yang hampir sama, hanya sedikit berbeza berdasarkan kelewatan atau ciri masing-masing bursa.
Dari segi logik analisis, langkah seterusnya adalah dengan memvisualisasikan dan membandingkan data ini. Untuk ini, kita perlu menentukan fungsi tambahan terlebih dahulu, dengan memberikan perintah baris tunggal untuk menghasilkan grafik menggunakan data, mari kita panggilnya 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 membincangkan terlalu banyak mengenai prinsip logik fungsi bantu ini. Untuk mengetahui lebih lanjut, sila lihat dokumen arahan rasmi Pandas dan Plotly.
Sekarang, kita boleh membuat grafik harga Bitcoin dengan mudah!
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Dari grafik di atas, kita dapat melihat bahawa walaupun keempat siri data ini mengikuti laluan yang hampir sama, terdapat beberapa perubahan yang tidak teratur di dalamnya, dan kita akan berusaha membersihkan perubahan yang tidak teratur ini.
Dalam tempoh 2012-2017, kita tahu bahawa harga Bitcoin tidak pernah sama dengan sifar, jadi kita mulakan dengan membuang semua sifar dalam kotak data.
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
Selepas membina semula datar, kita dapat melihat grafik yang lebih jelas tanpa kehilangan data.
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Kami kini boleh mengira barisan baru: harga purata harian Bitcoin di semua bursa.
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
Barisan baru adalah indeks harga Bitcoin! Kami melukisnya semula untuk memeriksa sama ada data itu kelihatan bermasalah.
# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])
Nampaknya tidak ada masalah, dan kemudian, kita akan terus menggunakan data siri harga yang dijumlahkan ini untuk menentukan kadar pertukaran antara mata wang digital lain dan dolar.
Setakat ini, kita sudah mempunyai data siri masa harga Bitcoin. Seterusnya kita akan melihat beberapa data mata wang digital bukan Bitcoin, iaitu mata wang kripto (Altcoins), tentu saja, kata kripto mungkin agak berlebihan, tetapi mengenai perkembangan mata wang digital pada masa ini, kecuali 10 mata wang kripto dengan nilai pasaran teratas (seperti Bitcoin, Ethereum, EOS, USDT, dll.), kebanyakan boleh dipanggil kripto tidak ada masalah, dan kita harus menjauhkan diri dari mata wang kripto ini ketika berdagang kerana mereka terlalu mengelirukan dan menipu.
Pertama, kami menggunakan API Bursa Poloniex untuk mendapatkan maklumat mengenai transaksi mata wang digital. Kami mentakrifkan dua fungsi tambahan untuk mendapatkan data yang berkaitan dengan syiling, kedua-duanya adalah untuk memuat turun dan menyimpan data JSON melalui API.
Pertama, kita tentukan fungsi get_json_data, yang akan memuat turun 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
Seterusnya, kita mentakrifkan fungsi baru yang akan menghasilkan permintaan HTTP dari API Poloniex dan memanggil fungsi get_json_data yang baru ditakrifkan 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 mengambil kod mata wang digital yang dipasangkan (seperti mata wang BTC_ETH) dan mengembalikan datar yang mengandungi kedua-dua harga sejarah mata wang.
Kebanyakan kriptocurrency tidak boleh dibeli secara langsung dengan dolar, individu yang ingin mendapatkan mata wang digital ini biasanya perlu membeli bitcoin terlebih dahulu dan menukarnya kepada kriptocurrency mengikut nisbah harga antara mereka. Oleh itu, kita perlu memuat turun kadar pertukaran setiap mata wang digital untuk menukar bitcoin, dan kemudian menukarnya kepada dolar menggunakan data harga bitcoin yang ada. Kami memuat turun data transaksi mata wang digital ke-9 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
Kini, kami mempunyai kamus yang mengandungi sembilan set data, yang masing-masing mengandungi data purata harga harian antara Bitcoin dan Bitcoin.
Kami boleh menilai sama ada data tersebut betul atau tidak dengan melihat beberapa baris terakhir dalam jadual harga Ethereum.
altcoin_data['ETH'].tail()
ETH | Terbuka | Tinggi | Rendah | Tutup | Jumlah (BTC) | Volume (Mata wang) | Harga Bertingkat |
---|---|---|---|---|---|---|---|
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 boleh menggabungkan data pertukaran BTC dengan Bitcoin dengan indeks harga Bitcoin kami untuk mengira harga sejarah setiap 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 menambah satu barisan baru untuk setiap kotak data untuk menyimpan harga dolar yang sesuai.
Kemudian, kita boleh menggunakan semula fungsi merge_dfs_on_column yang telah ditakrifkan sebelum ini untuk membina satu datar gabungan yang mengintegrasikan harga dolar setiap mata wang digital.
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
Sudah selesai!
Sekarang, mari kita tambah harga Bitcoin sebagai satu-satunya titik terakhir dalam datar yang disatukan.
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
Sekarang kami mempunyai satu-satunya datar yang mengandungi harga dolar harian untuk 10 mata wang digital yang kami periksa.
Kami memanggil semula fungsi df_scatter sebelum ini untuk menunjukkan harga yang sepadan untuk semua syiling dalam bentuk carta.
Grafik ini menunjukkan kepada kita gambaran keseluruhan mengenai perubahan harga pertukaran setiap mata wang digital selama beberapa tahun yang lalu.
Nota: Di sini kita menggunakan y-axis spesifikasi logaritma untuk membandingkan semua mata wang digital pada gambar yang sama. Anda juga boleh mencuba nilai parameter lain yang berbeza (misalnya skala =
Pembaca yang berhati-hati mungkin perhatikan bahawa harga mata wang digital nampaknya berkaitan, walaupun mereka mempunyai perbezaan besar dalam nilai mata wang dan sangat tidak menentu. Terutamanya sejak kenaikan pesat pada bulan April 2017, walaupun banyak turun naik kecil nampaknya berlaku bersamaan dengan turun naik pasaran secara keseluruhan.
Sudah tentu, kesimpulan yang disokong oleh data lebih meyakinkan daripada intuisi berdasarkan imej.
Kita boleh menggunakan fungsi Pandas untuk mengesahkan hipotesis kaitan di atas. Kajian ini mengira perpaduan Pearson yang berkaitan dengan setiap lapisan lain.
2017.8.22 Nota Perubahan: Bahagian ini diubah untuk menggunakan kadar pulangan harian dan bukannya nilai mutlak harga untuk mengira faktor yang berkaitan.
Pengiraan langsung berdasarkan siri masa bukan statik (misalnya data harga mentah) mungkin menyebabkan penyimpangan dalam faktor perkaitan. Untuk masalah ini, penyelesaian kami adalah menggunakan kaedah pct_change (), yang mengubah nilai mutlak setiap harga dalam set data menjadi kadar pulangan harian yang sesuai.
Sebagai contoh, mari kita hitung faktor yang berkaitan 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 faktor berkaitan. Faktor yang hampir 1 atau -1 bermaksud bahawa urutan ini adalah berkaitan positif atau sebaliknya, dan faktor berkaitan yang hampir 0 menunjukkan bahawa objek yang berkaitan tidak berkaitan, dan turun naik mereka adalah bebas antara satu sama lain.
Untuk menunjukkan hasil penglihatan yang lebih baik, kami mencipta fungsi bantuan penglihatan 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 perkaitan yang kuat (setiap mata wang jelas berkaitan dengan ketinggian mereka sendiri), dan nilai biru gelap menunjukkan perkaitan terbalik. Semua warna di antara - biru muda / oranye / kelabu / coklat - mempunyai nilai yang berbeza yang mewakili perkaitan yang lemah atau tidak berkaitan.
Pada asasnya, ia menunjukkan turun naik harga mata wang digital yang berbeza pada tahun 2016 dengan hampir tiada kaitan statistik yang ketara.
Sekarang, untuk mengesahkan hipotesis kami bahawa mata wang digital telah meningkatkan relevansi dalam beberapa bulan kebelakangan ini, kami akan mengulangi ujian yang sama menggunakan data yang bermula 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 |
Adakah data di atas lebih relevan? Adakah ia cukup untuk menjadi kriteria penilaian pelaburan?
Walau bagaimanapun, perlu diperhatikan bahawa hampir semua mata wang digital telah menjadi semakin saling berkaitan.
correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")
Seperti yang dapat dilihat dari gambar di atas, perkara menjadi semakin menarik.
Tetapi hakikatnya, saya juga tidak pasti...
Reaksi pertama saya adalah bahawa dana lindung nilai baru-baru ini mula berdagang secara terbuka di pasaran mata wang digital. Dana-dana ini memegang modal yang jauh lebih besar daripada pedagang biasa, apabila dana melindungi modal masuknya di antara pelbagai mata wang digital, maka menggunakan strategi perdagangan yang serupa untuk setiap mata wang berdasarkan pembolehubah bebas (misalnya, pasaran saham).
Memahami XRP dan STR dengan lebih mendalam
Sebagai contoh, dapat dilihat dengan jelas dari grafik di atas bahawa XRP (token Ripple) mempunyai hubungan paling rendah dengan mata wang digital lain. Tetapi satu pengecualian yang patut diperhatikan adalah STR (token Stellar, nama rasmi adalah "Lumens"), yang mempunyai hubungan yang kuat dengan XRP (koefisien hubungan: 0.62).
Menariknya, Stellar dan Ripple adalah platform Fintech yang sangat serupa, yang masing-masing bertujuan untuk mengurangkan langkah-langkah yang rumit dalam pemindahan antara bank-bank antara negara. Diharapkan, memandangkan kesamaan perkhidmatan blockchain menggunakan token, beberapa pemain besar dan dana lindung nilai mungkin menggunakan strategi perdagangan yang sama untuk pelaburan mereka di Stellar dan Ripple. Ini mungkin mengapa XRP mempunyai kaitan yang lebih kuat dengan STR berbanding mata wang digital lain.
Terutama, penjelasan di atas adalah spekulatif, mungkin anda akan melakukannya dengan lebih baik. Berdasarkan asas yang telah kita bina, anda mempunyai beratus-ratus cara yang berbeza untuk terus meneroka cerita yang tersembunyi dalam data.
Di bawah ini adalah beberapa cadangan saya yang boleh digunakan oleh pembaca untuk membuat kajian lanjut ke arah ini:
Bahagian terbaik mengenai Bitcoin, dan mata wang digital secara keseluruhan, adalah sifatnya yang terdesentralisasi, yang menjadikannya lebih bebas, lebih demokratik daripada aset lain. Anda boleh berkongsi analisis anda secara terbuka, menyertai komuniti, atau menulis blog!https://www.fmz.com/bbsMenerusi laman Facebook beliau,
ruixiao1989Artikel yang sangat berharga, saya belajar, terima kasih.
KebaikanTerima kasih kerana suka! Bersama-sama!