Количественный анализ рынка цифровых валют

Автор:Доброта, Создано: 2019-08-16 10:37:23, Обновлено: 2023-10-19 21:04:20

img

Спортивный анализ цифровой валюты на основе данных

Как будет выглядеть цена биткойна? Что является причиной роста и падения цен на цифровую валюту? Рыночные цены на различные копейки неразрывно связаны или в значительной степени независимы?

Статьи о цифровых валютах, таких как биткоин и эфириум, теперь наполнены разными спекуляциями, и сотни людей, называющих себя экспертами, выступают за тенденции, которые они ожидают. Многие из этих анализов не имеют прочной основы для базовых данных и статистической модели.

Целью статьи является предоставление краткого представления об анализе цифровых валют с помощью Python. Мы будем искать, анализировать и визуализировать данные о различных цифровых валютах с помощью простого сценария Python. В процессе мы будем обнаруживать эти волатильные рыночные поведения и интересные тенденции, как они развиваются.

img

Это не статья об объяснении цифровых валют, и не точка зрения о том, какие конкретные валюты будут расти, а какие упадут. Наоборот, мы сосредоточены на получении первичных данных и обнаружении историй, скрытых в цифрах.

Первый шаг: создание нашей среды для работы с данными.

Этот учебник предназначен для любителей, инженеров и ученых данных всех уровней навыков. Независимо от того, являетесь ли вы крупным бизнесменом или маленьким программистом, единственные навыки, которые вам понадобятся, - это базовое знание языка программирования Python и достаточное знание операций на командной строке (чтобы настроить проект в области науки о данных).

1.1 Установка Изобретателя количественного хостера и настройка Anaconda

  • Изобретатель количественно определил систему хранителей

发明者量化平台FMZ.COM除了提供优质的各大主流交易所的数据源,还提供一套丰富的API接口以帮助我们在完成数据的分析后进行自动化交易。这套接口包括查询账户信息,查询各个主流交易所的高,开,低,收价格,成交量,各种常用技术分析指标等实用工具,特别是对于实际交易过程中连接各大主流交易所的公共API接口,提供了强大的技术支持。

Все упомянутые выше возможности встроены в систему, похожую на Docker, и мы должны просто купить или арендовать собственные облачные сервисы, чтобы завершить развертывание системы Docker.

В официальном названии платформы количественного измерения изобретателей система Docker называется системой хостеров.

Для того, чтобы узнать, как развернуть хостеров и ботов, обратитесь к моей предыдущей статье:https://www.fmz.com/bbs-topic/4140

Читатели, которые хотят купить хост для развертывания собственных облачных серверов, могут ознакомиться с этой статьей:https://www.fmz.com/bbs-topic/2848

После успешного развертывания хороших облачных сервисов и систем хостеров, следующим шагом будет установка самого большого храма Python: Anaconda.

Для реализации всех необходимых программных условий ("зависимость библиотеки, управление версиями и т. д.) самый простой способ - использовать Anaconda.

Поскольку мы устанавливаем Anaconda на облачных сервисах, мы рекомендуем установить на облачных серверах версию Anaconda с командной строкой для Linux-систем.

О том, как установить Anaconda, читайте в официальном руководстве:https://www.anaconda.com/distribution/

Если вы опытный программист Python и не чувствуете необходимости использовать Anaconda, это совершенно нормально. Я бы предположил, что вам не нужна помощь при установке необходимых зависимостей, вы можете перейти прямо к второму разделу.

1.2 Создание среды для анализа данных в Anaconda

После установки Anaconda нам нужно создать новую среду для управления нашими зависимостями.

conda create --name cryptocurrency-analysis python=3

Мы создали новую среду Anaconda для нашего проекта.

Далее, введите

source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)

И это очень важно.

В следующий раз введите:

conda install numpy pandas nb_conda jupyter plotly

Для установки этого проекта необходимы различные пакеты зависимостей.

Примечание: Зачем использовать среду Anaconda? Если вы планируете запускать много Python-проектов на своем компьютере, полезно разделить пакеты зависимостей разных проектов (файлы и пакеты), чтобы избежать конфликтов. Анаконда создает специальный каталог условий для каждого пакета зависимостей, чтобы все пакеты могли быть должным образом управлены и различены.

1.3 Создание ноутбука Jupyter

После того, как среда и зависимость будут установлены, они будут работать.

jupyter notebook

Чтобы запустить ядро Python, используйте свой браузер для доступа к http://localhost:8888/Для создания новой ноутбуки Python, убедитесь, что она использует:

Python [conda env:cryptocurrency-analysis]

Ядра

img

1.4 Импорт пакетов зависимостей

Сделаем новый пустой ноутбук Jupyter, и первое, что нам нужно сделать, это импортировать необходимые пакеты зависимостей.

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

Нам также нужно ввести Plotly и включить автономный режим.

import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)

Второй шаг: получить информацию о цене цифровой валюты

Приготовления завершены, и теперь мы можем начать получать данные для анализа. Во-первых, мы собираем данные о цене биткойнов с помощью интерфейса API для квантовой платформы изобретателя.

Это будет использовать функцию GetTicker. Подробности об использовании этих двух функций см.https://www.fmz.com/api

2.1 Написать функцию сбора данных в Quandl

Для того, чтобы получить данные, мы написали функцию, которая загружает и синхронизирует данные из Quandl.quandl.comЭто бесплатный интерфейс финансовых данных, который пользуется большой популярностью за рубежом. Изобретательская квантовая платформа также предоставляет аналогичный интерфейс данных, который используется в основном при торговле на реальном рынке.

Во время торговли на диске можно прямо в Python вызвать функции GetTicker и GetRecords для получения ценовых данных.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

Здесь используется библиотека пиккеля для сериализации данных и сохранения загруженных данных в файлы, чтобы программа не загружала одинаковые данные каждый раз при запуске. Функция возвращает данные в формате Dataframe.

2.2 Доступ к данным о ценах криптовалют на бирже Kraken

Начнем с цены биткойнов, полученных на них, используя в качестве примера криптовалютную биржу Kraken.

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

Для просмотра первых пяти строк в рамке используется метод head (().

btc_usd_price_kraken.head()

В результате:

BTC Открыто Высокий Низкий Закрой. Объем (BTC) Объем (валюта) Показатель цены
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

В следующем шаге мы сделаем простую таблицу, чтобы проверить правильность данных с помощью визуализированных методов.

# 做出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的充分交互式图表。这些图表有非常漂亮的默认设置,易于探索,而且非常方便嵌入到网页中。

Маленький совет: можно сравнить созданный график с графиком цены биткоина на основных биржах (например, на OKEX, Binance или Huobi) в качестве быстрой проверки целостности, чтобы убедиться, что загруженные данные в целом совпадают.

2.3 Получение данных о ценах на основных биткоин-биржах

Внимательные читатели, возможно, уже заметили, что в данных, перечисленных выше, отсутствуют данные, особенно в конце 2014 года и начале 2016 года. Особенно в Kraken эти данные отсутствуют.

Особенностью криптовалютных бирж является то, что цена валюты определяется соотношением спроса и предложения. Таким образом, ни одна цена не может стать основной ценой на рынке. Чтобы решить эту проблему, а также проблему отсутствия данных (возможно, из-за технических сбоев и ошибок в данных), мы загрузим данные из трех основных мировых криптовалютных бирж и вычислим среднюю цену биткойна.

Давайте начнем с того, что мы загрузим данные с разных бирж в пачку данных, состоящую из типов словарей.

# 下载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 Объединить все данные в одну паутину

В следующем шаге мы будем определять специальную функцию, объединяющую общие столбцы в новой столбце данных. Давайте назовем ее функцией 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)

Теперь, выстраивая цены на кубики на основе различных наборов данных, объединяем все кубики данных вместе.

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

Наконец, мы использовали метод хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного хвойного

btc_usd_datasets.tail()

Результаты показывают:

BTC BITSTAMP COINBASE ITBIT КРАКЕН
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

Как видно из приведенной выше таблицы, данные соответствуют нашим ожиданиям и имеют примерно одинаковый диапазон данных, только с небольшими различиями в зависимости от задержек или особенностей различных бирж.

2.5 Процесс визуализации данных о ценах

С точки зрения аналитической логики, следующим шагом является сравнение этих данных с помощью визуализации. Для этого нам нужно сначала определить вспомогательную функцию, которую мы назовем функцией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)

Для того, чтобы упростить ваше понимание, в этой статье не будет слишком много обсуждаться логические принципы этой вспомогательной функции.

Теперь мы можем легко создать график данных о цене биткойнов!

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

img

2.6 Уборка и добавление данных общих цен

Как видно из приведенной выше диаграммы, хотя все четыре серии данных следуют примерно одинаковым путём, в них есть некоторые неординарные изменения, которые мы постараемся устранить.

В период 2012-2017 годов мы знаем, что цена биткоина никогда не равнялась нулю, поэтому мы сначала удалили все нули из данных.

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

После реконструирования папки данных мы можем видеть более четкие графики без отсутствия данных.

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

img

Теперь мы можем вычислить новый столбец: среднесуточные цены биткойнов на всех биржах.

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

Новый столбец - это индекс цен на биткоин! Мы снова нарисовали его, чтобы проверить, не выглядит ли данная цифра неправильной.

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

img

Похоже, что это действительно не проблема, и позже мы продолжим использовать данные этой суммированной серии цен, чтобы определить обменные курсы между другими цифровыми валютами и долларами США.

Третий шаг: собирать цены на альткоины

На данный момент у нас есть данные по временным последовательностям цены биткойна. Далее мы рассмотрим некоторые данные о цифровых валютах, не являющихся биткойнами, а именно о тех, которые являются биткойнами (Altcoins), конечно, слово "биткойны" может быть немного преувеличено, но по поводу текущего состояния цифровых валют, кроме десяти крупнейших по рыночной стоимости (Bitcoin, Ethereum, EOS, USDT и т. Д.), большинство из которых можно назвать биткойнами, нет проблем, и мы должны держаться от них подальше, потому что они слишком запутанны и обманчивы для торговли.

3.1 Определение вспомогательных функций через API Poloniiex

Сначала мы использовали API Poloniex для получения информации о транзакциях с цифровыми валютами. Мы определили две вспомогательные функции для получения соответствующей информации о криптовалютах, которые в основном загружают и кэшируют данные JSON через API.

Сначала мы определяем функцию get_json_data, которая загружает и кэширует данные JSON из данного URL.

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

Далее мы определяем новую функцию, которая будет генерировать HTTP-запросы в API Poloniiex и вызывать только что определенную функцию get_json_data, чтобы сохранить результаты вызова.

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

Вышеперечисленная функция извлекает паролированные цифровые валюты (например, коды BTC_ETH) и возвращает пары данных, которые содержат исторические цены двух валют.

3.2 Скачать данные о ценах с Poloniiex

Подавляющее большинство криптовалют не могут быть приобретены напрямую с помощью долларов США, и для получения этих цифровых валют людям обычно приходится сначала покупать биткойны, а затем обменивать их на криптовалюты в зависимости от их ценового соотношения. Поэтому нам нужно скачать обменный курс на биткоин для каждой цифровой валюты, а затем использовать данные о ценах биткойнов, которые доступны в долларах США. Мы загружаем данные о сделках с девятью цифровыми валютами: Ethereum, Litecoin, Ripple, EthereumClassic, Stellar, Dash, Siacoin, Monero и 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

Сейчас у нас есть словарь, состоящий из девяти блоков данных, каждый из которых содержит данные о среднедневных исторических ценах между копейками и биткойнами.

Мы можем судить, правильны ли данные, используя последние несколько строк таблицы цен на Ethereum.

altcoin_data['ETH'].tail()
ETH Открыто Высокий Низкий Закрой. Объем (BTC) Объем (валюта) Показатель цены
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 Объединить в долларах валютные единицы всех данных о ценах

Теперь мы можем объединить данные обменного курса BTC и копейки с нашим индексом цен на биткоин, чтобы напрямую вычислить историческую цену каждой копейки (единицы: доллары).

# 将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']

Здесь мы добавляем новую колонку для каждой копейки, чтобы хранить ее соответствующую цену в долларах.

Затем мы можем использовать функцию merge_dfs_on_column, которая была определена ранее, для создания объединенной пары данных, которая объединяет долларовые цены каждой цифровой валюты.

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

У нас все в порядке!

Теперь давайте одновременно добавим цену биткоина в объединенную пачку данных как последний кусок.

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

Теперь у нас есть уникальная пачка данных, которая содержит ежедневные долларовые цены десяти цифровых валют, которые мы проверяем.

Мы вновь вызываем предыдущую функциюdf_scatter, чтобы показать соответствующие цены всех кошельков в графическом виде.

img

Например, если вы хотите, чтобы ваши цифровые валюты были доступными для всех пользователей, вы можете использовать этот график, который показывает нам общий обзор изменений цен на каждое из них за последние несколько лет.

Примечание: здесь мы сравниваем все цифровые валюты на одном и том же графике с помощью y-оси логарифмических спецификаций. Вы также можете попробовать другие параметры (например, scale=linear) для понимания данных с разных точек зрения.

3.4 Начало анализа корреляции

Внимательный читатель может заметить, что цены на цифровые валюты кажутся связанными, несмотря на их значительную разницу в стоимости и высокую волатильность. Особенно после стремительного роста в апреле 2017 года, даже многие небольшие колебания, похоже, совпадают с колебаниями в целом рынке.

Конечно, выводы, основанные на данных, более убедительны, чем интуиции, основанные на изображениях.

Мы можем проверить вышеуказанную гипотезу взаимосвязи с помощью функции Panda's corr (). Эта проверка рассчитывает Пирсонский коэффициент взаимосвязи для каждой точки в пакете данных.

2017.8.22 Изменения: Изменения в этом разделе были сделаны для того, чтобы использовать абсолютные значения суточных показателей, а не цены при расчете соответствующих коэффициентов.

Прямые расчеты, основанные на нефиксированной временной последовательности (например, первичные данные о ценах), могут привести к отклонению коэффициентов корреляции. Для решения этой проблемы мы используем метод pct_change, который преобразует абсолютное значение каждой цены в пакете данных в соответствующую суточную доходность.

Например, мы рассчитываем коэффициенты, связанные с 2016 годом.

# 计算2016年数字货币的皮尔森相关系数
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')
Имя DASH И т.д. 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
И т.д. 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

В данном рисунке показаны все соотношения. Коэффициенты, приближенные к 1 или 1, означают, что последовательность положительно связана или обратно связана, а соотношения, приближенные к 0, означают, что соответствующие объекты не связаны и их колебания независимы друг от друга.

Для лучшего визуализации результатов мы создали новую функцию помощи визуализации.

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

Здесь цвета в темно-красном цвете представляют сильную корреляцию (каждый вид валюты явно связан с его собственной высотой), а цвета в темно-синем цвете - обратную корреляцию. Все цвета посередине - светло-синий/оранжевый/серый/коричневый - представляют слабую или не связанную в разной степени.

Что нам говорит этот график? По сути, он показывает колебания цен различных цифровых валют в течение 2016 года, при этом почти нет статистически значимой корреляции.

Теперь, чтобы проверить нашу гипотезу о том, что криптовалюты усиливают свою релевантность в последние месяцы, мы будем повторять те же тесты, используя данные с 2017 года.

combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')
Имя DASH И т.д. 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
И т.д. 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

Есть ли какие-то более значимые данные? Достаточны ли они в качестве критерия для инвестиций?

Однако стоит отметить, что практически все цифровые валюты стали все более взаимосвязанными.

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

img

Как видно из приведенного выше рисунка, все становится все интереснее.

Почему это происходит?

Но на самом деле, я не очень уверен...

Моя первая реакция заключается в том, что хедж-фонды недавно начали публично торговать на рынке цифровых валют. Эти фонды имеют значительно больше капитала, чем обычные трейдеры, и если фонд хеджирует свой вкладный капитал между несколькими цифровыми валютами, то в зависимости от независимых переменных (например, фондового рынка) он использует аналогичную торговую стратегию для каждой из валют. Если с этой точки зрения, такая тенденция к растущей корреляции является разумной.

Более глубокое понимание XRP и STR

Например, из приведенного выше рисунка видно, что XRP (токен Ripple) имеет наименьшую связь с другими цифровыми валютами. Но здесь есть один примечательный исключение - STR (токен Stellar, официальное название которого "Lumens"), имеет сильную связь с XRP (коэффициент связки: 0.62).

Интересно, что Stellar и Ripple - очень похожие финтех-платформы, и оба они направлены на сокращение громоздких шагов при межбанковских транснациональных переводах. По всей видимости, учитывая сходство использования токенов в блокчейн-сервисах, некоторые крупные игроки и хедж-фонды могут использовать аналогичные торговые стратегии для своих инвестиций в Stellar и Ripple. Это может быть причиной того, что XRP, по сравнению с другими цифровыми валютами, имеет более сильную связь с STR.

Хорошо, твоя очередь!

Вышеприведенные объяснения в значительной степени являются гипотетическими, и, возможно, вы сделаете лучше. На основе того, что мы уже заложили, у вас есть сотни и тысячи различных способов продолжать исследовать истории, скрытые в данных.

Вот некоторые из моих рекомендаций, которые читатели могут использовать для дальнейших исследований в этом направлении:

  • Добавлено больше данных о цифровых валютах для полного анализа
  • Настройка временного диапазона и гранулированности анализа корреляции для получения оптимизированного или грубо гранулированного видения тенденций.
  • Стремитесь искать тенденции из объемов сделок или извлекайте данные блокчейна. Если вы хотите предсказать будущие колебания цен, вам, вероятно, понадобятся данные о соотношении покупателей и продавцов по сравнению с исходными данными о ценах.
  • Добавляя ценные данные на акции, товары и фиксированные валюты, вы можете определить, какие из них имеют отношение к цифровым валютам.
  • Используйте Event Registry, GDELT и GoogleTrends для количественного определения количества популярных слов, связанных с определенной цифровой валютой.
  • Используйте данные для обучения прогнозирующей модели машинного обучения, чтобы предсказать цены завтрашнего дня. Если у вас больше амбиций, вы можете даже подумать о том, чтобы попробовать использовать циркулятивную нейронную сеть (RNN) для обучения.
  • Используйте ваши анализы, чтобы создать автоматизированный торговый робот, используя соответствующий прикладный программирующий интерфейс (API), который будет применяться на сайтах бирж, таких как Polonix или Coinbase.这里推荐使用发明者量化平台FMZ.COM

Лучшая часть о биткойнах, и о цифровых валютах в целом, заключается в их децентрализованном характере, что делает их более свободными и демократичными, чем любые другие активы. Вы можете делиться своими анализами с открытым исходным кодом, участвовать в сообществе или писать блог! Надеюсь, вы теперь обладаете навыками, необходимыми для самоанализа, а также способностью диалогически мыслить, когда в будущем будете читать статьи о любых спекулятивных цифровых валютах, особенно те, которые не поддерживаются данными.https://www.fmz.com/bbsПосмотрите на это.


Связанные

Больше

Руисиао1989Очень полезная статья, научилась, спасибо.

ДобротаСпасибо за вашу любовь!