Giá Bitcoin hoạt động như thế nào? Lý do cho sự tăng và giảm giá của tiền kỹ thuật số là gì? Giá thị trường của các đồng tiền ảo khác nhau có liên quan chặt chẽ hay phần lớn độc lập?
Các bài viết về các loại tiền kỹ thuật số như Bitcoin và Ethereum hiện đang tràn ngập suy đoán, với hàng trăm người tự xưng là chuyên gia ủng hộ xu hướng mà họ mong đợi.
Mục tiêu của bài viết này là cung cấp một giới thiệu ngắn gọn về phân tích tiền kỹ thuật số bằng Python. Chúng tôi sẽ truy cập, phân tích và trực quan hóa dữ liệu của các loại tiền kỹ thuật số khác nhau thông qua một kịch bản Python đơn giản. Trong quá trình này, chúng tôi sẽ khám phá những hành vi thị trường biến động này và những xu hướng thú vị về cách chúng phát triển.
Đây không phải là một bài viết giải thích về tiền kỹ thuật số, cũng không phải là một quan điểm về những đồng tiền cụ thể nào sẽ tăng và nào sẽ giảm. Thay vào đó, trong hướng dẫn này, chúng tôi chỉ tập trung vào việc lấy dữ liệu nguyên liệu và khám phá những câu chuyện ẩn trong số.
Khóa học này được thiết kế cho các nghiệp dư, kỹ sư và nhà khoa học dữ liệu ở tất cả các cấp độ kỹ năng, cho dù bạn là một người lớn trong ngành hay là một lập trình viên nhỏ, những kỹ năng duy nhất bạn cần là một kiến thức cơ bản về ngôn ngữ lập trình Python và đủ kiến thức về các hoạt động trên dòng lệnh (để có thể thiết lập một dự án khoa học dữ liệu).
发明者量化平台FMZ.COM除了提供优质的各大主流交易所的数据源,还提供一套丰富的API接口以帮助我们在完成数据的分析后进行自动化交易。这套接口包括查询账户信息,查询各个主流交易所的高,开,低,收价格,成交量,各种常用技术分析指标等实用工具,特别是对于实际交易过程中连接各大主流交易所的公共API接口,提供了强大的技术支持。
Tất cả các tính năng trên đều được đóng gói trong một hệ thống tương tự như Docker, và tất cả những gì chúng ta cần làm là mua hoặc thuê dịch vụ điện toán đám mây của riêng mình và triển khai hệ thống Docker.
Trong cái tên chính thức của nền tảng định lượng của nhà phát minh, hệ thống Docker này được gọi là hệ thống quản lý.
Để biết cách triển khai người quản lý và robot, hãy tham khảo bài viết trước của tôi:https://www.fmz.com/bbs-topic/4140
Người đọc muốn mua một nhà quản lý triển khai máy chủ điện toán đám mây của riêng họ có thể tham khảo bài viết này:https://www.fmz.com/bbs-topic/2848
Sau khi triển khai thành công các dịch vụ và hệ thống quản trị đám mây tốt, tiếp theo chúng tôi sẽ cài đặt Python lớn nhất hiện nay: Anaconda.
Để thực hiện tất cả các môi trường ứng dụng liên quan cần thiết cho bài viết này (tài liệu phụ thuộc, quản lý phiên bản, v.v.), cách đơn giản nhất là sử dụng Anaconda. Nó là một hệ sinh thái khoa học dữ liệu Python được đóng gói và quản lý thư viện phụ thuộc.
Vì chúng tôi đang cài đặt Anaconda trên dịch vụ đám mây, chúng tôi khuyên bạn nên cài đặt phiên bản Anaconda trên máy chủ đám mây với dòng lệnh trên hệ thống Linux.
Để biết cách cài đặt Anaconda, hãy xem hướng dẫn chính thức của Anaconda:https://www.anaconda.com/distribution/
Nếu bạn là một lập trình viên Python có kinh nghiệm và cảm thấy không cần phải sử dụng Anaconda, thì hoàn toàn không có vấn đề. Tôi sẽ giả sử bạn không cần sự giúp đỡ khi cài đặt môi trường phụ thuộc cần thiết, bạn có thể nhảy thẳng đến phần hai.
Sau khi cài đặt Anaconda xong, chúng ta cần tạo một môi trường mới để quản lý các gói phụ thuộc của mình.
conda create --name cryptocurrency-analysis python=3
Chúng tôi đã tạo ra một môi trường Anaconda mới cho dự án của chúng tôi.
Tiếp theo, nhập
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
Để kích hoạt môi trường này
Tiếp theo, nhập:
conda install numpy pandas nb_conda jupyter plotly
Các gói phụ thuộc khác nhau cần thiết để cài đặt chương trình này.
Lưu ý: Tại sao nên sử dụng môi trường Anaconda? Nếu bạn dự định chạy nhiều dự án Python trên máy tính của mình, việc tách các gói phụ thuộc khác nhau (bộ phần mềm và gói) để tránh xung đột sẽ rất hữu ích.
Một khi môi trường và các gói phụ thuộc đã được cài đặt, chạy
jupyter notebook
Để khởi động kernel của Python, hãy truy cập vào http://localhost:8888/Để tạo một notebook Python mới, hãy đảm bảo rằng nó sử dụng:
Python [conda env:cryptocurrency-analysis]
Hạt nhân
Sau đó, chúng ta sẽ tạo ra một notebook Jupyter trống, và điều đầu tiên chúng ta phải làm là nhập các gói phụ thuộc cần thiết.
import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime
Chúng ta cũng cần nhập Plotly và bật chế độ ngoại tuyến.
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
Công việc chuẩn bị đã hoàn tất và bây giờ chúng ta có thể bắt đầu lấy dữ liệu để phân tích. Đầu tiên, chúng ta sẽ lấy dữ liệu giá Bitcoin bằng giao diện API của nền tảng định lượng của nhà phát minh.
Điều này sẽ sử dụng chức năng GetTicker, xem chi tiết về cách sử dụng hai chức năng này:https://www.fmz.com/api
Để dễ dàng thu thập dữ liệu, chúng tôi đã viết một hàm để tải xuống và đồng bộ hóa từ Quandl.quandl.comMột giao diện dữ liệu tài chính miễn phí có uy tín ở nước ngoài. Nền tảng định lượng của nhà phát minh cũng cung cấp giao diện dữ liệu tương tự, chủ yếu được sử dụng trong giao dịch thực tế.
Khi giao dịch trên thực tế, các hàm GetTicker và GetRecords có thể được gọi trực tiếp trong Python để lấy dữ liệu giá.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
Đây là một thư viện dùng pickle để sắp xếp dữ liệu và lưu dữ liệu được tải xuống thành một tập tin để chương trình không phải tải lại cùng một dữ liệu mỗi lần chạy. Chức năng này sẽ trả về dữ liệu định dạng Dataframe của Panda. Nếu bạn không quen thuộc với khái niệm Dataframe, bạn có thể tưởng tượng nó như một bảng Excel mạnh mẽ.
Chúng ta sẽ bắt đầu với giá Bitcoin khi mua nó bằng cách sử dụng Kraken Bitcoin Exchange như một ví dụ.
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
Sử dụng phương pháp head (() để xem năm dòng đầu tiên của khung dữ liệu.
btc_usd_price_kraken.head()
Kết quả là:
BTC | Mở | Cao | Mức thấp | Gắn lại | Khối lượng (BTC) | Số lượng (Tiền tệ) | Giá cân nhắc |
---|---|---|---|---|---|---|---|
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 |
Bước tiếp theo, chúng ta sẽ làm một bảng đơn giản để xác minh tính chính xác của dữ liệu bằng phương pháp trực quan.
# 做出BTC价格的表格
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])
这里,我们用Plotly来完成可视化部分。相对于使用一些更成熟的Python数据可视化库,比如Matplotlib,用Plotly是一个不那么普遍的选择,但Plotly确实是一个不错的选择,因为它可以调用D3.js的充分交互式图表。这些图表有非常漂亮的默认设置,易于探索,而且非常方便嵌入到网页中。
Mẹo nhỏ: Bạn có thể so sánh biểu đồ được tạo ra với biểu đồ giá Bitcoin của các sàn giao dịch chính (như biểu đồ trên OKEX, Binance hoặc Huobi) như một kiểm tra tính toàn vẹn nhanh chóng để xác nhận dữ liệu được tải xuống có phù hợp với nhau không.
Người đọc cẩn thận có thể đã nhận thấy rằng có một số dữ liệu bị thiếu trong số dữ liệu trên, đặc biệt là vào cuối năm 2014 và đầu năm 2016.
Các sàn giao dịch tiền kỹ thuật số đặc trưng là mối quan hệ cung cầu quyết định giá của đồng tiền. Do đó, không có giá của bất kỳ giao dịch nào có thể trở thành giá chủ đạo của thị trường. Để giải quyết vấn đề này, và vấn đề thiếu dữ liệu vừa được đề cập (có thể là do mất điện và lỗi dữ liệu), chúng tôi sẽ tải xuống dữ liệu từ ba sàn giao dịch Bitcoin chính trên thế giới và sau đó tính toán giá trung bình của Bitcoin.
Hãy bắt đầu bằng cách tải dữ liệu của các sàn giao dịch vào một bộ dữ liệu gồm các loại từ điển.
# 下载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
Tiếp theo, chúng ta sẽ định nghĩa một hàm đặc biệt để kết hợp các cột dữ liệu được chia sẻ trong các cột dữ liệu khác nhau thành một cột dữ liệu mới.
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)
Bây giờ, dựa trên các tập dữ liệu, xếp hạng giá trị gia tăng và tích hợp tất cả các tập dữ liệu lại với nhau.
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
Cuối cùng, chúng tôi sử dụng phương pháp
btc_usd_datasets.tail()
Kết quả cho thấy:
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 |
Từ biểu đồ trên, bạn có thể thấy rằng số liệu này phù hợp với mong đợi của chúng tôi, với phạm vi dữ liệu gần như giống nhau, chỉ có một chút khác nhau dựa trên sự chậm trễ của các sàn giao dịch hoặc các đặc điểm riêng của mỗi sàn giao dịch.
Từ logic phân tích, bước tiếp theo là so sánh dữ liệu này bằng cách hình dung. Để làm điều này, chúng ta cần xác định một hàm phụ trợ trước, bằng cách cung cấp một lệnh đơn để tạo biểu đồ dữ liệu, chúng ta sẽ gọi nó là hàmdf_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)
Để dễ hiểu hơn, bài viết này sẽ không đi sâu vào các nguyên tắc logic của chức năng phụ trợ này. Để biết thêm, hãy xem tài liệu hướng dẫn chính thức của Pandas và Plotly.
Bây giờ, chúng ta có thể dễ dàng tạo ra một biểu đồ dữ liệu giá Bitcoin!
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Từ biểu đồ trên, bạn có thể thấy rằng mặc dù bốn chuỗi dữ liệu này đi theo con đường tương tự, nhưng vẫn có một số thay đổi bất thường trong đó, và chúng tôi sẽ cố gắng xóa những thay đổi bất thường này.
Trong khoảng thời gian 2012-2017, chúng ta biết rằng giá Bitcoin không bao giờ bằng 0, vì vậy chúng ta đã loại bỏ tất cả các số không trong khung dữ liệu.
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
Sau khi xây dựng lại các khối dữ liệu, chúng ta có thể nhìn thấy các đồ họa rõ ràng hơn mà không mất dữ liệu.
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
Bây giờ chúng ta có thể tính toán một cột mới: giá trung bình mỗi ngày của Bitcoin trên tất cả các sàn giao dịch.
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
Một cột mới là chỉ số giá Bitcoin! Chúng tôi vẽ nó lại để kiểm tra xem liệu dữ liệu có trông có vấn đề hay không.
# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])
Có vẻ như không có vấn đề gì, và sau đó, chúng ta sẽ tiếp tục sử dụng dữ liệu chuỗi giá tổng hợp này để xác định tỷ lệ hối đoái giữa các đồng tiền kỹ thuật số khác và đô la Mỹ.
Cho đến nay, chúng ta đã có dữ liệu chuỗi thời gian về giá Bitcoin. Tiếp theo, chúng ta sẽ xem một số dữ liệu về các loại tiền kỹ thuật số không phải Bitcoin, đó là các loại tiền ảo (Altcoins), tất nhiên, từ "Altcoin" có thể hơi nặng nề, nhưng về tình hình hiện tại của các loại tiền kỹ thuật số, ngoại trừ 10 loại có giá trị thị trường hàng đầu (Bitcoin, Ethereum, EOS, USDT, v.v.), phần lớn có thể được gọi là tiền ảo là không có vấn đề, chúng ta nên tránh xa chúng khi giao dịch vì chúng quá khó hiểu và lừa đảo.
Đầu tiên, chúng tôi sử dụng API của sàn giao dịch Poloniex để thu thập thông tin dữ liệu về giao dịch tiền kỹ thuật số. Chúng tôi đã xác định hai chức năng phụ trợ để thu thập dữ liệu liên quan đến tiền mã hóa, hai chức năng này chủ yếu là tải xuống và lưu trữ dữ liệu JSON thông qua API.
Đầu tiên, chúng ta định nghĩa hàm get_json_data, nó sẽ tải xuống và lưu trữ dữ liệu JSON từ URL đã cho.
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
Tiếp theo, chúng ta xác định một hàm mới sẽ tạo các yêu cầu HTTP của Polonix API và gọi hàm get_json_data vừa được xác định để lưu kết quả dữ liệu được gọi.
base_polo_url = 'https://poloniex.com/public?command=returnChartData¤cyPair={}&start={}&end={}&period={}'
start_date = datetime.strptime('2015-01-01', '%Y-%m-%d') # 从2015年开始获取数据
end_date = datetime.now() # 直到今天
pediod = 86400 # pull daily data (86,400 seconds per day)
def get_crypto_data(poloniex_pair):
'''Retrieve cryptocurrency data from poloniex'''
json_url = base_polo_url.format(poloniex_pair, start_date.timestamp(), end_date.timestamp(), pediod)
data_df = get_json_data(json_url, poloniex_pair)
data_df = data_df.set_index('date')
return data_df
Chức năng trên sẽ lấy mã ký tự của cặp tiền kỹ thuật số (ví dụ: mã số BTC_ETH) và trả về một mảng dữ liệu chứa giá lịch sử của hai loại tiền tệ.
Hầu hết các đồng tiền ảo không thể được mua trực tiếp bằng đô la Mỹ, và các cá nhân thường phải mua Bitcoin trước để có được các đồng tiền kỹ thuật số này, sau đó đổi thành đồng tiền ảo theo tỷ lệ giá giữa chúng. Vì vậy, chúng tôi phải tải xuống tỷ lệ hối đoái của mỗi đồng tiền kỹ thuật số để đổi Bitcoin, và sau đó chuyển đổi thành đô la bằng dữ liệu giá Bitcoin hiện có. Chúng tôi sẽ tải xuống dữ liệu giao dịch 9 loại tiền kỹ thuật số hàng đầu: Ethereum, Litecoin, Ripple, EthereumClassic, Stellar, Dash, Siacoin, Monero, và 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
Hiện nay, chúng tôi có một từ điển gồm 9 mảng dữ liệu, mỗi mảng chứa dữ liệu giá trung bình trong ngày lịch sử giữa đồng xu và Bitcoin.
Chúng ta có thể xem xét những dòng cuối cùng của bảng giá Ethereum để xác định liệu dữ liệu có đúng hay không.
altcoin_data['ETH'].tail()
ETH | Mở | Cao | Mức thấp | Gắn lại | Khối lượng (BTC) | Số lượng (Tiền tệ) | Giá cân nhắc |
---|---|---|---|---|---|---|---|
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 |
Bây giờ, chúng ta có thể kết hợp dữ liệu tỷ giá Bitcoin với Bitcoin Price Index của chúng tôi để tính toán trực tiếp giá lịch sử của mỗi đồng xu (đơn vị: 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']
Ở đây, chúng tôi đã thêm một cột mới cho mỗi khoá dữ liệu để lưu trữ giá đô la tương ứng.
Sau đó, chúng ta có thể sử dụng lại hàm merge_dfs_on_column được định nghĩa trước đó để tạo ra một hàng dữ liệu hợp nhất, tích hợp giá đô la của mỗi loại tiền kỹ thuật số.
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
Được rồi!
Bây giờ, hãy cùng nhau thêm giá Bitcoin vào mảng dữ liệu sau khi kết hợp.
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
Bây giờ chúng tôi có một data stack duy nhất, nó chứa giá đô la hàng ngày của 10 loại tiền kỹ thuật số mà chúng tôi đang xác minh.
Chúng tôi đã gọi lại chức năng df_scatter trước đây để hiển thị giá tương ứng của tất cả các đồng xu trong hình thức biểu đồ.
Trong khi đó, các nhà đầu tư khác cũng có thể sử dụng các loại tiền điện tử khác nhau, trong đó có các loại tiền điện tử khác nhau.
Lưu ý: Ở đây chúng ta sử dụng trục y của các thông số toán học để so sánh tất cả các đồng tiền kỹ thuật số trên cùng một biểu đồ. Bạn cũng có thể thử các giá trị tham số khác nhau (ví dụ: scale=
Người đọc cẩn thận có thể nhận thấy rằng giá của các đồng tiền kỹ thuật số dường như có liên quan, mặc dù giá trị của chúng rất khác nhau và rất biến động. Đặc biệt là kể từ sự gia tăng mạnh mẽ vào tháng 4 năm 2017, thậm chí nhiều biến động nhỏ dường như xuất hiện đồng thời với biến động của thị trường nói chung.
Dĩ nhiên, kết luận dựa trên dữ liệu sẽ thuyết phục hơn so với trực giác dựa trên hình ảnh.
Chúng ta có thể sử dụng hàm Pandas corr () để kiểm chứng giả thuyết tương quan trên. Công cụ kiểm tra này tính toán hệ số tương quan Pearson tương ứng với mỗi khối dữ liệu khác.
Đánh giá sửa đổi: Phần này đã được sửa đổi để sử dụng tỷ lệ lợi nhuận hàng ngày thay vì giá trị tuyệt đối khi tính toán các yếu tố liên quan.
Tính toán trực tiếp dựa trên một chuỗi thời gian không cố định (ví dụ như dữ liệu giá nguyên bản) có thể dẫn đến sự sai lệch của hệ số tương quan. Giải pháp cho vấn đề này là sử dụng phương pháp pct_change (), chuyển giá trị tuyệt đối của mỗi giá trong mảng dữ liệu thành tỷ lệ trả lại hàng ngày tương ứng.
Ví dụ, chúng ta tính các hệ số liên quan đến năm 2016.
# 计算2016年数字货币的皮尔森相关系数
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')
Tên | 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 |
Hình trên cho thấy tất cả các hệ số có liên quan. Các hệ số gần 1 hoặc -1, tương ứng, có nghĩa là chuỗi có liên quan tích cực hoặc ngược lại, và các hệ số gần 0 cho thấy các đối tượng tương ứng không liên quan và biến động của chúng là độc lập với nhau.
Để hiển thị hình ảnh tốt hơn, chúng tôi đã tạo ra một chức năng trợ giúp hình ảnh mới.
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")
Ở đây, các giá trị màu đỏ đậm đại diện cho sự tương quan mạnh (mỗi loại tiền tệ rõ ràng liên quan đến độ cao của chính nó), và các giá trị màu xanh đậm đại diện cho sự tương quan ngược lại. Tất cả các màu ở giữa - xanh nhạt / sơn / màu xám / nâu - các giá trị của chúng đại diện cho mức độ tương quan yếu hoặc không liên quan.
Về cơ bản, nó cho thấy sự biến động về giá của các loại tiền kỹ thuật số khác nhau trong năm 2016 với hầu như không có sự liên quan đáng kể về mặt thống kê.
Bây giờ, để xác minh giả thuyết của chúng tôi về việc tăng cường sự liên quan của tiền kỹ thuật số trong những tháng gần đây, chúng tôi sẽ lặp lại các bài kiểm tra tương tự với dữ liệu bắt đầu từ năm 2017.
combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')
Tên | 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 |
Những con số trên có liên quan hơn không? Có đủ để đánh giá đầu tư không?
Tuy nhiên, đáng chú ý là hầu hết các loại tiền kỹ thuật số đã trở nên liên kết với nhau.
correlation_heatmap(combined_df_2017.pct_change(), "Cryptocurrency Correlations in 2017")
Như bạn có thể thấy từ hình trên, mọi thứ đang trở nên thú vị hơn.
Nhưng thực tế là, tôi cũng không chắc...
Phản ứng đầu tiên của tôi là các quỹ đầu cơ gần đây đã bắt đầu giao dịch công khai trên thị trường tiền kỹ thuật số. Các quỹ này nắm giữ một lượng vốn lớn hơn nhiều so với các nhà giao dịch thông thường, và nếu một quỹ đầu tư đầu tư của mình trên nhiều loại tiền kỹ thuật số, thì sử dụng chiến lược giao dịch tương tự cho mỗi loại tiền tệ dựa trên các biến độc lập (ví dụ như thị trường chứng khoán).
Hiểu sâu hơn về XRP và STR
Ví dụ, từ biểu đồ trên, bạn có thể thấy rõ rằng XRP (đối tượng của Ripple) có mối quan hệ ít nhất với các loại tiền kỹ thuật số khác. Nhưng có một ngoại lệ đáng chú ý là STR (đối tượng của Stellar, tên chính thức là "Lumens"), có mối quan hệ mạnh mẽ với XRP (tỷ lệ liên quan: 0.62).
Điều thú vị là Stellar và Ripple là hai nền tảng Fintech rất giống nhau, và cả hai đều nhằm giảm các bước phức tạp khi chuyển tiền xuyên quốc gia giữa các ngân hàng. Có thể hiểu được, với sự tương đồng giữa các dịch vụ blockchain sử dụng token, một số người chơi lớn và quỹ đầu cơ có thể sử dụng chiến lược giao dịch tương tự cho các khoản đầu tư của họ trên Stellar và Ripple. Đây có thể là lý do tại sao XRP có mối liên hệ mạnh mẽ hơn với STR so với các loại tiền kỹ thuật số khác.
Những lời giải thích trên phần lớn là phỏng đoán, có lẽ bạn sẽ làm tốt hơn. Dựa trên nền tảng mà chúng tôi đã đặt ra, bạn có hàng trăm cách khác nhau để tiếp tục khám phá những câu chuyện ẩn trong dữ liệu.
Dưới đây là một số lời khuyên của tôi để người đọc có thể tham khảo để tiến hành nghiên cứu về các hướng này:
Phần tốt nhất về Bitcoin, và về tiền kỹ thuật số nói chung, là bản chất phi tập trung của chúng, điều này làm cho nó tự do hơn bất kỳ tài sản nào khác. Bạn có thể chia sẻ phân tích của mình bằng nguồn mở, tham gia vào cộng đồng, hoặc viết một blog! Hy vọng rằng bạn đã nắm vững kỹ năng cần thiết để tự phân tích và khả năng suy luận trong tương lai khi đọc bất kỳ bài viết về tiền kỹ thuật số suy đoán nào, đặc biệt là những dự đoán không được hỗ trợ bởi dữ liệu.https://www.fmz.com/bbsCác bạn có thể tham khảo thêm.
ruixiao1989Bài viết rất có giá trị, tôi đã học được, cảm ơn.
TốtCảm ơn vì đã yêu thích!