Разработка алгоритмических торговых моделей и стратегий - непростая задача. Что еще хуже, текущее состояние криптовалюты очень нестабильно и быстро меняется. Рынок стал зоной боевых действий из-за постановлений SEC и различных правительств, нацеленных на криптобиржи. Несмотря на все негативные новости, многие трейдеры добиваются успеха в дейтрейдинге криптоактивов.

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

Ручное моделирование

Разработка алгоритмической модели / стратегии обычно начинается с просмотра необработанных данных, но, что более важно, анализа нескольких индикаторов, таких как SMA, MACD, EMA и RSI. Вся суть процесса состоит в том, чтобы попытаться найти некоторые закономерности, которые довольно очевидны для человеческого глаза, но также и то, что эти закономерности повторяются на протяжении всей истории и, надеюсь, сохранятся в будущем.

В теории

Большинство стратегий основаны на получении прибыли, поэтому люди ищут способы обнаружить долину, чтобы они могли инициировать сигнал «покупки», а затем позволяют системе дождаться пика, чтобы вызвать сигнал «продажи». Это рискованный бизнес, поскольку нет никаких гарантий, то есть: система не может точно сказать (с учетом исторических событий), находится ли эта рыночная цена в долине или нет - она ​​может только сделать расчетное предположение. И в этом весь смысл, мы пытаемся сделать расчетное предположение, то есть вероятность того, что мы находимся в долине / пике и запускаем торговый сигнал (покупка или продажа).

В реальности

Реальность намного сложнее теории. Система может указать, что это долина, но через несколько минут цена упадет еще ниже.

Если вы когда-либо писали код для крупных программных проектов, то вы знаете, что количество ошибок / отказов растет пропорционально каждой новой добавляемой строке кода. Это означает, что чем больше кода вы напишете, тем больше ошибок / ошибок / ошибок вы вызовете - люди несовершенны, равно как и программисты, какими бы блестящими они ни были. Когда мы пишем код, мы обычно имеем в виду четкую цель, поэтому мы знаем, на какой результат следует дать четко определенный ввод. Но попробуйте сделать это с датой ввода (крипто) активов (например, биткойнов), и вы быстро поймете, что это нетривиальная вещь. Входные данные никогда не будут одинаковыми, и мы не можем просто полагаться на кучу кода «если это - сделай то». Однако это единственный язык, который понимает компьютер, это наш самый надежный инструмент для работы.

Чтобы упростить нашу работу, мы должны ввести математику и статистику в помощь. Это делается путем создания индикаторов, как упоминалось ранее, таких как SMA и MACD. Индикатор - это функция, которая берет необработанные данные, преобразует их и выводит что-то новое. Индикаторы облегчают нашу жизнь при анализе необработанных рыночных данных, они позволяют нам обнаруживать / видеть закономерности, которые мы иначе не увидели бы. Если вы хоть немного разбираетесь в трейдинге, то знаете, насколько полезны графики MACD, длинных и коротких SMA.

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

Выше у нас есть цена биткойнов, нанесенная в виде свечей. Затем я создал индикатор (EMA) некоторого размера, основанный на значениях Open и Close. Следующим шагом будет использование кода, то есть операторов «если это - сделайте то», чтобы придумать базовую стратегию, которая будет иметь положительную рентабельность инвестиций (включая комиссию за торговлю). Помните мою предыдущую историю о пиках и впадинах? Что ж, здесь мы видим это в действии. Мой алгоритм использует индикатор EMA для генерации первого сигнала на покупку (обозначенного буквой «B» на графике), в данном случае он предназначен для прогнозирования долины, потому что после дождя обычно наступает солнце. Однако после этой покупки солнце не наступило, а только пошел дождь (цена продолжала снижаться). А потом на каком-то локальном пике генерируется сигнал на продажу.

На этом графике ясно видно, как простой алгоритм принимает решения. Печально то, что его решения не оптимальны, причина очевидна, поскольку на каждом шаге алгоритм может смотреть только в прошлое - он не может предсказывать будущее, чтобы принять «лучшее» решение. Другая печальная часть заключается в том, что такой простой алгоритм имеет жестко запрограммированные параметры, такие как параметры индикатора (например, размер EMA). Для нас, людей, мы можем посмотреть на эти генерируемые сигналы и сказать «какое глупое решение» - мы вообще не можем спорить, машина может принимать только те решения, которые мы ее запрограммировали. Если параметры не оптимальны, результат тоже.

В нижней части изображения я указываю рентабельность инвестиций сгенерированных сигналов, которая немного превышает 94%, что означает, что система потеряла около 6% - причина: она покупала дороже, чем продавала, и, что еще хуже, она платила комиссия 0,1% с каждой сделки.

Ниже представлен другой сценарий. На этот раз мы используем три индикатора, но показан только один. Коричневые полосы представляют индикатор MACD, который состоит из двух разных индикаторов EMA:

Основная идея использования MACD в качестве торговой стратегии состоит в том, чтобы снова обнаружить пики и спады. Это становится очевидным, когда вы смотрите на то, где появляются сигналы покупки / продажи, то есть на пике / спаде некоторого локального MACD. Эта стратегия, похоже, работает лучше, чем предыдущая, поскольку рентабельность инвестиций превышает 99% (то есть она все еще принесла убыток около 1%) - но мы не можем сравнивать две просто так, потому что в предыдущем примере было только два торговых сигнала. а у этого есть намного больше.

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

Рентабельность инвестиций в приведенном выше примере составляет более 99%, как и в случае с нашим MACD. Более пристальный взгляд на сигналы довольно увлекательный: было совершено две короткие сделки на покупку / продажу, которые находятся всего в нескольких минутах друг от друга. В этом случае я попытался позволить системе получить прибыль за очень короткий промежуток времени, используя высокую волатильность.

Проверка стратегии

Эти три примера основаны на очень небольшом количестве данных. Все, что показано на графике, использовалось для генерации торговых сигналов и расчета рентабельности инвестиций. На практике мы должны запускать наш алгоритм на данных за дни, недели, месяцы или даже годы, чтобы проверить его успешность. К сожалению, очень немногие из этих стратегий оказались успешными в наших тестах. Фактически, все вышеперечисленное может обеспечить рентабельность инвестиций более 100% - если бы не было комиссии за торговлю, поскольку именно так биржи не позволяют нам стать миллионерами в одночасье.

Глубокие данные

Использование необработанных рыночных данных (например, цены и объема) в сочетании с несколькими индикаторами редко дает прибыльную торговую стратегию. Если только ваш алгоритм не является довольно сложным и хорошо спроектированным - в таком случае перепроверьте все, потому что в конце концов у вас может быть ошибка или неучтенный сценарий.

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

На графике выше вы можете увидеть одну из этих стратегий в действии. Обратите особое внимание на то, где он генерирует сигналы на покупку / продажу - они кажутся более оптимальными, чем в предыдущих трех примерах, но далеки от совершенства. Еще более важное замечание - рентабельность инвестиций, она положительная (116%) и в среднем увеличивается на 1% в день.

Ниже представлен другой график, использующий ту же стратегию, но в другую дату / время. И снова результаты феноменальны: рентабельность инвестиций составляет 125%, а ежедневный прирост составляет около 3%.

Эту стратегию я продолжаю тестировать, проверять и оптимизировать по сей день - кажется, это лучшее, что я когда-либо придумал. Обратите внимание на то, как далеко друг от друга отличаются сигналы покупки и продажи по сравнению с нашими предыдущими примерами. Здесь они разделены на много часов или даже на несколько дней, тогда как раньше они составляли всего несколько минут или несколько часов. Прежде чем продать почку и пойти ва-банк, я должен убедиться, что она действительно работает. Надеюсь, через несколько недель я подключу его и напишу новый пост с результатами.

Искусственный интеллект

Можно разработать столько моделей, сколько он / она пожелает, или, по крайней мере, столько моделей, на которые у него хватит смелости. Это непростой процесс разработки. Довольно сложно тестировать и проверять новые гипотезы, одновременно изменяя множество параметров и пробуя разные значения. Но что, если мы сможем использовать искусственный интеллект? чтобы помочь нам придумать еще более совершенные модели и стратегии?

Эта область исследований даже сложнее, чем создание моделей вручную, но это уже будущее - и если вы не с ним, значит, вы отстаете. В какой-то момент, если не уже, А. будут принимать лучшие торговые решения (как долгосрочные, так и краткосрочные), чем люди. Если вы A.I. исследователь / разработчик, вы точно знаете, насколько сложно создать систему с торговой стратегией. Он уже достаточно сложен, чтобы научить его выполнять простые задачи, такие как распознавание объектов на картинках.

Гибридное моделирование

Еще несколько недель назад я использовал разработанную вручную стратегию, которая использовала наши прогнозы для генерации торговых сигналов. В то время результаты были довольно «хорошими», но они не включали комиссию за торговлю - так что на самом деле они больше «не так хороши».

Одна из этих стратегий заключалась в том, чтобы смотреть на самые высокие и самые низкие точки прогноза и генерировать сигнал продажи / покупки через эти соответствующие интервалы. Если подумать, это определенно не будет оптимальной стратегией. С таким же успехом можно начать покупать / продавать случайным образом, и в этом ему повезет больше. Но я бы пока не стал выбрасывать эту идею в мусорное ведро. В моем предыдущем посте я проиллюстрировал наши недавние улучшения прогнозов. Так что определенно стоит попробовать повторить эту старую стратегию на новых данных.

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

Есть одна особенность, которую я добавил в эту смесь: предсказание следующего сигнала покупки / продажи. Я хотел научить нашу систему предсказывать полезные сигналы на покупку / продажу так же, как мы заставляем ее предсказывать будущую цену. Для этого мне сначала пришлось обучить систему тому, как выглядит хорошая позиция покупки и хорошая позиция продажи. Я сделал это, просмотрев все данные и используя концепцию упреждения: учитывая позицию 't', если в ближайшем будущем цена сильно упадет, то 't' должно указывать на сигнал 'продать'. - но если цена будет расти, тогда "t" должно быть "покупкой". Ближайшее будущее определяли следующие 10 или около того интервалов. Любое другое «t» означает сигнал «ничего не делать». Ниже представлена ​​диаграмма, показывающая результат моих усилий:

На графике выше мы видим прогноз цены на графике синих / черных свечей. Фиолетовая линия - это результат моей "вещи" предсказания сигнала, как только что объяснено. Я научил систему, что сигнал «продать» равен 100; покупка равна 50, а «ничего не делать» равно нулю. В конце концов, система не полностью соответствует моим ценностям, поэтому она генерирует что-то близкое к нулю, около 50 или около 100. Но у нее есть некоторые интересные результаты. Если вы присмотритесь, он действительно указывает на некоторые интересные сигналы «покупки» (= значение 50), а затем вы должны угадать, для какого ближайшего интервала в ближайшем будущем сигнал «продажи» соответствует некоторому сигналу «покупка». В конце концов, это может оказаться полезной торговой стратегией, но ее действительно сложно интерпретировать и понимать как есть. Мне нужно провести еще много исследований и разработок, чтобы улучшить его.

Q-обучение

Это форма обучения с подкреплением (RL), методика обучения искусственного интеллекта. делать определенные вещи. RL - это трюк, с помощью которого можно научить машину играть в шахматы, го и даже в Space Invaders.

Если мы можем научить машину играть в Pac Man, то с таким же успехом мы могли бы научить ее генерировать сигналы покупки / продажи. Это именно то, что я сделал. Логика заключается в том, чтобы дать системе вознаграждение (например, похлопать по спине), когда она принимает правильные решения, а если нет, мы наказываем ее. Награда / наказание выражается числом, поэтому мы обучаем систему оптимизации для получения максимально возможного результата. Вначале он делает кучу случайных догадок, получает вознаграждение / наказание, а затем учится / повторно тренируется на основе этих результатов. Этот процесс продолжается бесконечно, пока мы не прикажем ему остановиться. Мы не хотим, чтобы система была чрезмерно приспособлена к входным данным, но мы также не хотим, чтобы она была суперслучайной, поэтому мы должны остановить ее после определенного количества итераций.

Внедрение Q-Learning было выполнено с использованием проекта с открытым исходным кодом. Мне нужно было только настроить и отрегулировать его в соответствии с моими потребностями. Я также понял, что в основе систем Q-Learning обычно лежала нейронная сеть с прямой связью, я не наткнулся ни на одно решение, в котором вместо нее использовалась бы рекуррентная нейронная сеть (пока). Но это то, что я реализовал. Я быстро понял, что обучение системы с помощью RL - очень утомительный и долгий процесс, на его выполнение уходит буквально часы / дни, в зависимости от количества итераций и некоторых других факторов.

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

Спасибо, что прочитали, и ждите следующих выпусков! :)
- Илья Неволин

Эта история опубликована в The Startup, крупнейшем предпринимательском издании Medium, за которым следят более 310 538 человек.

Подпишитесь, чтобы получать наши главные новости здесь.