Криптовалюты — движущая сила новой золотой лихорадки. Автор предлагает использовать анализ данных для лучшего понимания этого развивающегося рынка.
В последнее время возникает ощущение, будто деньги растут на деревьях.
Объемы биржевой торговли достигают миллионов долларов, а рыночная капитализация — миллиардов. Впору говорить о золотой лихорадке, подогреваемой появлением все большего количества новых криптовалют.
Мы живем в эпоху цифровых валют. Появившись менее 10 лет тому назад, концепция криптовалют уже сегодня получила широкое распространение. Несмотря на столь малый срок, на рынке уже существует более тысячи разных криптовалют, а ICO происходят чуть ли не каждый день.
По мере того как мы привыкаем к новому, быстро набирающему обороты рынку, важно попытаться понять, что с ним происходит. Существует много рисков, как на микроуровне (например, личное инвестирование), так и на макроуровне (например, предотвращение рыночных крахов или крупные потери капитала). Вот где в игру вступаем мы.
Мы занимаемся данными, а если точнее, то я представляю команду разработчиков TimescaleDB — новой базы данных на базе PostgreSQL с открытым исходным кодом для работы с временными рядами. Мы подумали, что будет полезно и увлекательно проанализировать криптовалютный рынок с помощью PostgreSQL и TimescaleDB (и R для визуализации полученных данных).
В ходе работы мы проанализировали исторические данные по OHLC-графикам для более чем 1200 криптовалют, любезно предоставленные нам CryptoCompare (последняя дата выборки — 26 июня этого года). Шаг в этом конкретном наборе данных составляет сутки, однако следует отметить, что TimescaleDB легко масштабируется для работы с гораздо меньшими временными отрезками. Наш продукт, в частности, прекрасно подходит на роль базового инструмента для работы с растущим потоком данных о новых коинах и биржах.
Вот что вы можете вынести для себя из этого поста:
- Несколько ценных выводов общего характера о положении дел на криптовалютномм рынке.
- Лучшее понимание того, как связка TimescaleDB + PostgreSQL может упростить анализ данных по временным рядам.
- Получите инструкции для самостоятельной загрузки этого набора данных, обнаружите новые тренды (и может быть, даже составите с их помощью собственную стратегию по входу на рынок!).
Отказ от ответственности: приведенный анализ не следует рассматривать как рекомендацию для проведения тех или иных финансовых операций. Если вы захотите провести собственный анализ, обратите внимание на инструкцию, в которой описана установка TimescaleDB и загрузка данных CryptoCompare.
Итак, если бы 7 лет назад вы вложили в Биткоин 100$, сейчас он стоил бы...
Давайте начнем со старого доброго синдрома упущенной выгоды. Если вы хоть немного знакомы с криптовалютами, вы, вероятно, слышали о Биткоине, «прадеде» всех криптовалют. Оказывается, что если бы в июле 2010 годы вы вложили в него $100, сегодня эта сумма выросла бы до $5 млн.
За это время Биткоин показал довольно приятную динамику (даже с учетом произошедшего сравнительно недавно небольшого обвала):
-- BTC USD prices by two week intervals
SELECT time_bucket('14 days', time) as period,
last(closing_price, time) AS last_closing_price
FROM btc_prices
WHERE currency_code = 'USD'
GROUP BY currency_code, period
ORDER BY period;
Курс BTC к доллару США на момент закрытия биржи за последние 7 лет
С помощью PostgreSQL, мы запросили ценовые показания BTC с двухнедельными интервалами, проанализировав курс к доллару США на биржах. Примечание: time_bucket и last в этом запросе — собственные функции TimescaleDB (в PostgreSQL отсутствуют), применяемые для анализа временных рядов.
Надеемся, что вы не покупали биткоины в феврале 2014...
Нельзя однако сказать, что у BTC все всегда было гладко. Давайте присмотримся повнимательнее к ежедневной волатильности курса и проведем вычисления, воспользовавшись мощными оконными функциями PostgreSQL:
-- Daily BTC returns by day
SELECT time,
closing_price / lead(closing_price) over prices AS daily_factor
FROM (
SELECT time,
closing_price
FROM btc_prices
WHERE currency_code = 'USD'
GROUP BY 1,2
) sub window prices AS (ORDER BY time DESC);
Коэффициент деления курса BTC/USD текущего дня на курс предыдущего (7-летний период)
В силу относительной незрелости рынка, курс Биткоин подвержен существенным перепадам. Стабильный прирост стоимости в целом говорит об успешности криптовалюты, но есть в ее истории один явно выбивающийся из общей картины период резкого роста, наблюдавшийся в начале 2014 года. Рассмотрев этот период более подробно, заметим крупные скачки в феврале-марте 2014 года. Инвесторам, которые вложились в BTC на пике рынка пришлось изрядно подождать, поскольку курс вскоре стабилизировался, и еще нескоро достиг показателей, при которых продажа купленных в то время биткоинов стала выгодным делом.
Коэффициент деления курса BTC/USD текущего дня на курс предыдущего (2014 год)
Прощай Китай, здравствуй Япония
Рынок криптовалюты — явление международное. Изучая объемы торговли с точки зрения валют, мы заметили кое-что интересное:
-- BTC trading volumes by currency
SELECT time_bucket('14 days', time) as period,
currency_code,
sum(volume_btc)
FROM btc_prices
GROUP BY currency_code, period
ORDER BY period;
Объемы торговли BTC в различных фиатных валютах за последние 7 лет (двухнедельные интервалы, составные столбики)
В 2014 произошел небольшой скачок стоимости Биткоин в Китае, вызванный предположительно девальвацией юаня и ослаблением внутреннего фондового рынка страны. За этим последовал бум 2016 и раннего 2017 годов: китайская валюта доминировала в биткоин-торговле.
Доля юаней в торговле биткоинами за последний год (двухнедельные интервалы)
В течение всего нескольких месяцев этот показатель резко снизился.
В чем же причина? Здесь наступает время выйти за рамки анализа числовых данных и заняться старым добрым исследованием. Сделанные нами выводы хорошо иллюстрируют тот факт, что полагаться только на количественные данные для изучения рынка нельзя.
В начале 2017 года Народный банк Китая привел в действие постановления, ограничивающие деятельность криптовалютных бирж. Уже в феврале две крупнейшие в стране биржи (OKCoin и Huobi.com) приостановили вывод криптовалюты в обмен на иностранную валюту, и к середине этого года поток китайских транзакций сошел на нет. В это же время Япония стала лидером по количеству объема операций с биткоинами. Дело дошло даже до того, что Биткоин был признан легальной валютой в апреле 2017 года.
Объем BTC в различных валютах после резкого снижения доли BTC/CNY транзакций в 2017 года. BTC/JPY — новый лидер по объему (двухнедельные интервалы)
А теперь давайте порассуждаем, что было бы, если бы вы вложили 100$ в ETH в январе 2017...
Несмотря на то, что «биткоин-поезд ушел» еще в далеком 2010, поводов для беспокойства нет. Многие наблюдатели согласны, что даже на фоне его большой волатильности, ценовые перепады Ethereum выглядят еще впечатляюще (и недавняя «коррекция» — лишнее тому подтверждение). Давайте посмотрим на цены Ethereum в биткоин эквиваленте (как его обычно принято котировать):
-- ETH prices in BTC by two week intervals
SELECT time_bucket('14 days', c.time) as period,
last(c.closing_price, c.time) AS last_closing_price_in_btc
FROM crypto_prices c
WHERE c.currency_code = 'ETH'
GROUP BY period
ORDER BY period;
Курс ETH к BTC на момент закрытия торгового дня за последние 3 года
Однако как мы знаем, Биткоин и сам не отличается заметной стабильностью, что снижает полезность приведенного выше графика. Давайте посмотрим на цены ETH в фиатных валютах, с помощью ежедневных биржевых котировок BTC к фиатным валютам. (Для этого воспользуемся полезными свойствами JOINов Postgres и несколькими навороченными фильтрами):
-- ETH prices in BTC, USD, EUR, and CNY by two week intervals
SELECT time_bucket('14 days', c.time) as period,
last(c.closing_price, c.time) AS last_closing_price_in_btc,
last(c.closing_price, c.time) * last(b.closing_price, c.time) filter (WHERE b.currency_code = 'USD') AS last_closing_price_in_usd,
last(c.closing_price, c.time) * last(b.closing_price, c.time) filter (WHERE b.currency_code = 'EUR') AS last_closing_price_in_eur,
last(c.closing_price, c.time) * last(b.closing_price, c.time) filter (WHERE b.currency_code = 'CNY') AS last_closing_price_in_cny
FROM crypto_prices c JOIN btc_prices b ON time_bucket('1 day', c.time) = time_bucket('1 day', b.time)
WHERE c.currency_code = 'ETH'
GROUP BY period
ORDER BY period;
Курс ETH к трем фиатным валютам на момент закрытия торгового дня за последние 3 года
В первый год своего существования ETH превзошел любой из годовых показателей роста BTC за все историю последнего. Внушительные 530% роста в средней цене закрытия по сравнению с предыдущим годом — хорошее начало. В целом к 2017 году совокупный показатель роста за все эти годы упал в 2017 по сравнению с 2016 до 200%. Однако даже такой результат все равно выглядит впечатляюще для любого другого актива. Что же касается последнего полугодия, то сейчас цены на ETH выросли на 3000%. Поэтому если бы вы вложили 100 долларов в ETH в январе этого года (почти 7 месяцев тому назад), сегодня их стоимость составляла бы уже $3 тыс.
Выражая стоимость ETH в стабильных валютах (USD, EUR, CNY) видим, что все три графика имеют одинаковую форму. В последние полгода четко прослеживается стремительный рост во всех валютных эквивалентах, кроме BTC. График курса ETH/BTC, будучи схожим с графиками фиатных валют, гораздо больше подвержен флуктуациям стоимости BTC. В результате попытки выражения цены ETH в BTC создают неправдоподобное впечатление неустойчивости первой. Очевидно, BTC еще слишком молодая валюта чтобы считать ее базовой.
А что насчет других 1200 криптовалют?
Надеемся, что этот краткий обзор BTC и ETH трендов позволил вам лучше понять хаотичный мир криптовалют. Итак, что же мы сделаем с другими 1200 криптовалютами?
Что ж, для начала давайте воспользуемся нашим набором данных чтобы отследить их происхождение:
Важное примечание: Наш набор данных содержит информацию на момент ее сбора, который мог произойти уже после проведения ICO.
-- Currencies sorted by first time we have data for them
SELECT ci.currency_code, min(c.time)
FROM currency_info ci JOIN crypto_prices c ON ci.currency_code = c.currency_code
AND c.closing_price > 0
GROUP BY ci.currency_code
ORDER BY min(c.time) DESC;
currency_code | min
---------------+------------------------
CIR | 2017-06-26 20:00:00+00
MDC | 2017-06-26 20:00:00+00
WBTC | 2017-06-26 20:00:00+00
NET | 2017-06-26 20:00:00+00
NAS2 | 2017-06-26 20:00:00+00
TPAY | 2017-06-26 20:00:00+00
MRSA | 2017-06-26 20:00:00+00
XCI | 2017-06-26 20:00:00+00
PAY | 2017-06-19 20:00:00+00
SNM | 2017-06-18 20:00:00+00
LGD | 2017-06-17 20:00:00+00
SNT | 2017-06-16 20:00:00+00
IOT | 2017-06-12 20:00:00+00
QRL | 2017-06-09 20:00:00+00
MGO | 2017-06-09 20:00:00+00
CFI | 2017-06-08 20:00:00+00
VERI | 2017-06-07 20:00:00+00
EQT | 2017-06-07 20:00:00+00
ZEN | 2017-06-05 20:00:00+00
BAT | 2017-05-31 20:00:00+00
Временная метка первой записи для каждой криптовалюты (по убыванию)
Рынок постоянно развивается, а кроме того, судя по ежедневному приросту новых криптовалют, к тому же постоянно расширяется. Опубликованный выше список содержит лишь 20 самых новых по состоянию на 26 июня токенов, и позволяет получить представление о том, сколько новых криптовалют появляются каждую неделю.
Давайте посчитаем количество появляющихся каждый день новых криптовалют на основе первой даты появления ценовой информации по ним:
-- Number of new currencies with data sorted by day
SELECT day, COUNT(code)
FROM (
SELECT min(c.time) AS day, ci.currency_code AS code
FROM currency_info ci JOIN crypto_prices c ON ci.currency_code = c.currency_code
AND c.closing_price > 0
GROUP BY ci.currency_code
ORDER BY min(c.time)
)a
GROUP BY day
ORDER BY day DESC;
Количество новых криптовалют в день за последние 4 года
Количество новых криптовалют в день за текущий год
day | count
------------------------+-------
2017-06-26 20:00:00+00 | 8
2017-06-19 20:00:00+00 | 1
2017-06-18 20:00:00+00 | 1
2017-06-17 20:00:00+00 | 1
2017-06-16 20:00:00+00 | 1
2017-06-12 20:00:00+00 | 1
2017-06-09 20:00:00+00 | 2
2017-06-08 20:00:00+00 | 1
2017-06-07 20:00:00+00 | 2
2017-06-05 20:00:00+00 | 1
2017-05-31 20:00:00+00 | 5
2017-05-28 20:00:00+00 | 29
2017-05-27 20:00:00+00 | 13
2017-05-26 20:00:00+00 | 32
2017-05-25 20:00:00+00 | 303
2017-05-16 20:00:00+00 | 1
2017-05-15 20:00:00+00 | 7
Количество новых криптовалют по датам, ежедневная статистика (по убыванию)
Когда мы запрашиваем информацию о первом появлении данных о криптовалютах (для отслеживания их «возраста»), становится заметно что рынок — это не только группа инвесторов, есть и другая категория его участников — создатели цифровых активов. Буквально недавно, 25–28 мая, по данным нашего набора, был отмечен большой приток новых коинов — свыше 300 новых токенов менее чем за неделю. (Поскольку наш набор фиксирует только ценовую информацию по криптовалютам, информация об их появлении может не соответствовать датам проведения ICO.)
Лидеры и догоняющие криптовалютного мира
Криптовалют сегодня так много, что становится сложно отличить толковые от сомнительных. Как можно определить какие из них достойны внимания? Вот вам одна из метрик: суммарный объем биржевых операций за последнюю неделю.
-- 1200+ crypto currencies by total transaction volume (in btc) over the last month
SELECT 'BTC' as currency_code,
sum(b.volume_currency) as total_volume_in_usd
FROM btc_prices b
WHERE b.currency_code = 'USD'
AND now() - date(b.time) < INTERVAL '8 day'
GROUP BY b.currency_code
UNION
SELECT c.currency_code as currency_code,
sum(c.volume_btc) * avg(b.closing_price) as total_volume_in_usd
FROM crypto_prices c JOIN btc_prices b ON date(c.time) = date(b.time)
WHERE c.volume_btc > 0
AND b.currency_code = 'USD'
AND now() - date(b.time) < INTERVAL '8 day'
AND now() - date(c.time) < INTERVAL '8 day'
GROUP BY c.currency_code
ORDER BY total_volume_in_usd DESC;
currency_code | total_volume_in_usd
---------------+---------------------
BTC | 2040879023.54
ETH | 1617388472.94011
LTC | 287613541.293571
XRP | 269417667.514443
ETC | 165712729.612886
ANS | 126377042.5269
SC | 111623857.796786
DASH | 86875922.3588143
ZEC | 78836728.2129428
BTS | 69459051.5958428
Общий объем транзакций 10 основных криптовалют в долларах США за последнюю неделю (по убыванию)
Общий объем транзакций 10 основных криптовалют в долларах США за последнюю неделю (по убыванию)
Небольшое пояснение к этому запросу: данные по BTC и другим криптовалютам живут в разных таблицах. Поэтому нам приходится объединить эти два запроса с помощью UNION. Ранее мы также определились, что хотим получать котировки в фиатных валютах (например, в долларах), а не в BTC. Поэтому вторая половина запроса комбинирует данные с таблицей BTC для конвертации BTC в USD.
Лидерами по объему операций оказались, как это ни странно, Биткоин и Ethereum. А вот следующие участники хит-парада — Litecoin (LTC), Ripple (XRP), и Ethereum Classic (ETC), идут почти на равных. Присутствующий на рынке уже пять лет Litecoin практически идентичен Биткоину и часто рассматривается в качестве ключевого игрока на рынке. Ripple, который позиционируется как банковский коин для представителей международного коммерческого рынка и работает на более специфичную аудиторию, также считается многообещающим и набирающим обороты коином. Интересно и то, что в пятерке лидеров есть не только ETH, но и ETC, что позволяет говорить о том, что рынок сегодня сильно ориентирован на Ethereum.
Самые прибыльные криптовалюты
Еще один способ «прошерстить» длинный список криптовалют — проанализировать их прибыльность, например, показатель суммарной ежедневной прибыли. В нашем наборе имеются ценовые данные для более чем 1200 криптовалют. Если присмотреться к самому крупному увеличению курса в день, можно выявить лидеров внутридневной торговли.
-- Top crypto by daily return, by day
SELECT time,
last(currency_code,daily_factor),
max(daily_factor)
FROM (
SELECT currency_code,
time,
closing_price,
lead(closing_price) over (partition BY currency_code ORDER BY time DESC) AS prev_day_closing_price,
closing_price / lead(closing_price) over (partition BY currency_code ORDER BY time DESC) AS daily_factor
FROM crypto_prices) q
GROUP BY time
ORDER BY time DESC;
time | last | daily_return
------------------------+--------+------------------
2017-06-26 20:00:00+00 | CIN | 40.1428571428571
2017-06-25 20:00:00+00 | KC | 38
2017-06-24 20:00:00+00 | VOYA | 14.2747252747253
2017-06-23 20:00:00+00 | PAY | 3.18506315211422
2017-06-22 20:00:00+00 | YOVI | 119.607843137255
2017-06-21 20:00:00+00 | ION | 7.97665369649805
2017-06-20 20:00:00+00 | TES | 5.25157232704403
2017-06-19 20:00:00+00 | KNC | 150000
2017-06-18 20:00:00+00 | ZNY | 22.5217391304348
2017-06-17 20:00:00+00 | YOVI | 22.0590746115759
2017-06-16 20:00:00+00 | LTD | 9.50207468879668
2017-06-15 20:00:00+00 | AMIS | 168758.782201405
2017-06-14 20:00:00+00 | JANE | 6
2017-06-13 20:00:00+00 | YOVI | 690.636254501801
2017-06-12 20:00:00+00 | U | 5.21452145214522
2017-06-11 20:00:00+00 | JANE | 6
2017-06-10 20:00:00+00 | WGO | 3.58744394618834
2017-06-09 20:00:00+00 | BNT | 5000
2017-06-08 20:00:00+00 | XNC | 52.7704485488127
2017-06-07 20:00:00+00 | CBD | 14.3243243243243
2017-06-06 20:00:00+00 | CC | 72
2017-06-05 20:00:00+00 | BLAZR | 7.38461538461538
2017-06-04 20:00:00+00 | GREXIT | 13.0833333333333
2017-06-03 20:00:00+00 | EPY | 4.29880478087649
2017-06-02 20:00:00+00 | YOVI | 1257.67790262172
2017-06-01 20:00:00+00 | FCN | 8.57142857142857
2017-05-31 20:00:00+00 | EPY | 348.611111111111
2017-05-30 20:00:00+00 | BST | 14.1441860465116
2017-05-29 20:00:00+00 | FCN | 45.3086419753086
2017-05-28 20:00:00+00 | NOO | 56536.231884058
Самые высокие показатели внутридневной разницы стоимости криптовалюты (по убыванию даты)
Давайте определим криптовалюту с самым крупным ежедневным показателем прибыльности. Для вычислений ежедневной прибыли снова воспользуемся оконной функцией, а для поиска криптовалюты, принесшей больше всего дохода в каждый отдельно взятый день применим функцию last из набора TimescaleDB.
Вывод за последние три месяца показывает количественное превосходство AMIS (168-кратный прирост стоимости 15 июня). Эта криптовалюта показывала самое большое увеличение в 15 разных дней. Однако присмотревшись к ней повнимательнее, заметим что высокий рост обусловлен столь же высокими флуктуациями цены: стоимость AMIS часто откатывается назад к нулевому уровню после каждого увеличения.
Цена закрытия дня для AMIS в последние пять месяцев
Другой лидер этой выборки, YOVI, показывал лучший результат 3 раза, но также подвержен схожим ненадежным трендам, что и AMIS:
Цена закрытия дня для YOVI в последние пять месяцев
Несмотря на нестабильность этой пары трендов, они тем не менее выглядят более многообещающе по сравнению с ETH, стоимость которого стабильно падала в первый год своего существования (2015):
Цена закрытия дня для ETH в 2015
(Повторный отказ от ответственности: TimescaleDB не поддерживает какую-либо из этих криптовалют и не несет ответственности за ваши инвестиции в них и любые возможные связанные с ними потери.)
Итак, выходит, что деньги растут… на деревьях Меркла?
В этом материале мы сделали несколько выводов из открытого набора данных по криптовалютам, продемонстрировав сильные стороны PostgreSQL и TimescaleDB. И все же следует помнить, что криптовалютный рынок неизбежно изменится в следующем месяце, на следующей неделе или даже завтра.
Однако если вы хотите самостоятельно изучить этот набор и провести свой анализ, к Вашим услугам доступна соответствующая инструкция по скачиванию данных и установке TimescaleDB.
Если вы захотите узнать больше о TimescaleDB и о том, как она позволяет повысить эффективность PostgreSQL для работы с временными рядами, рекомендуем ознакомиться с техническим постом.
Автор: Wirex