Как выполнить технический анализ криптовалют с помощью 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 года интересным.

btc_usd_30_min_sma.png30-минутная SMA для BTC/USD на 23.04.2019

Здесь вы можете видеть, что, начиная с раннего утра 23 апреля, 30-минутная SMA начинает действовать как линия поддержки для BTC/USD, поскольку она выросла с 5 375 до 5 550. В идеальном мире это было бы примерно на 3,26% всего за несколько часов.

Резюме

Вот и все! С Ruby можно быстро и легко провести технический анализ с помощью жемчужины технического анализа. Пара ресурсов, которые полезны или упомянуты выше:

Попробуйте, добавив еще одну SMA и изменив период на 200. Или попробуйте рассчитать другой индикатор, например полосы Боллинджера.


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

Кроме того, я работаю в Intrinio и вношу основной вклад в жемчужина технического анализа!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *