Как выполнить технический анализ криптовалют с помощью Ruby
Обзор
Технический анализ — это форма анализа, которая использует закономерности в рыночных данных для выявления тенденций и прогнозирования. Хотя технический анализ форекс или цен на ценные бумаги обычно проводится, давайте посмотрим, как выглядит технический анализ криптовалют.
У меня есть 1-минутные интервальные цены для биткойнов/долларов США в файле CSV, и я буду использовать немного Ruby, чтобы выполнить быстрый технический анализ, рассчитав Простая скользящая средняя (SMA).
Начиная
Прежде всего, создайте новую папку, чтобы сохранить свою работу. Измените каталог на эту папку в командной строке, выполнив:
cd YourNewFolderPath
cd Documents/Projects/crypto/technical_analysis
Вам нужно будет установить 2 гема, csv и технический анализ. Вы можете сделать это, запустив:
gem install csv
gem install technical-analysis
Gem csv помогает нам анализировать CSV-файлы в Ruby. Жемчужина технического анализа — хороший проект с открытым исходным кодом для выполнения технического анализа различных наборов данных в Ruby.
Хорошо, теперь мы готовы начать. Создайте файл (bitcoin_technical_analysis.rb
) в папку, которую вы создали ранее.
Давайте require
драгоценные камни, которые мы только что установили, добавив следующие 2 строки в начало файла:
require 'csv'
require 'technical-analysis'
Парсинг данных из CSV
Следующим шагом будет получение необходимых данных из нашего CSV-файла.
Если вам нужны данные о ценах на криптовалюту в формате CSV, проверьте Intrinio, они предлагают массовую загрузку всех видов данных.
Есть много способов получить данные из CSV-файла с помощью Ruby. Для этого упражнения у меня есть данные в файле с именем btcusd_1m.csv
в той же папке, которую мы создали ранее (Documents/Projects/crypto/technical_analysis
).
Заголовки моих столбцов в этом CSV от Intrinio:
EXCHANGE_CODE
PAIR_CODE
TIMEFRAME
TIME
OPEN
HIGH
LOW
CLOSE
VOLUME
Нам нужны только некоторые из этих столбцов, а некоторые нужно будет переименовать. Ты можешь видеть здесь что technical-analysis
gem ищет данные, отформатированные определенным образом, в зависимости от того, какой индикатор вы пытаетесь использовать.
Мы будем рассчитывать СМА, поэтому давайте разберем CSV, чтобы получить данные, которые нам нужны для этого индикатора. Для SMA нам нужно 2 значения для каждого наблюдения — date_time
наблюдения и value
наблюдения. В этом случае мы собираемся рассчитать SMA на основе цены закрытия BTC/USD из нашего CSV-файла с интервалом в 1 минуту.
Давайте создадим метод для получения данных из CSV-файла, их анализа и форматирования.
Этот способ, get_data
принимает параметр, представляющий собой строку CSV-файла btcusd_1m.csv
. Вот пример:
get_data('./btcusd_1m.csv')
Затем мы используем csv
gem для анализа CSV. С каждой строкой мы меняем time
ключ, чтобы быть date_time
и превращая значение close
к Float
отформатировать его для использования в technical-analysis
драгоценный камень. Вы захотите настроить свой код в соответствии с форматированием данных CSV.
Например, если ваши данные CSV имели заголовок CLOSE_PRICE
вместо CLOSE
вы хотели бы сделать что-то вроде этого:
formatted_row[:close] = row[:close_price]&.to_f
Как только мы запустим get_data
наш результат будет Array
из Hashes
это выглядит примерно так*:
[
{ date_time: "2019-04-22 18:43:00 UTC", close: 5001.00},
{ date_time: "2019-04-22 18:42:00 UTC", close: 5002.00},
{ date_time: "2019-04-22 18:41:00 UTC", close: 5003.00}
]
Цены закрытия в приведенном выше примере составлены
Теперь, когда у нас есть данные в нужном формате, давайте приступим к техническому анализу.
Технический анализ
Пришло время использовать жемчужину 1technical-analysis1 для расчета SMA.
Продолжая с тем же кодом, что и раньше:
Во-первых, мы получаем данные из нашего CSV, как мы упоминали ранее, выполнив:
data = get_data('./btcusd_1m.csv')
Затем устанавливаем параметры индикатора. Опции зависят от индикатора. Для SMA вы можете увидеть здесь что варианты SMA включают period
а также price_key
.
я уеду period
до значения по умолчанию 30. Поскольку мы используем цены с интервалом в 1 минуту, это означает, что мы рассчитываем 30-минутную SMA. price_key
имя столбца, в котором находятся данные. По умолчанию :value
в геме, но у нас есть данные в столбце с именем :close
. Нам нужно сказать гему, чтобы он искал наши данные в close
колонка вместо value
. Итак, мы установили price_key
быть :close
:
options = { price_key: :close }
Наконец, мы используем technical-analysis
gem для выполнения анализа, передавая данные и параметры, которые мы только что определили, выполнив:
TechnicalAnalysis::Indicator.calculate(
'sma',
data,
:technicals,
options
)
Это возвращает Array
из [SmaValue]
( объекты. Каждый индикатор возвращает свой объект со своими атрибутами. SmaValue
имеет date_time
а также sma
.
Теперь, когда мы рассчитали SMA, давайте проанализируем результаты.
Анализ результатов
Последним шагом является анализ расчетов SMA путем их графического отображения. Большинство технических индикаторов представлены в виде графиков. Я быстро поместил результаты в новый CSV-файл и нарисовал их в виде графика в Excel для демонстрационных целей. При этом я просмотрел данные за последний месяц или около того и нашел 23 апреля 2019 года интересным.
30-минутная SMA для BTC/USD на 23.04.2019
Здесь вы можете видеть, что, начиная с раннего утра 23 апреля, 30-минутная SMA начинает действовать как линия поддержки для BTC/USD, поскольку она выросла с 5 375 до 5 550. В идеальном мире это было бы примерно на 3,26% всего за несколько часов.
Резюме
Вот и все! С Ruby можно быстро и легко провести технический анализ с помощью жемчужины технического анализа. Пара ресурсов, которые полезны или упомянуты выше:
Попробуйте, добавив еще одну SMA и изменив период на 200. Или попробуйте рассчитать другой индикатор, например полосы Боллинджера.
Этот пост носит исключительно информационный характер и не является инвестиционным советом. Пожалуйста, обратитесь за советом к лицензированному специалисту.
Кроме того, я работаю в Intrinio и вношу основной вклад в жемчужина технического анализа!