0
fokus pada
78
Pengikut

Analisis kuantitatif pasar mata uang digital

Dibuat di: 2019-08-16 10:37:23, diperbarui pada: 2023-10-19 21:04:20
comments   3
hits   3748

Analisis kuantitatif pasar mata uang digital

Pendekatan berbasis data untuk menganalisis spekulasi mata uang digital

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.

Analisis kuantitatif pasar mata uang digital

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.

Langkah 1: Bangun lingkungan kerja data kita

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).

1.1 Instal Inventor Quant Host dan Siapkan Anaconda

  • Penemu Sistem Kustodian Terukur

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.

1.2 Membuat lingkungan proyek analisis data Anaconda

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.

1.3 Membuat Buku Catatan Jupyter

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

Analisis kuantitatif pasar mata uang digital

1.4 Mengimpor paket dependen

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)

Langkah 2: Dapatkan informasi harga mata uang digital

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

2.1 Tulis fungsi pengumpulan data Quandl

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.

2.2 Memperoleh data harga mata uang kripto dari bursa Kraken

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])

Analisis kuantitatif pasar mata uang digital

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.

2.3 Memperoleh data harga dari bursa Bitcoin utama

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

2.4 Integrasikan semua data ke dalam satu bingkai data

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.

2.5 Proses Visualisasi Data Harga

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')

Analisis kuantitatif pasar mata uang digital

2.6 Data harga bersih dan agregat

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')

Analisis kuantitatif pasar mata uang digital

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])

Analisis kuantitatif pasar mata uang digital

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.

Langkah 3: Kumpulkan harga altcoin

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.

3.1 Mendefinisikan fungsi tambahan melalui API pertukaran Poloniex

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&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

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.

3.2 Mengunduh data harga transaksi dari Poloniex

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

3.3 Semua data harga harus dinyatakan dalam dolar AS

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.

Analisis kuantitatif pasar mata uang digital

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.

3.4 Mulai analisis korelasi

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")

Analisis kuantitatif pasar mata uang digital

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")

Analisis kuantitatif pasar mata uang digital

Seperti yang Anda lihat pada gambar di atas, segala sesuatunya menjadi semakin menarik.

Mengapa hal ini terjadi?

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.

Oke, giliran Anda!

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:

  • Menambahkan data tentang lebih banyak mata uang kripto ke analisis keseluruhan
  • Sesuaikan rentang waktu dan tingkat ketelitian analisis korelasi untuk memperoleh tampilan tren yang lebih rinci atau kasar.
  • Temukan tren dalam volume transaksi atau penambangan data blockchain. Jika Anda ingin memprediksi fluktuasi harga di masa mendatang, Anda mungkin memerlukan data rasio volume beli/jual lebih dari data harga mentah.
  • Tambahkan data harga pada saham, komoditas, dan mata uang fiat untuk menentukan mana di antara mereka yang berkorelasi dengan mata uang kripto (tetapi ingat pepatah lama “korelasi tidak menyiratkan sebab akibat”)
  • Gunakan Event Registry, GDELT, dan Google Trends untuk mengukur jumlah “kata-kata populer” seputar mata uang kripto tertentu.
  • Gunakan data untuk melatih model pembelajaran mesin prediktif untuk memprediksi harga besok. Jika Anda merasa lebih ambisius, Anda bahkan dapat mempertimbangkan untuk mencoba melakukan pelatihan di atas dengan Recurrent Neural Network (RNN).
  • Gunakan analisis Anda untuk membuat bot perdagangan otomatis yang dapat digunakan di situs web pertukaran seperti “Poloniex” atau “Coinbase” melalui antarmuka pemrograman aplikasi (API) yang sesuai. Hati-hati: bot yang berkinerja buruk dapat dengan mudah menghapus aset Anda dalam sekejap. Disarankan untuk menggunakan platform kuantitatif penemu FMZ.COM.

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.