Найти тему
Analyze it by EnLab

Торговая система EnLab (часть 1).

Коллеги, всем доброго дня!

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

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

Вводная часть.

Первая версия торговой системы EnLab базируется на 3 китах:

  • перекупленность/перепроданность инструмента;
  • каналы и канальные (скоростные) линии поддержки-сопротивления;
  • разворот локального тренда.

Плюс есть 2 особенности:

  • фундаментальный отсев;
  • анализ индексов.

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

Дело за малым, научить робота проводить соответствующий анализ))) Помним о том, что разработка ведётся в одиночку, ресурсы ограничены и для первой версии нужно выбрать некоторый компромисс между сложностью реализации и качеством анализа.

Естественно, помимо технического анализа монет нужно предварительно добавить хоть какую-то "фундаменталку". В первой версии робота я не стал сильно углубляться в это, торговля ведётся на криптобирже Binance, первое что было решено сделать - взять список монет, торгуемых на данной бирже, проверить какие из них входят в ТОП-100 по капитализации (согласно coinmarketcap) и оставить для работы только их. Какой никакой, но фильтр!

Теперь разберём каждый пункт анализа по отдельности более подробно.

I. Перекупленность/перепроданность.

Что такое перекупленность/перепроданность? Чтобы ответить на этот вопрос, мы должны понимать, что данная оценка всегда делается относительно какого-то показателя, например, относительно среднего значения за последние несколько дней или относительно роста других монет. Соответственно, если текущее значение цены, меньше некоего порогового значения выбранного относительно рассматриваемого показателя, то мы говорим, что инструмент перепродан (если наоборот, то перекуплен).

Я решил рассчитывать перекупленность-перепроданность монет относительно всего рынка отобранных альткоинов, а не замыкаться только на цене анализируемого инструмента. Для определения этого достаточно посчитать изменение (рост/падение) в среднем по всем отобранным альткоинам и рассчитать стандартное отклонение, тогда все монетки, которые будут за пределами, допустим, +1 стандартного отклонения от среднего значения можно считать перекупленными, а за пределами -1 стандартного отклонения от среднего значения - перепроданными.

Пример расчёта средних значений и стандартных отклонений для дневного таймфрейма
Пример расчёта средних значений и стандартных отклонений для дневного таймфрейма

Можно спросить, а почему все монеты должны расти одинаково? А они и не должны. Но вы можете видеть какие монеты на дне, а какие на хаях относительно рынка в целом, а что с этим делать это уже другой вопрос.

Я не буду вдаваться в теорию, но так как мы выбрали монеты из ТОП-100 и скорее всего это не щиткоины, то при правильном анализе вы сможете понять, что монетка хорошая и сейчас она на дне или плавно растёт с рынком или пропампилась уже по-полной программе и входить поздно и опасно. То есть мы имеем некоторый фильтр лучше торговать/нейтрально/лучше не торговать монету в данный момент времени, но не более.

II. Каналы и скоростные линии ПС.

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

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

Мне помогли фракталы, линейная регрессия, стандартные отклонения и фибонначи. Есть ещё пара моментов, которые надо оптимизировать и собрать в кучу, но в целом данный набор относительно неплохо справляется с автоматической разметкой инструмента. Рассмотрим пару примеров автоматической разметки:

Автоматическая разметка ETH/BTC (логарифмический график)
Автоматическая разметка ETH/BTC (логарифмический график)
Автоматическая разметка ETH/BTC+LTC/BTC (логарифмический график)
Автоматическая разметка ETH/BTC+LTC/BTC (логарифмический график)

Традиционно, примеры не выбирал, взял первые попавшиеся, но видно, что скорость определена хорошо, линии ПС размечены достаточно качественно и отрабатываются неплохо.

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

Теперь переходим к более интересному. Вторая особенность - обозначенная в начале статьи - индексы. Если вы посмотрите подпись к последнему графику, то увидите, что это "ETH/BTC+LTC/BTC". То есть, мы сложили логарифмические цены обоих инструментов (на самом деле посчитали среднюю цену двух инструментов, но не суть) и построили график. Фактически такой график, это график индекса, состоящий из двух монет ETH и LTC, каждая из которых входит в индекс в равной доле (50 на 50, ещё можно сказать: с равными весами).

Для анализа рынка альткоинов я решил рассчитать индекс из всех отобранных альткоинов и исследовать его.

Индекс альткоинов (ALTS/BTC) с равными весами. Авторазметка.
Индекс альткоинов (ALTS/BTC) с равными весами. Авторазметка.

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

Что нам это даёт? Вы все прекрасно знаете, что корреляция между альтами очень сильная, у меня есть корреляционная матрица, но даже смысла её приводить здесь нет. Разметка индекса альткоинов:

1) показывает области поддержки-сопротивления для рынка альтов в целом (это основная функция);

2) показывает области интересные для покупки и продажи (фактически зоны перекупленности-перепроданности) у нижних и верхних границ канала соответственно (это дополнительная функция).

К примеру, если сейчас вы посмотрите на график выше, то видно, что мы находимся в локальном нисходящем канале и глобальном (относительно 4-часового таймфрейма) восходящем канале и приближаемся к его нижней границе.

Таким образом, наш робот может увидеть состояние как отдельных монет, так и всего рынка альткоинов: положение цены относительно границ канала, а также приближение/достижение линий поддержки сопротивления.

III. Разворот локального тренда.

Хорошо, какие монеты лучше торговать, какие не торговать мы поняли, состояние рынка и возможные точки разворота увидели, чего нам не хватает? Конечно же разворотного паттерна. Одна их самых частых фраз, в моём лексиконе: не входить против локомотива.

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

Разворотный паттерн я буду искать на чуть меньшем тайм-фрейме, чем тот, по которому провожу анализ уровней поддержек-сопротивлений. Если анализирую дневной график, то разворотный паттерн буду искать, допустим на 12-часовом или 6-часовом тайм-фрейме в зависимости от типа паттерна.

Из множества вариантов было решено остановиться на следующем. На более крупном тайм-фрейме (из примера выше на 12-часовом) искать свечной разворот применяя метод сложения, допустим, 3 последних закрытых свечей (итоговая получившаяся свеча должна удовлетворять параметрам разворотной). Для простоты приведу пример сложения двух свечения (три свечи - аналогично):

Метод сложения свечей
Метод сложения свечей

На меньшем тайм-фрейме (из примера выше на 6-часовом) анализировать изменения углов линейной регрессии различных периодов. Для простоты приведу пример смены угла наклона короткопериодной линейной регрессии с восходящей на нисходящую при достижении уровня ПС:

Смены угла линейной регрессии (зелёная - красная линии).
Смены угла линейной регрессии (зелёная - красная линии).

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

Краткие итоги 1 части.

Коллеги, ряд нюансов я опущу, но в целом мы имеем следующую картину логики входа.

1) Торговый робот после запуска подгружает все монеты с бинанса, далее связывается с coinmarketcap и оставляет из них только те, которые входят в ТОП-100 монет.

2) По выбранным монетам каждые несколько секунд рассчитывает и обновляет график индекса альткоинов.

3) Используя линейную регрессию, стандартные отклонения, фибо и фракталы строит разметку (канал и скоростные линии) на графике индекса альткоинов, соответственно определяет области поддержки-сопротивления и положение в канале.

4) При нахождении в допустимой зоне и близости к уровню поддержки ищет разворотный паттерн на меньшем тайм-фрейме по свечной комбинации из 3 свечей и анализу углов линейной регрессии.

5) В случае совпадения всех условий пунктов 3 и 4 робот считает, что рынок разворачивается (хотя бы локально). Соответственно, если рынок разворачивается вверх, то уже идёт рост альтов и нужно входить в те, которые наиболее недооценены в краткосрочной и среднесрочной перспективе. Чтобы определить эти монеты робот определяет какие из монет находятся ниже -1 стандартного отклонения от среднего значения изменений цены по рынку (на различных периодах).

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

Во второй части поговорим про сопровождение сделок. В третьей про выходы из позиции.

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

Одновременная подгрузка, анализ и управление несколькими аккаунтами на Бинанс.
Одновременная подгрузка, анализ и управление несколькими аккаунтами на Бинанс.

В общем работы проделано много, но по сравнению с тем, сколько осталось это капля в море) Однако начало положено и это уже хорошо!

Спасибо за потраченное время. Удачи, успехов и профитов!

@EnLab