Phân tích định lượng thị trường tiền kỹ thuật số

Tác giả:Lydia., Tạo: 2023-01-06 10:28:01, Cập nhật: 2023-09-20 10:27:27

img

Phân tích định lượng thị trường tiền kỹ thuật số

Một cách tiếp cận dựa trên dữ liệu để phân tích đầu cơ về tiền kỹ thuật số

Còn giá Bitcoin thì sao? Lý do cho giá tăng và giảm của tiền kỹ thuật số là gì? Giá thị trường của các Altcoin khác nhau có liên quan chặt chẽ hay phần lớn độc lập không? Làm thế nào chúng ta có thể dự đoán điều gì sẽ xảy ra tiếp theo?

Các bài viết về tiền kỹ thuật số, chẳng hạn như Bitcoin và Ethereum, hiện đang đầy những suy đoán. Hàng trăm chuyên gia tự xưng đang ủng hộ xu hướng mà họ mong đợi. Điều mà nhiều phân tích này thiếu là một nền tảng vững chắc cho dữ liệu cơ bản và mô hình thống kê.

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 cách sử dụng Python. Chúng tôi sẽ sử dụng một kịch bản Python đơn giản để truy xuất, phân tích và hình dung dữ liệu của các loại tiền kỹ thuật số khác nhau. Trong quá trình này, chúng tôi sẽ tìm thấy các xu hướng thú vị trong hành vi thị trường của những biến động này và cách chúng phát triển.

img

Đâ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 ý kiến về các loại tiền tệ cụ thể sẽ tăng và sẽ giảm. Trái lại, những gì chúng tôi tập trung trong hướng dẫn này là lấy dữ liệu gốc và tìm câu chuyện ẩn trong các con số.

Bước 1: Thiết lập môi trường làm việc dữ liệu của chúng tôi

Bài hướng dẫn này dành cho những người đam mê, kỹ sư và các nhà khoa học dữ liệu ở tất cả các cấp độ kỹ năng. Cho dù bạn là một nhà lãnh đạo ngành công nghiệp hoặc một người mới lập trình, kỹ năng duy nhất bạn cần là một sự hiểu biết cơ bản về ngôn ngữ lập trình Python và kiến thức đầy đủ về các hoạt động dòng lệnh (có thể thiết lập một dự án khoa học dữ liệu là đủ).

1.1 Cài đặt FMZ Quant docker và thiết lập Anaconda

  • Hệ thống Docker của nền tảng FMZ Quant Nền tảng FMZ QuantFMZ.COMKhông chỉ cung cấp các nguồn dữ liệu chất lượng cao cho các sàn giao dịch chính, mà còn cung cấp một bộ giao diện API phong phú để giúp chúng tôi thực hiện giao dịch tự động sau khi hoàn thành phân tích dữ liệu. Bộ giao diện này bao gồm các công cụ thực tế, chẳng hạn như truy vấn thông tin tài khoản, truy vấn giá cao, mở, thấp, nhận, khối lượng giao dịch và các chỉ số phân tích kỹ thuật thường sử dụng khác nhau của các sàn giao dịch chính.

Tất cả các tính năng được đề cập ở trên được đóng gói trong một hệ thống giống như Docker. 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 chúng tôi và triển khai hệ thống Docker.

Trong tên chính thức của nền tảng FMZ Quant, hệ thống Docker này được gọi là hệ thống Docker.

Vui lòng tham khảo bài viết trước của tôi về cách triển khai một docker và robot:https://www.fmz.com/bbs-topic/9864.

Người đọc muốn mua máy chủ điện toán đám mây của riêng mình để triển khai các dockers có thể tham khảo bài viết này:https://www.fmz.com/digest-topic/5711.

Sau khi triển khai thành công máy chủ điện toán đám mây và hệ thống docker, tiếp theo chúng tôi sẽ cài đặt hiện tại lớn nhất hiện vật của Python: Anaconda

Để thực hiện tất cả các môi trường chương trình có liên quan (thư viện phụ thuộc, quản lý phiên bản, v.v.) được yêu cầu trong bài viết này, cách đơn giản nhất là sử dụng Anaconda.

Vì chúng tôi cài đặt Anaconda trên dịch vụ đám mây, chúng tôi khuyên rằng máy chủ đám mây cài đặt hệ thống Linux cộng với phiên bản dòng lệnh của Anaconda.

Đối với phương pháp cài đặt của Anaconda, vui lòng tham khảo 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à nếu bạn cảm thấy rằng bạn không cần phải sử dụng Anaconda, thì không có vấn đề gì cả. Tôi sẽ giả định rằng 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ể bỏ qua phần này trực tiếp.

1.2 Tạo môi trường dự án phân tích dữ liệu cho Anaconda

Một khi Anaconda được cài đặt, 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

để tạo ra một môi trường Anaconda mới cho dự án của chúng tôi.

Tiếp theo, đầu vào:

source activate cryptocurrency-analysis (linux/MacOS operating system)
or
activate cryptocurrency-analysis (windows operating system)

để kích hoạt môi trường.

Tiếp theo, đầu vào:

conda install numpy pandas nb_conda jupyter plotly

để cài đặt các gói phụ thuộc khác nhau cần thiết cho dự án này.

Lưu ý: Tại sao sử dụng môi trường Anaconda? Nếu bạn có kế hoạch chạy nhiều dự án Python trên máy tính của mình, điều hữu ích là tách các gói phụ thuộc (thư viện phần mềm và gói) của các dự án khác nhau để tránh xung đột.

1.3 Tạo sổ ghi chép Jupyter

Sau khi cài đặt môi trường và các gói phụ thuộc, chạy:

jupyter notebook

để khởi động kernel iPython, sau đó truy cậphttp://localhost:8888/với trình duyệt của bạn, tạo một sổ ghi chép Python mới, đảm bảo nó sử dụng:

Python [conda env:cryptocurrency-analysis]

hạt nhân

img

1.4 Bao bì phụ thuộc nhập khẩu

Tạo một sổ ghi chép Jupyter trống, và điều đầu tiên chúng ta cần 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à kích hoạ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)

Bước 2: Nhận thông tin giá của tiền kỹ thuật số

Việc chuẩn bị đã hoàn tất, và bây giờ chúng tôi có thể bắt đầu lấy dữ liệu để phân tích. Đầu tiên, chúng tôi sẽ sử dụng giao diện API của nền tảng FMZ Quant để lấy dữ liệu giá của Bitcoin.

Điều này sẽ sử dụng chức năng GetTicker. Để sử dụng hai chức năng này, vui lòng tham khảo:https://www.fmz.com/api.

2.1 Viết một hàm thu thập dữ liệu Quandl

Để tạo thuận lợi cho việc thu thập dữ liệu, chúng ta cần viết một hàm để tải xuống và đồng bộ hóa dữ liệu từ Quandl (quandl.comĐây là một giao diện dữ liệu tài chính miễn phí, có uy tín cao ở nước ngoài. Nền tảng FMZ Quant cũng cung cấp một giao diện dữ liệu tương tự, chủ yếu được sử dụng cho các giao dịch bot thực.

Trong giao dịch bot thực tế, bạn có thể gọi các hàm GetTicker và GetRecords trong Python trực tiếp để lấy dữ liệu giá.https://www.fmz.com/api.

def get_quandl_data(quandl_id):
    # Download and cache data columns from 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, thư viện dưa chuột được sử dụng để phân loại dữ liệu và lưu dữ liệu tải xuống dưới dạng tệp, để chương trình không tải xuống cùng một dữ liệu mỗi khi chạy. Chức năng này sẽ trả về dữ liệu theo định dạng Pandas Dataframe. Nếu bạn không quen thuộc với khái niệm khung dữ liệu, bạn có thể tưởng tượng nó như một Excel mạnh mẽ.

2.2 Truy cập vào dữ liệu giá tiền kỹ thuật số của sàn giao dịch Kraken

Hãy lấy Kraken Bitcoin Exchange làm ví dụ, bắt đầu từ việc lấy giá Bitcoin của nó.

# Get prices on the Kraken Bitcoin exchange
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')

Sử dụng phương thức head( để xem năm hàng đầu của hộp dữ liệu.

btc_usd_price_kraken.head()

Kết quả là:

img

Tiếp theo, chúng ta sẽ tạo ra một bảng đơn giản để xác minh tính chính xác của dữ liệu bằng cách hình dung.

# Make a table of BTC prices
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])

img

Ở đây, chúng tôi sử dụng Plotly để hoàn thành phần trực quan hóa. So với việc sử dụng một số thư viện trực quan hóa dữ liệu Python trưởng thành hơn, chẳng hạn như Matplotlib, Plotly là một lựa chọn ít phổ biến hơn, nhưng nó thực sự là một lựa chọn tốt, bởi vì nó có thể gọi biểu đồ tương tác đầy đủ D3.js. Những biểu đồ này có cài đặt mặc định đẹp, dễ khám phá và rất dễ nhúng vào trang web.

Mẹo: Biểu đồ được tạo có thể được so sánh với biểu đồ giá Bitcoin của các sàn giao dịch chính (như biểu đồ trên OKX, Binance hoặc Huobi) như một kiểm tra tính toàn vẹn nhanh chóng để xác nhận liệu dữ liệu được tải xuống có thường phù hợp hay không.

2.3 Nhận dữ liệu giá từ các sàn giao dịch Bitcoin chính thống

Những người đọc cẩn thận có thể đã nhận thấy rằng có những dữ liệu bị thiếu trong dữ liệu trên, đặc biệt là vào cuối năm 2014 và đầu năm 2016. Đặc biệt là ở Kraken Exchange, loại mất dữ liệu này đặc biệt rõ ràng. Chúng tôi chắc chắn không hy vọng rằng những dữ liệu bị thiếu này sẽ ảnh hưởng đến phân tích giá.

Đặc điểm của trao đổi tiền kỹ thuật số là mối quan hệ cung và cầu quyết định giá tiền. Do đó, không có giá giao dịch nào có thể trở thành giá tiêu chuẩn của thị trường. Để giải quyết vấn đề và vấn đề mất dữ liệu vừa đề cập (có thể do mất điện kỹ thuật 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 thống trên thế giới, và sau đó tính giá Bitcoin trung bình.

Hãy bắt đầu bằng cách tải xuống dữ liệu của mỗi trao đổi vào khung dữ liệu bao gồm các loại từ điển.

# Download price data from COINBASE, BITSTAMP and 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 Kết hợp tất cả dữ liệu vào một khung dữ liệu

Tiếp theo, chúng ta sẽ xác định một hàm đặc biệt để hợp nhất các cột chung với mỗi khung dữ liệu vào một khung 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ờ, tất cả các khung dữ liệu được tích hợp dựa trên cột giá trị giá của mỗi bộ dữ liệu.

# Integrate all data frames
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 tail () để xem năm hàng cuối cùng của dữ liệu hợp nhất để đảm bảo rằng dữ liệu là chính xác và hoàn chỉnh.

btc_usd_datasets.tail()

Kết quả được hiển thị như sau:

img

Từ bảng trên, chúng ta có thể thấy rằng những dữ liệu này phù hợp với mong đợi của chúng tôi, với khoảng dữ liệu tương tự, nhưng hơi khác nhau dựa trên sự chậm trễ hoặc đặc điểm của mỗi trao đổi.

2.5 Quá trình hiển thị dữ liệu giá

Từ quan điểm của logic phân tích, bước tiếp theo là so sánh các dữ liệu này thông qua 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 một dòng để sử dụng dữ liệu để tạo biểu đồ, chúng ta gọi nó là hàm 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'
        
    # Table tracking for each series
    trace_arr = []
    for index, series in enumerate(series_arr):
        trace = go.Scatter(
            x=series.index, 
            y=series, 
            name=label_arr[index],
            visible=visibility
        )
        
        # Add a separate axis to the series
        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 thảo luận quá nhiều về nguyên tắc logic của chức năng phụ trợ này.

Bây giờ, chúng ta có thể tạo các biểu đồ dữ liệu giá Bitcoin dễ dàng!

# Plot all BTC transaction prices
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

img

2.6 Dữ liệu giá rõ ràng và tổng hợp

Như có thể thấy từ biểu đồ ở trên, mặc dù bốn chuỗi dữ liệu đi theo cùng một con đường, nhưng vẫn có một số thay đổi bất thường.

Trong khoảng thời gian 2012-2017, chúng ta biết rằng giá Bitcoin chưa bao giờ bằng bằng 0, vì vậy chúng ta loại bỏ tất cả các giá trị số không trong khung dữ liệu trước.

# Clear the "0" value
btc_usd_datasets.replace(0, np.nan, inplace=True)

Sau khi tái tạo các khung dữ liệu, chúng ta có thể thấy một biểu đồ rõ ràng hơn mà không còn thiếu dữ liệu nữa.

# Plot the revised data frame
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

img

Bây giờ chúng ta có thể tính toán một cột mới: giá trung bình Bitcoin hàng ngày của tất cả các sàn giao dịch.

# Calculate the average BTC price as a new column
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)

Cột mới là chỉ số giá của Bitcoin! Hãy vẽ lại để kiểm tra xem dữ liệu có trông sai hay không.

# Plot the average BTC price
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])

img

Sau đó, chúng tôi sẽ tiếp tục sử dụng dữ liệu chuỗi giá tổng hợp này để xác định tỷ giá hối đoái giữa các loại tiền kỹ thuật số khác và USD.

Bước 3: Thu thập giá của Altcoins

Cho đến nay, chúng ta đã có dữ liệu chuỗi thời gian của giá Bitcoin. Tiếp theo, chúng ta hãy xem xét một số dữ liệu của các loại tiền kỹ thuật số không phải Bitcoin, đó là Altcoins. Tất nhiên, thuật ngữ Altcoins có thể hơi phóng đại, nhưng đối với sự phát triển hiện tại của các loại tiền kỹ thuật số, ngoại trừ mười loại giá trị thị trường hàng đầu (như Bitcoin, Ethereum, EOS, USDT, v.v.), hầu hết chúng có thể được gọi là Altcoins. Chúng ta nên cố gắng tránh xa các loại tiền này khi giao dịch, bởi vì chúng quá khó hiểu và lừa dối.

3.1 Định nghĩa các chức năng phụ trợ thông qua API của sàn giao dịch Poloniex

Đầu tiên, chúng tôi sử dụng API của sàn giao dịch Poloniex để có được thông tin dữ liệu của các giao dịch tiền kỹ thuật số. Chúng tôi xác định hai chức năng phụ để có được dữ liệu liên quan đến Altcoins. Hai chức năng này chủ yếu tải xuống và lưu trữ dữ liệu JSON thông qua API.

Đầu tiên, chúng ta xác định chức năng get_json_data, sẽ tải xuống và lưu trữ dữ liệu JSON từ URL được cung cấp.

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 tôi xác định một hàm mới sẽ tạo yêu cầu HTTP của Poloniex API và gọi hàm get_json_data được xác định để lưu kết quả dữ liệu của cuộc gọi.

base_polo_url = 'https://poloniex.com/public?command=returnChartData&currencyPair={}&start={}&end={}&period={}'
start_date = datetime.strptime('2015-01-01', '%Y-%m-%d') # Data acquisition since 2015
end_date = datetime.now() # Until today
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ẽ trích xuất mã ký tự phù hợp của tiền kỹ thuật số (chẳng hạn như BTC_ETH) và trả về khung dữ liệu chứa giá lịch sử của hai loại tiền tệ.

3.2 Tải dữ liệu giá giao dịch từ Poloniex

Phần lớn các đồng Altcoin không thể được mua trực tiếp bằng USD. Để có được các loại tiền kỹ thuật số này, cá nhân thường phải mua Bitcoin trước, và sau đó chuyển đổi chúng thành Altcoin theo tỷ lệ giá của chúng. Do đó, chúng ta phải tải xuống tỷ giá hối đoái của mỗi loại tiền kỹ thuật số sang Bitcoin, và sau đó sử dụng dữ liệu giá Bitcoin hiện có để chuyển đổi nó thành USD. Chúng ta sẽ tải xuống dữ liệu tỷ giá hối đoái cho 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

Bây giờ, chúng tôi có một từ điển chứa 9 khung dữ liệu, mỗi khung dữ liệu chứa dữ liệu giá trung bình hàng ngày lịch sử giữa Altcoins và Bitcoin.

Chúng ta có thể xác định liệu dữ liệu có chính xác hay không thông qua vài hàng cuối cùng của bảng giá Ethereum.

altcoin_data['ETH'].tail()

img

3.3 Thống nhất đơn vị tiền tệ của tất cả dữ liệu giá thành USD

Bây giờ, chúng ta có thể kết hợp dữ liệu tỷ giá hối đoái BTC và Altcoins với chỉ số giá Bitcoin của chúng tôi để tính giá lịch sử của mỗi Altcoin (trong USD) trực tiếp.

# Calculate USD Price as a new column in each altcoin data frame
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 khung dữ liệu Altcoin để lưu trữ giá USD tương ứng.

Tiếp theo, chúng ta có thể sử dụng lại hàm merge_dfs_on_column được xác định trước đó để tạo một khung dữ liệu kết hợp và tích hợp giá USD của mỗi loại tiền kỹ thuật số.

# Combine the USD price of each Altcoin into a single data frame
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')

Được rồi!

Bây giờ hãy thêm giá Bitcoin như cột cuối cùng vào khung dữ liệu hợp nhất.

# Add BTC price to data frame
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']

Bây giờ chúng tôi có một khung dữ liệu độc đáo, chứa giá USD hàng ngày của mười loại tiền kỹ thuật số mà chúng tôi đang xác minh.

Chúng ta gọi hàm trước df_scatter một lần nữa, hiển thị giá tương ứng của tất cả các Altcoin dưới dạng biểu đồ.

img

Có vẻ như không có vấn đề trong biểu đồ. Bảng biểu đồ này cho chúng ta thấy một bức tranh đầy đủ về sự thay đổi giá hối đoái cho mỗi đồng tiền kỹ thuật số trong vài năm qua.

Lưu ý: ở đây chúng tôi sử dụng trục y của thông số kỹ thuật số để 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 tham số khác nhau (chẳng hạn như quy mô = tuyến tính) để hiểu dữ liệu từ các quan điểm khác nhau.

3.4 Bắt đầu phân tích tương quan

Những người đọc cẩn thận có thể đã nhận thấy rằng giá của tiền kỹ thuật số dường như có liên quan, mặc dù giá trị tiền tệ của chúng khác nhau rộng rãi và rất biến động.

Dĩ nhiên, những kết luận dựa trên dữ liệu là 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() để xác minh giả thuyết tương quan trên. Phương pháp thử nghiệm này tính toán hệ số tương quan Pearson của mỗi cột của khung dữ liệu tương ứng với cột khác.

Ghi chú sửa đổi ngày 22.8.2017: 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 của giá khi tính tỷ lệ tương quan.

Tính toán trực tiếp dựa trên một chuỗi thời gian không vững chắc (như dữ liệu giá thô) có thể dẫn đến độ lệch của hệ số tương quan. Để giải quyết vấn đề này, giải pháp của chúng tôi là sử dụng phương pháp pct_change() để chuyển đổi giá trị tuyệt đối của mỗi giá trong khung dữ liệu thành tỷ lệ lợi nhuận hàng ngày tương ứng.

Ví dụ, hãy tính toán hệ số tương quan trong năm 2016.

# Calculating the Pearson correlation coefficient for digital currencies in 2016
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')

img

Biểu đồ trên cho thấy hệ số tương quan. Khi hệ số gần 1 hoặc -1, điều đó có nghĩa là chuỗi này tương quan tích cực hoặc tiêu cực, tương ứng. Khi hệ số tương quan gần 0, điều đó có nghĩa là các đối tượng tương ứng không tương quan và biến động của chúng độc lập với nhau.

Để hình dung tốt hơn kết quả, chúng tôi tạo ra một chức năng trợ giúp trực quan 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")

img

Ở đây, giá trị màu đỏ đậm đại diện cho mối tương quan mạnh mẽ (mỗi loại tiền tệ rõ ràng có mối tương quan cao với chính nó), và giá trị màu xanh đậm đại diện cho mối tương quan ngược.

Biểu đồ này cho chúng ta biết gì? Về cơ bản, nó cho thấy sự biến động của các giá tiền kỹ thuật số khác nhau trong năm 2016, với ít mối tương quan đáng kể về mặt thống kê.

Bây giờ, để xác minh giả thuyết của chúng tôi rằng mối tương quan của tiền kỹ thuật số đã tăng trong những tháng gần đây, chúng tôi sẽ sử dụng dữ liệu từ năm 2017 để lặp lại cùng một bài kiểm tra.

combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')

img

Các dữ liệu trên có phù hợp hơn không? Liệu chúng có đủ để được sử dụng như một tiêu chuẩn đánh giá cho đầu tư?

Tuy nhiên, cần lưu ý rằng hầu hết các loại tiền kỹ thuật số đều ngày càng kết nối với nhau.

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

img

Như chúng ta có thể thấy từ biểu đồ ở trên, mọi thứ đang trở nên thú vị hơn và thú vị hơn.

Tại sao chuyện này lại xảy ra?

Câu hỏi hay, nhưng sự thật là, tôi không chắc...

Phản ứng đầu tiên của tôi là các quỹ phòng hộ 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ữ vốn nhiều hơn so với các nhà giao dịch thông thường. Khi một quỹ bảo hiểm vốn đầu tư của mình giữa nhiều loại tiền kỹ thuật số, nó sử dụng các chiến lược giao dịch tương tự cho mỗi loại tiền tệ theo các biến độc lập (như thị trường chứng khoán).

Hiểu sâu hơn về XRP và STR

Ví dụ, rõ ràng từ biểu đồ trên rằng XRP (thẻ token của Ripple) có mối tương quan ít nhất với các loại tiền kỹ thuật số khác. Tuy nhiên, một ngoại lệ đáng chú ý là STR (thẻ token của Stellar, được chính thức gọi là Lumens), có mối tương quan mạnh mẽ với XRP (tỷ lệ tương quan: 0,62).

Điều thú vị là Stellar và Ripple là các nền tảng công nghệ tài chính rất giống nhau, cả hai đều nhằm giảm các bước tẻ nhạt của chuyển tiền xuyên biên giới giữa các ngân hàng.

À, đến lượt cậu rồi!

Những lời giải thích trên phần lớn là suy đoán, và bạn có thể làm tốt hơn.

Dưới đây là một số đề xuất của tôi.

  • Thêm thêm dữ liệu tiền kỹ thuật số vào toàn bộ phân tích.
  • Điều chỉnh phạm vi thời gian và độ chi tiết của phân tích tương quan để có được hình ảnh xu hướng tối ưu hoặc hạt thô.
  • Tìm xu hướng từ số lượng giao dịch hoặc khai thác dữ liệu blockchain. So với dữ liệu giá ban đầu, nếu bạn muốn dự đoán biến động giá trong tương lai, bạn có thể cần dữ liệu tỷ lệ số lượng mua / bán nhiều hơn.
  • Thêm dữ liệu giá vào cổ phiếu, hàng hóa và tiền tệ fiat để xác định loại nào trong số đó có liên quan đến tiền kỹ thuật số (nhưng đừng quên câu ngạn ngữ cũ sự tương quan không ngụ ý nguyên nhân).
  • Sử dụng Event Registry, GDELT và Google Trends để định lượng số lượng hot words xung quanh một loại tiền kỹ thuật số cụ thể.
  • Sử dụng dữ liệu để đào tạo một mô hình học máy dự đoán để dự đoán giá cả ngày mai.
  • Sử dụng phân tích của bạn để tạo ra một robot giao dịch tự động, có thể được áp dụng cho trang web trao đổi của Poloniex hoặc Coinbase thông qua giao diện lập trình ứng dụng tương ứng (API). Xin hãy cẩn thận: một robot có hiệu suất kém có thể dễ dàng phá hủy tài sản của bạn ngay lập tức.FMZ.COM) được khuyến cáo ở đây.

Phần tốt nhất về Bitcoin và tiền kỹ thuật số nói chung là bản chất phi tập trung của chúng, làm cho nó tự do và dân chủ 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 nguồn mở, tham gia cộng đồng hoặc viết blog! Tôi hy vọng bạn đã thành thạo các kỹ năng cần thiết cho tự phân tích và khả năng suy nghĩ biện chứng khi đọc bất kỳ bài báo tiền kỹ thuật số đầu cơ nào trong tương lai, đặc biệt là những dự đoán mà không có hỗ trợ dữ liệu. Cảm ơn bạn đã đọc. Nếu bạn có bất kỳ bình luận, đề xuất hoặc chỉ trích nào về hướng dẫn này, vui lòng để lại tin nhắn trênhttps://www.fmz.com/bbs.


Có liên quan

Thêm nữa