0
fokus pada
78
Pengikut

Analisis kuantitatif pasaran mata wang digital

Dicipta dalam: 2019-08-16 10:37:23, dikemas kini pada: 2023-10-19 21:04:20
comments   3
hits   3748

Analisis kuantitatif pasaran mata wang digital

Pendekatan dipacu data untuk menganalisis spekulasi mata wang digital

Bagaimanakah prestasi harga Bitcoin? Apakah yang menyebabkan harga mata wang kripto melambung dan menjunam? Adakah harga pasaran altcoin yang berbeza berkait rapat atau adakah ia sebahagian besarnya bebas? Bagaimana kita meramalkan apa yang akan berlaku seterusnya?

Artikel tentang mata wang digital, seperti Bitcoin dan Ethereum, kini penuh dengan spekulasi, dengan beratus-ratus pakar yang mendakwa diri mereka menyokong trend yang mereka jangka akan muncul. Apa yang hilang daripada kebanyakan analisis ini ialah asas yang kukuh dalam data asas dan model statistik.

Matlamat artikel ini adalah untuk memberikan pengenalan ringkas kepada analisis mata wang kripto menggunakan Python. Kami akan melalui skrip Python mudah untuk mendapatkan, menganalisis dan memvisualisasikan data untuk mata wang kripto yang berbeza. Sepanjang perjalanan, kami akan menemui arah aliran menarik dalam gelagat pasaran yang tidak menentu ini dan cara ia berkembang.

Analisis kuantitatif pasaran mata wang digital

Ini bukan artikel yang menerangkan mata wang kripto, dan juga bukan satu pendapat tentang mata wang tertentu akan meningkat dan mana yang akan jatuh. Sebaliknya, tumpuan kami dalam tutorial ini hanyalah mengambil data mentah dan menemui cerita yang tersembunyi dalam nombor.

Langkah 1: Bina persekitaran kerja data kami

Tutorial ini direka bentuk untuk peminat, jurutera dan saintis data dari semua peringkat kemahiran Sama ada anda pakar industri atau pemula pengaturcaraan, satu-satunya kemahiran yang anda perlukan ialah pemahaman asas bahasa pengaturcaraan Python dan pengetahuan yang mencukupi tentang operasi baris arahan. (Dapat menyediakan projek sains data akan berjaya).

1.1 Pasang Inventor Quant Host dan Sediakan Anaconda

  • Pencipta Sistem Penjaga Kuantitatif

Selain menyediakan sumber data berkualiti tinggi daripada bursa arus perdana utama, Inventor Quantitative Platform FMZ.COM juga menyediakan set antara muka API yang kaya untuk membantu kami melakukan transaksi automatik selepas menyelesaikan analisis data. Set antara muka ini termasuk alat praktikal seperti menanyakan maklumat akaun, menanya harga tinggi, pembukaan, rendah, penutupan, volum dagangan, pelbagai penunjuk analisis teknikal yang biasa digunakan bagi pelbagai bursa arus perdana, dsb., terutamanya untuk menyambung ke bursa arus perdana utama secara sebenar. proses perdagangan Antara muka API awam menyediakan sokongan teknikal yang berkuasa.

Semua fungsi yang disebutkan di atas dirangkumkan dalam sistem yang serupa dengan Docker Apa yang perlu kita lakukan ialah membeli atau menyewa perkhidmatan pengkomputeran awan kita sendiri dan kemudian menggunakan sistem Docker.

Atas nama rasmi Platform Kuantitatif Inventor, sistem Docker ini dipanggil sistem hos.

Untuk mendapatkan maklumat lanjut tentang cara menggunakan hos dan robot, sila rujuk artikel saya sebelum ini: https://www.fmz.com/bbs-topic/4140

Pembaca yang ingin membeli hos penggunaan pelayan pengkomputeran awan mereka sendiri boleh merujuk artikel ini: https://www.fmz.com/bbs-topic/2848

Selepas berjaya menggunakan perkhidmatan pengkomputeran awan dan sistem hos, kami akan memasang alat Python yang paling berkuasa: Anaconda

Untuk mencapai semua persekitaran program yang berkaitan yang diperlukan untuk artikel ini (pustaka bergantung, pengurusan versi, dll.), cara paling mudah ialah menggunakan Anaconda. Ia adalah ekosistem sains data Python yang dibungkus dan pengurus pergantungan.

Memandangkan kami memasang Anaconda pada perkhidmatan awan, kami mengesyorkan anda memasang sistem Linux serta versi baris arahan Anaconda pada pelayan awan.

Untuk kaedah pemasangan Anaconda, sila rujuk panduan rasmi Anaconda: https://www.anaconda.com/distribution/

Jika anda seorang pengaturcara Python yang berpengalaman dan tidak merasakan keperluan untuk menggunakan Anaconda, itu tidak mengapa. Saya akan menganggap bahawa anda tidak memerlukan bantuan untuk memasang kebergantungan yang diperlukan dan anda boleh melangkau ke Bahagian 2.

1.2 Cipta persekitaran projek analisis data Anaconda

Selepas Anaconda dipasang, kami perlu mencipta persekitaran baharu untuk menguruskan pakej pergantungan kami. Dalam antara muka baris arahan Linux, kami masukkan:

conda create --name cryptocurrency-analysis python=3

Mari cipta persekitaran Anaconda baharu 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

Untuk memasang pelbagai pakej pergantungan yang diperlukan untuk projek ini.

Nota: Mengapa menggunakan persekitaran Anaconda? Jika anda merancang untuk menjalankan banyak projek Python pada komputer anda, adalah berguna untuk memisahkan kebergantungan (perpustakaan dan pakej) projek yang berbeza untuk mengelakkan konflik. Ananconda mencipta direktori persekitaran khas untuk pakej pergantungan setiap projek supaya semua pakej boleh diurus dan dibezakan dengan betul.

1.3 Cipta Buku Nota Jupyter

Selepas persekitaran dan pakej kebergantungan dipasang, jalankan

jupyter notebook

untuk memulakan kernel iPython, kemudian arahkan penyemak imbas anda ke http://localhost:8888/ dan buat buku nota Python baharu, pastikan ia menggunakan:

Python [conda env:cryptocurrency-analysis]

Inti

Analisis kuantitatif pasaran mata wang digital

1.4 Mengimport pakej bergantung

Cipta buku nota Jupyter kosong baharu dan perkara pertama yang perlu kita lakukan ialah mengimport pakej pergantungan yang diperlukan.

import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime

Kami juga perlu mengimport Plotly dan mendayakan 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)

Langkah 2: Dapatkan maklumat harga mata wang digital

Setelah persediaan selesai, kita boleh mula memperoleh data untuk dianalisis. Pertama, kita perlu menggunakan antara muka API Platform Kuantitatif Pencipta untuk mendapatkan data harga Bitcoin.

Ini akan menggunakan fungsi GetTicker Untuk butiran tentang penggunaan kedua-dua fungsi ini, sila lihat: https://www.fmz.com/api

2.1 Menulis fungsi pengumpulan data Quandl

Untuk memudahkan pemerolehan data, kita perlu menulis fungsi untuk memuat turun dan menyegerakkan data daripada Quandl (quandl.com). Ini adalah antara muka data kewangan percuma yang sangat terkenal di luar negara. Platform Kuantitatif Inventor juga menyediakan antara muka data yang serupa, yang digunakan terutamanya untuk dagangan masa nyata Memandangkan artikel ini adalah untuk analisis data, kami masih menggunakan data Quandl di sini.

Apabila berdagang dalam masa nyata, anda boleh menghubungi terus fungsi GetTicker dan GetRecords dalam Python untuk mendapatkan data harga Untuk penggunaannya, sila rujuk: 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 acar digunakan di sini untuk mensirikan data dan menyimpan data yang dimuat turun sebagai fail, supaya program tidak memuat turun semula data yang sama setiap kali ia dijalankan. Fungsi ini akan mengembalikan data dalam format Pandas Dataframe. Jika anda tidak biasa dengan konsep bingkai data, anggap ia sebagai hamparan Excel yang berkuasa.

2.2 Mendapatkan data harga mata wang kripto daripada bursa Kraken

Mari gunakan pertukaran Bitcoin Kraken sebagai contoh dan mulakan dengan mendapatkan harga Bitcoinnya.

# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')

Gunakan kaedah head() untuk melihat lima baris pertama bingkai data.

btc_usd_price_kraken.head()

Hasilnya ialah:

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

Seterusnya, kita perlu membuat jadual mudah untuk mengesahkan ketepatan 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 pasaran mata wang digital

Di sini, kami menggunakan Plotly untuk melengkapkan bahagian visualisasi. Plotly ialah pilihan yang kurang biasa berbanding menggunakan beberapa pustaka visualisasi data Python yang lebih matang, seperti Matplotlib, tetapi ia adalah pilihan yang baik kerana ia boleh menghubungi D3.js untuk carta interaktif sepenuhnya. Carta mempunyai tetapan lalai yang sangat bagus, mudah untuk diterokai dan sangat mudah untuk dibenamkan dalam halaman web.

Petua: Anda boleh membandingkan carta yang dijana dengan carta harga Bitcoin daripada bursa utama (seperti yang terdapat di OKEX, Binance atau Huobi) sebagai semakan kewarasan pantas untuk mengesahkan bahawa data yang dimuat turun adalah kira-kira konsisten.

2.3 Mendapatkan data harga daripada pertukaran Bitcoin utama

Pembaca yang berhati-hati mungkin menyedari bahawa terdapat data yang hilang dalam data di atas, terutamanya pada akhir 2014 dan awal 2016. Jurang data ini amat ketara dalam pertukaran Kraken. Kami pastinya tidak mahu data yang hilang ini menjejaskan analisis harga kami.

Ciri pertukaran mata wang digital ialah harga mata wang ditentukan oleh penawaran dan permintaan. Oleh itu, tiada harga transaksi boleh menjadi “harga arus perdana” pasaran. Untuk menangani isu ini, serta masalah data yang hilang yang disebutkan di atas (mungkin disebabkan oleh gangguan teknikal dan ralat data), kami akan memuat turun data daripada tiga bursa Bitcoin utama di dunia dan mengira purata harga Bitcoin.

Mari mulakan dengan memuat turun data untuk setiap pertukaran ke dalam bingkai 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

2.4 Mengintegrasikan semua data ke dalam satu bingkai data

Seterusnya, kami akan mentakrifkan fungsi khas untuk menggabungkan lajur biasa daripada setiap bingkai data ke dalam bingkai data baharu. Mari kita panggil 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 bingkai data bersama-sama berdasarkan lajur “harga wajaran” bagi setiap set data.

# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')

Akhir sekali, kami menggunakan kaedah “tail()” untuk melihat lima baris terakhir data yang digabungkan untuk memastikan data itu 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

Seperti yang anda boleh lihat daripada jadual di atas, data ini selaras dengan jangkaan kami Julat data adalah lebih kurang sama, tetapi terdapat sedikit perbezaan berdasarkan kependaman atau ciri setiap pertukaran.

2.5 Proses Visualisasi Data Harga

Dari perspektif logik analitikal, langkah seterusnya ialah membandingkan data ini melalui visualisasi. Untuk melakukan ini, kita perlu terlebih dahulu mentakrifkan fungsi pembantu yang menggunakan data untuk membuat carta dengan menyediakan arahan baris tunggal Mari kita panggil 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 pemahaman mudah anda, artikel ini tidak akan membincangkan prinsip logik fungsi tambahan ini secara terperinci. Jika anda ingin mengetahui lebih lanjut, lihat dokumentasi rasmi untuk Pandas dan Plotly.

Kini kita boleh membuat graf data harga Bitcoin dengan mudah!

# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

Analisis kuantitatif pasaran mata wang digital

2.6 Bersihkan dan agregat data harga

Seperti yang anda boleh lihat daripada graf di atas, walaupun empat siri mengikut laluan yang hampir sama, terdapat beberapa penyelewengan di dalamnya, yang akan kami cuba selesaikan.

Dalam tempoh 2012-2017, kami tahu bahawa harga Bitcoin tidak pernah sama dengan sifar, jadi kami mula-mula mengalih keluar semua nilai sifar dalam bingkai data.

# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)

Selepas membina semula bingkai data, kita dapat melihat graf yang lebih jelas tanpa data yang hilang.

# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

Analisis kuantitatif pasaran mata wang digital

Kini kami boleh mengira lajur baharu: purata harga harian Bitcoin merentas semua bursa.

# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)

Lajur baharu ialah indeks harga Bitcoin! Mari kita rancang sekali lagi untuk memeriksa sama ada terdapat sesuatu yang salah dengan data.

# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])

Analisis kuantitatif pasaran mata wang digital

Nampaknya tiada masalah, dan kami akan terus menggunakan data siri harga agregat ini kemudian untuk dapat menentukan kadar pertukaran antara mata wang kripto lain dan dolar AS.

Langkah 3: Kumpul harga altcoin

Setakat ini, kami mempunyai data siri masa untuk harga Bitcoin. Seterusnya, mari kita lihat beberapa data mengenai mata wang digital bukan Bitcoin, iaitu altcoin Sudah tentu, istilah altcoin mungkin agak terlalu kuat, tetapi bagi perkembangan semasa mata wang digital, sebagai tambahan kepada kedudukan permodalan pasaran Kebanyakan. sepuluh teratas (seperti Bitcoin, Ethereum, EOS, USDT, dll.) boleh dipanggil altcoin Tidak ada masalah Kita harus cuba menjauhi mata wang ini apabila berdagang kerana ia terlalu mengelirukan dan menipu.

3.1 Mentakrifkan fungsi tambahan melalui API pertukaran Poloniex

Pertama, kami menggunakan API pertukaran Poloniex untuk mendapatkan maklumat data mengenai transaksi mata wang digital. Kami mentakrifkan dua fungsi tambahan untuk mendapatkan data altcoin yang berkaitan Kedua-dua fungsi ini terutamanya memuat turun dan menyimpan data JSON melalui API.

Mula-mula, kami mentakrifkan fungsi get_json_data, yang akan memuat turun dan menyimpan data JSON daripada 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, kami mentakrifkan fungsi baharu yang akan membuat permintaan HTTP kepada API Poloniex dan memanggil fungsi get_json_data yang baru kami tentukan untuk menyimpan hasil panggilan.

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 kod rentetan pasangan mata wang kripto (seperti “BTC_ETH”) dan mengembalikan bingkai data yang mengandungi harga sejarah kedua-dua mata wang.

3.2 Memuat turun data harga transaksi daripada Poloniex

Kebanyakan altcoin tidak boleh dibeli secara langsung menggunakan dolar A.S. Jika individu ingin mendapatkan mata wang digital ini, mereka biasanya perlu membeli Bitcoin dahulu dan kemudian menukarnya dengan altcoin berdasarkan nisbah harga antara mereka. Oleh itu, kita perlu memuat turun kadar pertukaran untuk setiap mata wang digital kepada Bitcoin, dan kemudian menggunakan data harga Bitcoin sedia ada untuk menukar kepada dolar AS. Kami akan memuat turun data transaksi untuk 9 mata wang 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 kini mempunyai kamus yang mengandungi 9 bingkai data, setiap satu mengandungi data harga purata harian sejarah antara altcoin dan Bitcoin.

Kita boleh menentukan sama ada data itu betul dengan melihat beberapa baris terakhir jadual 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 hendaklah dinyatakan dalam dolar AS

Kami kini boleh menggabungkan data kadar pertukaran BTC kepada altcoin dengan Indeks Harga Bitcoin kami untuk mengira secara langsung harga sejarah 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 menambah lajur baharu pada bingkai data bagi setiap altcoin untuk menyimpan harga USD yang sepadan.

Seterusnya, kami boleh menggunakan semula fungsi merge_dfs_on_column yang kami takrifkan sebelum ini untuk mencipta rangka data gabungan yang menyepadukan harga USD bagi setiap mata wang kripto.

# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')

Selesai!

Sekarang mari kita tambahkan juga harga Bitcoin sebagai lajur terakhir pada bingkai data yang digabungkan.

# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']

Kini kami mempunyai bingkai data unik yang mengandungi harga USD harian untuk sepuluh mata wang kripto yang kami sahkan.

Kami memanggil fungsi sebelumnya df_scatter sekali lagi untuk memaparkan harga yang sepadan bagi semua altcoin dalam bentuk carta.

Analisis kuantitatif pasaran mata wang digital

Carta itu kelihatan baik, dan ia memberi kita gambaran lengkap tentang bagaimana harga pertukaran setiap mata wang kripto telah berubah sejak beberapa tahun lalu.

Nota: Di sini kami telah menggunakan paksi-y logaritma untuk membandingkan semua mata wang kripto pada graf yang sama. Anda juga boleh mencuba nilai parameter yang berbeza (seperti skala=‘linear’) untuk memahami data dari perspektif yang berbeza.

3.4 Mulakan analisis korelasi

Pembaca yang berhati-hati mungkin menyedari bahawa harga mata wang digital kelihatan berkorelasi, walaupun nilai monetarinya berbeza-beza secara meluas dan sangat tidak menentu. Terutama sejak kenaikan pesat pada April 2017, malah banyak turun naik kecil nampaknya berlaku selari dengan turun naik keseluruhan pasaran.

Sudah tentu, kesimpulan yang disokong oleh data lebih meyakinkan daripada intuisi berdasarkan imej.

Kita boleh menggunakan fungsi Pandas corr() untuk mengesahkan hipotesis korelasi di atas. Ujian ini mengira pekali korelasi Pearson untuk setiap lajur bingkai data dengan setiap lajur lain.

2017.8.22 Nota Semakan: Bahagian ini telah diubah suai untuk menggunakan pulangan harian dan bukannya harga mutlak semasa mengira pekali korelasi.

Pengiraan langsung berdasarkan siri masa bukan pepejal (seperti data harga mentah) boleh membawa kepada penyelewengan dalam pekali korelasi. Penyelesaian kami kepada masalah ini ialah menggunakan kaedah pct_change() untuk menukar nilai mutlak setiap harga dalam bingkai data kepada kadar pulangan harian yang sepadan.

Sebagai contoh, mari kita hitung pekali korelasi untuk 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

Graf di atas menunjukkan pekali korelasi. Pekali hampir 1 atau -1 bermakna jujukan itu berkorelasi positif atau berkorelasi songsang, masing-masing Pekali korelasi hampir 0 bermakna objek yang sepadan tidak berkorelasi dan turun naiknya adalah bebas antara satu sama lain.

Untuk menggambarkan hasil dengan lebih baik, kami mencipta fungsi pembantu visualisasi baharu.

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 pasaran mata wang digital

Di sini, nilai merah gelap mewakili korelasi yang kuat (setiap syiling jelas sangat berkorelasi dengan dirinya sendiri), dan nilai biru tua mewakili korelasi songsang. Semua warna di antaranya - biru muda/oren/kelabu/coklat - mempunyai nilai yang mewakili pelbagai darjah korelasi lemah atau tiada korelasi.

Apakah gambar ini memberitahu kita? Pada peringkat asas, ia menunjukkan bagaimana harga mata wang kripto yang berbeza berubah-ubah sepanjang tahun 2016, dengan sedikit korelasi yang signifikan secara statistik.

Sekarang, untuk mengesahkan hipotesis kami bahawa “mata wang kripto telah menjadi lebih berkorelasi dalam beberapa bulan kebelakangan ini”, kami akan mengulangi ujian yang sama menggunakan data dari 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

Adakah data ini lebih relevan? Adakah ia mencukupi untuk dijadikan sebagai kriteria untuk pelaburan? Jawapannya tidak.

Walau bagaimanapun, perlu diingat bahawa hampir semua mata wang kripto telah menjadi semakin saling berkaitan.

correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")

Analisis kuantitatif pasaran mata wang digital

Seperti yang anda boleh lihat dari gambar di atas, perkara-perkara semakin menarik.

Mengapa ini berlaku?

Soalan yang bagus! Tetapi hakikatnya, saya tidak begitu pasti…

Reaksi pertama saya ialah dana lindung nilai baru-baru ini mula berdagang secara terbuka dalam pasaran mata wang kripto. Dana ini memegang lebih banyak modal daripada peniaga biasa Jika dana melindung nilai modal pelaburannya antara berbilang mata wang kripto dan kemudian menggunakan faktor risiko yang serupa untuk setiap mata wang berdasarkan pembolehubah bebas (cth., pasaran saham), ia akan menjadi lebih menguntungkan strategi. Jika dilihat dari perspektif ini, trend peningkatan korelasi masuk akal.

Pemahaman yang lebih mendalam tentang XRP dan STR

Sebagai contoh, daripada carta di atas, jelas bahawa XRP (token Ripple) adalah yang paling rendah berkorelasi dengan mata wang kripto lain. Tetapi satu pengecualian yang ketara di sini ialah STR (token Stellar, secara rasmi dipanggil “Lumens”), yang mempunyai korelasi yang kuat dengan XRP (pekali korelasi: 0.62).

Menariknya, Stellar dan Ripple adalah platform fintech yang hampir sama yang kedua-duanya bertujuan untuk mengurangkan langkah rumit yang terlibat dalam pemindahan wang antara bank merentasi sempadan. Adalah boleh dibayangkan bahawa beberapa pemain besar dan dana lindung nilai mungkin menggunakan strategi dagangan yang serupa untuk pelaburan mereka dalam Stellar dan Ripple, memandangkan persamaan token yang digunakan oleh perkhidmatan blockchain. Ini mungkin sebab XRP mempunyai korelasi yang lebih kuat dengan STR berbanding mata wang kripto lain.

Okay, giliran awak!

Penjelasan di atas sebahagian besarnya adalah spekulatif, dan anda mungkin boleh melakukan yang lebih baik. Berdasarkan asas yang telah kami letakkan, terdapat ratusan cara berbeza anda boleh terus meneroka cerita dalam data anda.

Berikut adalah beberapa cadangan saya untuk dipertimbangkan oleh pembaca dalam hala tuju penyelidikan mereka:

  • Menambah data pada lebih banyak mata wang kripto kepada analisis keseluruhan
  • Laraskan julat masa dan butiran analisis korelasi untuk mendapatkan pandangan aliran yang halus atau kasar.
  • Cari arah aliran dalam volum transaksi atau perlombongan data blockchain. Jika anda ingin meramalkan turun naik harga pada masa hadapan, anda mungkin memerlukan data nisbah volum beli/jual lebih daripada data harga mentah.
  • Tambahkan data harga pada saham, komoditi dan mata wang fiat untuk menentukan yang mana antaranya berkorelasi dengan mata wang kripto (tetapi ingat pepatah lama “korelasi tidak membayangkan sebab-sebab”)
  • Gunakan Pendaftaran Acara, GDELT dan Google Trends untuk mengukur bilangan “perkataan hangat” yang mengelilingi mata wang kripto tertentu.
  • Gunakan data untuk melatih model pembelajaran mesin ramalan untuk meramalkan harga esok. Jika anda berasa lebih bercita-cita tinggi, anda juga boleh mempertimbangkan untuk melakukan latihan di atas dengan Rangkaian Neural Berulang (RNN).
  • Gunakan analisis anda untuk mencipta bot dagangan automatik yang boleh digunakan pada tapak web pertukaran seperti “Poloniex” atau “Coinbase” melalui antara muka pengaturcaraan aplikasi (API) yang sepadan. Berhati-hati: bot yang berprestasi buruk boleh memadamkan aset anda dengan mudah dalam sekelip mata. Adalah disyorkan untuk menggunakan platform kuantitatif pencipta FMZ.COM.

Bahagian terbaik tentang Bitcoin, dan tentang mata wang digital secara amnya, adalah sifatnya yang terdesentralisasi, yang menjadikannya lebih bebas dan lebih demokratik daripada mana-mana aset lain. Kongsi analisis anda sebagai sumber terbuka, libatkan diri dalam komuniti atau tulis catatan blog! Mudah-mudahan, anda kini mempunyai kemahiran yang anda perlukan untuk menjalankan analisis anda sendiri dan dapat berfikir secara kritis tentang sebarang artikel mata wang kripto spekulatif yang anda baca pada masa hadapan, terutamanya ramalan yang tidak disandarkan oleh data. Terima kasih kerana membaca. Jika anda mempunyai sebarang komen, cadangan atau kritikan tentang tutorial ini, sila tinggalkan mesej di https://www.fmz.com/bbs.