НОВОСТИ [Из песочницы] Создание торгового бота используя машинное обучение в анализе временных рядов

Bonnie
Оффлайн
Регистрация
12.04.17
Сообщения
19.095
Реакции
107
Репутация
0
Это не техническая статья, в ней нет подробного анализа методов и теории. Просто как-то я увлекся машинным обучением и как и многие начинающие в этой теме люди, решил сделать торгового бота. Однако это выросло в нечто большее, чем просто тренировочный проект. Вот обо всем этом я и хочу рассказать.

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


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

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

7e007e67ce118d11faf8e6859f070fe0.png

(с)

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

uk7gbobthesvwkv-7zmofqxtj60.jpeg

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

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

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

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

Торг считается прибыльным при достижении точности отметкой 67%.
МесяцТочность

Январь 2020

72%

Февраль 2020

70%

Март 2020

60%

Апрель 2020

70%

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

fcb8g9xjetorym1p0ux62hvuidk.jpeg

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

В заключении


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

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

Выведение и построение прогнозов невозможно без использования временных рядов. Именно этот вид данных лежит в основе прогнозов, которые помогают руководящим лицам принимать жизненно важные для бизнеса решения. Несомненно, анализ временных рядов и их обработка алгоритмами МО — неотъемлемая часть бизнес процессов будущего.
 
Сверху Снизу