Pengkajian kuantitatif pasaran mata wang digital

Penulis:Kebaikan, Dicipta: 2019-08-16 10:37:23, Dikemas kini: 2023-10-19 21:04:20

img

Analisis spekulatif mata wang digital yang didorong oleh data

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.

img

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.

Langkah 1: Membina persekitaran kerja data kami

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

1.1 Memasang Inventor Quantify Host dan menyediakan Anaconda

  • Sistem pengurus yang diukur oleh pencipta

发明者量化平台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.

1.2 Membuat persekitaran projek analisis data Anaconda

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

1.3 Membuat Jupyter Notebook

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

img

1.4 Mengimport pakej pergantungan

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)

Langkah 2: Dapatkan maklumat mengenai harga mata wang digital

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

2.1 Menulis fungsi pengumpulan data Quandl

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.

2.2 Dapatkan data harga mata wang digital di Bursa Kraken

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

img

这里,我们用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.

2.3 Mengambil data harga dari bursa Bitcoin utama

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

2.4 Mengintegrasikan semua data ke dalam satu datapak

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.

2.5 Proses memvisualisasikan data harga

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

img

2.6 Membasmi dan menambah data harga keseluruhan

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

img

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

img

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.

Langkah 3: Mengumpul harga Bitcoin (Altcoins)

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.

3.1 Fungsi tambahan yang ditakrifkan melalui API bursa Poloniex

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&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 mengambil kod mata wang digital yang dipasangkan (seperti mata wang BTC_ETH) dan mengembalikan datar yang mengandungi kedua-dua harga sejarah mata wang.

3.2 Muat turun data harga dagangan dari Poloniex

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

3.3 Menggabungkan semua data harga dalam mata wang dolar

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.

img

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 = linear) untuk memahami data dari perspektif yang berbeza.

3.4 Memulakan analisis kaitan

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

img

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

img

Seperti yang dapat dilihat dari gambar di atas, perkara menjadi semakin menarik.

Kenapa ini berlaku?

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.

Baiklah, kini giliran anda!

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:

  • Data lebih banyak mata wang digital ditambahkan untuk analisis keseluruhan
  • Menyesuaikan jangka masa dan partikel analisis kaitan untuk mendapatkan pandangan trend yang dioptimumkan atau kasar.
  • Mencari trend daripada jumlah urus niaga atau menggali data blockchain; berbanding data harga mentah, jika anda ingin meramalkan turun naik harga masa depan, anda mungkin memerlukan data nisbah beli/jual lebih banyak.
  • Menambah data harga pada saham, barangan, dan mata wang tetap untuk menentukan mana yang berkaitan dengan mata wang digital ((tetapi, jangan lupa bahawa pepatah tidak berkaitan dengan sebab dan akibat)
  • Menggunakan Registry Acara, GDELT, dan GoogleTrends untuk mengukur jumlah kata-kata panas yang berpusat pada mata wang digital tertentu.
  • Menggunakan data untuk melatih model pembelajaran mesin prediktif untuk meramalkan harga esok. Jika anda mempunyai cita-cita yang lebih besar, anda boleh mempertimbangkan untuk mencuba latihan di atas dengan rangkaian saraf berputar (RNN).
  • Menggunakan analisis anda untuk mencipta bot dagangan automatik, melalui antara muka pengaturcaraan aplikasi (API) yang sesuai, yang digunakan di laman web pertukaran seperti Polonix atau Coinbase.这里推荐使用发明者量化平台FMZ.COM

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,


Berkaitan

Lebih lanjut

ruixiao1989Artikel yang sangat berharga, saya belajar, terima kasih.

KebaikanTerima kasih kerana suka! Bersama-sama!