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

Автор:Лидия., Создано: 2023-01-06 10:28:01, Обновлено: 2023-09-20 10:27:27

img

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

Подход, основанный на данных, к спекулятивному анализу цифровых валют

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

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

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

img

Это не статья, объясняющая цифровую валюту, и это не мнение о том, какие конкретные валюты будут расти и какие будут уменьшаться.

Шаг 1: Создание рабочей среды для данных

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

1.1 Установка FMZ Quant докера и настройка Anaconda

  • Система Docker платформы FMZ Quant Платформа FMZ QuantFMZ.COMОн не только предоставляет высококачественные источники данных для основных основных бирж, но и предоставляет набор богатых интерфейсов API, которые помогают нам осуществлять автоматические транзакции после завершения анализа данных. Этот набор интерфейсов включает в себя практические инструменты, такие как запрос информации о счете, запрос высокой, открытой, низкой, цены получения, объема торговли и различных часто используемых технических показателей анализа различных основных бирж. В частности, он предоставляет сильную техническую поддержку для публичных интерфейсов API, соединяющих основные основные биржи в фактическом процессе торговли.

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

В официальном названии платформы FMZ Quant эта система Docker называется системой Docker.

Пожалуйста, ознакомьтесь с моей предыдущей статьей о том, как развернуть докер и робота:https://www.fmz.com/bbs-topic/9864.

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

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

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

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

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

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

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

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

conda create --name cryptocurrency-analysis python=3

чтобы создать новую среду Анаконда для нашего проекта.

Далее, ввод:

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

чтобы активировать среду.

Далее, ввод:

conda install numpy pandas nb_conda jupyter plotly

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

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

1.3 Создать блокнот Jupyter

После установки среды и зависимых пакетов выполните:

jupyter notebook

чтобы запустить ядро iPython, затем посетите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)

Шаг 2: Получить информацию о цене цифровой валюты

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

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

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

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

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

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

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

Давайте возьмем Kraken Bitcoin Exchange в качестве примера, начиная с получения его цены на Биткойн.

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

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

btc_usd_price_kraken.head()

Результат:

img

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

# 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

Здесь мы используем Plotly для завершения части визуализации. По сравнению с использованием некоторых более зрелых библиотек визуализации данных Python, таких как Matplotlib, Plotly является менее распространенным выбором, но это действительно хороший выбор, потому что он может вызвать D3.js полностью интерактивные диаграммы. Эти диаграммы имеют красивые настройки по умолчанию, которые легко исследовать и очень легко встраивать в веб-страницу.

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

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

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

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

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

# 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 Интегрировать все данные в одну базу данных

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

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)

Теперь все рамки данных интегрированы на основе столбца "взвешенная цена" каждого набора данных.

# Integrate all data frames
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')

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

btc_usd_datasets.tail()

Результаты показаны следующим образом:

img

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

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

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

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

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

img

2.6 Ясные и совокупные данные о ценах

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

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

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

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

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

img

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

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

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

# 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

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

Шаг 3: Соберите цену альткоинов

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

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

Во-первых, мы используем API биржи Poloniex для получения информации о данных транзакций с цифровой валютой. Мы определяем две вспомогательные функции для получения данных, связанных с Altcoins. Эти две функции в основном загружают и кэшируют данные 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 Poloniex и вызвать только что определенную функцию 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') # 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

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

3.2 Скачать данные о ценах транзакций из Poloniex

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

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

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

altcoin_data['ETH'].tail()

img

3.3 Объединить валютную единицу всех данных о ценах в долларах США

Теперь мы можем объединить данные обменного курса BTC и Altcoins с нашим индексом цен на Bitcoin, чтобы вычислить историческую цену каждого Altcoin (в долларах США) напрямую.

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

Здесь мы добавляем новую колонку для каждой карты данных Altcoin для хранения соответствующей цены в долларах США.

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

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

Сделано! Сделано!

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

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

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

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

img

Этот график показывает нам полную картину изменения курса каждой цифровой валюты за последние несколько лет.

Примечание: здесь мы используем у-ось логарифмической спецификации для сравнения всех цифровых валют на одном графике.

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

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

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

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

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

Прямой расчет, основанный на непрочных временных рядах (таких как сырые данные о ценах), может привести к отклонению коэффициента корреляции.

Например, рассмотрим коэффициент корреляции в 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

В таблице выше показан коэффициент корреляции. Когда коэффициент близок к 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')

img

Достаточны ли вышеприведенные данные для того, чтобы использовать их в качестве критерия инвестиций?

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

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, учитывая сходство токенов, используемых блокчейн-сервисами.

Ну, теперь твоя очередь!

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

Читатели могут обратиться к исследованиям в следующих направлениях:

  • Добавьте больше данных о цифровой валюте ко всему анализу.
  • Корректировать временной диапазон и гранулированность анализа корреляции для получения оптимизированного или грубозернистого представления о тенденции.
  • По сравнению с исходными данными о ценах, если вы хотите предсказать будущие колебания цен, вам может понадобиться больше данных о соотношении количества покупок / продаж.
  • Добавьте ценные данные к акциям, сырьевым товарам и фиатным валютам, чтобы определить, какая из них имеет отношение к цифровым валютам (но не забывайте старую поговорку корреляция не подразумевает причинности).
  • Используйте Регистр событий, GDELT и Google Trends для количественного определения количества "горячих слов" вокруг определенной цифровой валюты.
  • Используйте данные для обучения модели предсказательного машинного обучения, чтобы предсказать цены завтрашнего дня.
  • Используйте свой анализ, чтобы создать автоматический торговый робот, который можно применить к веб-сайту биржи Poloniex или Coinbase через соответствующий интерфейс программирования приложений (API).FMZ.COM) рекомендуется здесь.

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


Связанные

Больше