Pull to refresh

Создание торгового бота используя машинное обучение в анализе временных рядов

PythonProgrammingAlgorithmsMachine learningArtificial Intelligence
Sandbox
Это не техническая статья, в ней нет подробного анализа методов и теории. Просто как-то я увлекся машинным обучением и как и многие начинающие в этой теме люди, решил сделать торгового бота. Однако это выросло в нечто большее, чем просто тренировочный проект. Вот обо всем этом я и хочу рассказать.

Немного о Машинном обучении


Машинное обучение (Machine Learning; далее МО), так или иначе является составной частью отрасли Искусственного Интеллекта (Artificial Intelligence; далее ИИ), науки и технологии, которая позволяет “интеллектуальным” компьютерным системам моделировать человеческое поведение. В эту же отрасль входит и понятие Глубокое обучение (Deep Learning), затрагивающее нейронные сети и имитацию человеческого мышления.

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

image
(с)Oracle

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

Обладание огромными объемами информации ещё не приносит пользы её держателю. Но именно через алгоритмы и методы МО, большие данные (Big Data) начинают обретать смысл и пользу. Немного конкретнее, системы МО замечают закономерности и выстраивают заключения на основе множества факторов в системе данных, не будучи запрограммированными на это.

Основные случаи применения МО сегодня — распознавание объектов, компьютерное видение, анализ данных, контроль качества (мониторинг) и предиктивная аналитика.

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

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

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

Анализ временных рядов


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

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

Применяя методы МО для таких данных, мы получаем возможность найти более глубокие закономерности в данных. В результате мы получаем более “интеллектуальный” прогноз будущих значений.

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

Другими словами, для проведения анализа важно, что событие X произошло в момент времени Y. На примере курса валют, нам важна выборка, где цена привязана к определённому моменту времени. Если нарушить порядок дат в ряде дата-цена, то он станет бессмысленным.

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

Если же алгоритмы МО, анализируют, скажем, изображения котиков, то нам не важна привязка ко времени, или даже порядок, в котором поступают картинки.

Применение на примере трейдинга криптовалют


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

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

Сейчас в алгоритме используются несколько моделей, обученных в разное время, т.к. я постоянно совершенствовал алгоритм обучения и добавлял к нему новые собранные данные. Для реализации использовался язык программирования Python с библиотеками Keras, Scipy, Pandas.

Скрипт для исполнения трейдинговых операций выставляет ордеры на торговой платформе Bitmex в круглосуточном режиме. При возникновении сигнала на открытие позиции и совершении соответствующей сделки, скрипт будет ожидать, пока цена не достигнет уровней Take Profit или Stop Loss, либо пока не истечет время жизни сделки (Time To Live).


Главный лог файл, отображающий обработку данных в реальном времени

Алгоритм обработки данных полагается на технический анализ данных, историю торгов, предыдущие ордеры, распоряжения, и новости связанные с криптовалютой (через обработку естественного языка, или Natural Language Processing — NLP).

За основную метрику успеха берётся точность на основе количества ордеров типа Take profit в отношении общего количества ордеров. Итого прогноз считается успешным при достижении ордера Take Profit, в то время как Stop Loss и Time to Live признаются моделью как неуспешные.

Точность = (Кол-во ордеров типа Take profit) / (Общее кол-во ордеров)

Торг считается прибыльным при достижении точности отметкой 67%.
Месяц Точность
Январь 2020 72%
Февраль 2020 70%
Март 2020 60%
Апрель 2020 70%

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


Зеленые треугольники — это успешные сделки (Take profit достигнут), красные — неуспешные (Stop loss, Time to Live). Треугольники, смотрящие вверх — это сделки на покупку, треугольники, смотрящие вниз — это сделки на продажу.

В заключении


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

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

Выведение и построение прогнозов невозможно без использования временных рядов. Именно этот вид данных лежит в основе прогнозов, которые помогают руководящим лицам принимать жизненно важные для бизнеса решения. Несомненно, анализ временных рядов и их обработка алгоритмами МО — неотъемлемая часть бизнес процессов будущего.
Tags:временные рядыкриптовалютатрейдингнейронные сетиблокчейналгоритмы обработки данныхнаука о данныdata science
Hubs: Python Programming Algorithms Machine learning Artificial Intelligence
Total votes 18: ↑13 and ↓5 +8
Views6.3K

Popular right now

SQL и получение данных
May 18, 202120,230 ₽Нетология
Python-разработчик с нуля
May 18, 202156,940 ₽Нетология
Аналитик данных
May 19, 202166,000 ₽Нетология
Python для работы с данными
May 26, 202131,500 ₽Нетология
Machine Learning. Professional
May 28, 202170,000 ₽OTUS