Марк отправляется трейдить на реальный счет, после успешного тестирования в течение 2 недель. Эмма продолжает создавать сложности: новые идеи, которые двигают ситуацию и вперед, и назад, и вперед.
Марк отправляется на реальный счет
Робот предыдущей серии, Марк 4, прошел 2-недельное тестирование на демо-счете в режиме реального времени. Успешно.
Прошлую неделю я разбирал подробно по позициям, в этот раз не буду, только подведу общий итог. Робот работает совершенно корректно, протестировал его в тестере за этот же временной период — результаты идентичные риал-тайм тесту.
За две недели Марк 4 на стартовый баланс $5k заработал $450, перекладывая в проценты, +9%, при максимальной просадке -3%.
Это меньше, чем должно было получиться по расчетам, основанным на тестах в прошлом, но лежит в пределах расчетных значений и, в общем, меня вполне устраивает. Марк 4 со следующей недели отправляется трейдить на реальном счете, через месяц расскажу о результатах.
Эмма 3: Закрытие позиций
В прошлый раз я остановился на том, что очистил сигналы, получая подтверждения с большего таймфрейма, но стратегия все еще остается недоработанной.
Предыдущий этап разработки я завершил мыслью:
Можно вернуться к использованию дополнительного индикатора для фильтрации сигналов (исключить флеты), или ввести закрытие позиций (в ноль во флете).
Начну с закрытия позиций. Это просто реализовать и я заметил интересную особенность.
В большинстве случаев сигнал на открытие позиции поступает в момент разгона тренда и позиция фактически сразу уходит в плюс, где потом и закрывается, спустя некоторое время.
То есть если поставить стоп на уровень 0 пунктов, когда позиция уйдет немного в плюс, то она случайно не закроется. То есть ничего не поменяется для верных позиций.
Но в некоторых случаях такой подход позволит закрыть позиции, которые открылись в верную сторону, но потом рынок развернулся и пошел минус.
Конечно, это не исправит некоторые изначально неверные позиции. (бирюзовые круги), но в некоторых случаях (зеленый и красный) должно исключить убыток.
Добавлю небольшое изменение в алгоритм Эммы 2, выставляющее безубыток для позиций, который ушли в плюс на 10 пунктов (потом вынесу в global, если будет смысл).
С помощью пары блоков в функции подсчета ордеров, я проверяю вышла ли очередная позиция в плюс на заданное число пунктов, и если вышла, то переставляю ее стоп-ордер на цену открытия позиции.
Компилирую код как Эмма 3, поскольку буду вносить еще изменения в эту версию, и проверю:
Да, в некоторых случаях это решение сработало (зеленый), в других — ничего не поменялось, но это и ожидалось (бирюзовый), а кое-где не ушел рынок в плюс на 10 пт, чтобы выставился безубыток.
В целом стало лучше, но нужны еще решения. Поскольку не вижу никакого хорошего варианта с закрытием по стратегии, то подумаю над фильтрацией.
Примечание: безубыток вынес в виде параметра в меню настройки робота, теперь за него отвечает переменная unloss_pips. Также добавил трейлинг с шагом unloss_pips. Если не нужен просто поставить >100.
Эмма 3: Фильтрация сигнала
Поскольку закрытие по стратегии не предусмотрено, попробую не открывать проблемные позиции. В частности есть флеты, которые необходимо обойти.
Идея фильтрации следующая: исключить открытие позиций «против рынка» внутри глобального тренда.
Что взять? Просто переберу индикаторы на графике с тестирования, и посмотрю какой поможет отсечь ненужные позиции.
Прикидывая визуальные модели я выбрал индикатор On Balance Volume.
OBV был разработан Джозефом Гранвиллом в 1960-х годах. Аналитик обнаружил, что когда объем увеличивается, а цена остается стабильной, позже цена подскакивает. И наоборот, когда объем падает, а цена остается на прежнем уровне.
Этот индикатор изначально предназначен для анализа объемов на рынке акций, но буду его использовать для валютных, поскольку одна из интерпретаций его работы, а именно визуальная, подходит.
В случае Эммы, фильтрация будет производиться по принципу положительных/отрицательных значений OBV.
На скрине я показал пару ситуаций в которых не открывались бы ненужные продажи (зеленый, OBV выше нуля) и покупки (красный, OBV ниже нуля).
Профильтрую уже получаемые сигналы (добавлю дополнительное условие прямо перед открытием). Промежуточные изменения в структуре не буду выносить в скриншотах, покажу итоговый алгоритм.
Тестирование Эммы 3 с фильтром открытия позиций по OBV:
Судя по визуальным признакам, фильтрация сработала, судя по результатам тестирования — тоже.
Теперь алгоритм Эммы 3 работает в плюс, но при длинных верных позициях почему-то прибыльность очень низкая.
Новые решения = новые проблемы
Чтобы понять, почему доходность изменилась не настолько, насколько бы хотелось, надо подробно разбирать отчет.
Для начала, надо понять, что по количеству позиций и прибыли/убыткам.
Количество позиций сократилось с 70 до 45 за месяц — так и должно быть, поскольку в базовый алгоритм была добавлена фильтрация.
Видно большие прибыльные позиции, но опять есть серии убыточных небольших позиций, нужно найти их на графике, чтобы понять.
Иногда серия убыточных позиций возникает при рыночной неопределенности:
При этом, некоторые проблемы решились ранее, с помощью функции безубытка (циан), но в некоторых случаях (оранжевый) рынок не уходит в плюс достаточно (unloss_pips), чтобы стоп позиции робот переставил в ноль.
Новые проблемы = новые решения
Размышляя, как устранить новые проблемы, в голову идет как общие, так и ситуационные методы:
Решение 1: Сократить необходимый разрыв цены для безубытка. Но в таком случае позиции будут закрываться рано в движении по тренду.
Решение 2: Открывать позиции не рыночным ордером по текущей цене, а отложенным с небольшим зазором. Но этот скорее подойдет, чтобы избавиться от открытия позиций во время всплесков, а таких не много.
Решение 3: Не закрывать убыточные позиции во флете по обратному сигналу, вместо этого подождать и закрыть их в ноль.
То есть внести небольшое изменение в базовый алгоритм — раньше при удовлетворении условий открытия покупки автоматически закрывалась продажа, и наоборот. Теперь же, вместо закрытия, надо переставить тейк прошлой позиции на ноль и открывать новую по сигналу независимо.
Это решение является наиболее приемлемым (хотя над реализацией придется посидеть), но как оно сочетается с другой серией убытков?
Да, здесь все еще проще — можно вообще не закрывать. Решение 3, разобранное выше, тоже будет работать без проблем.
Остальные серии убытков укладываются в эти два профиля, поэтому стоит попробовать решить эту проблему, тем более, что и решение уже есть.
Эмма 4: Умное (нет) закрытие
Поскольку для реализации умного закрытия нужно внести существенные изменения в базовый алгоритм накручу цифру версии.
Небольшое отступление: я с большим скепсисом отношусь к приставке «smart» или «умный» из-за часто совершенно бесцельного и бессмысленного ее использования. Я всегда иронизирую, когда использую эту приставку сам, и имею ввиду что-то очень глупое, но эффектное.
Для визуализации, с чем приходится иметь дело сейчас — алгоритм Эммы 3 сейчас (до изменений) выглядит так:
Ломая голову над тем, как организовать какое-то умное закрытие проблемных позиций, я мыслил следующим образом:
Надо проставлять коммент всем открываемым позициям, а потом, когда возникает необходимость умного закрытия, то просто маркировать через коммент и организовать какую-то отдельную процедуру, которая будет работать с проблемными позициями.
Но потом до меня дошло, что можно вместо отдельной обработки проблемной позиции можно просто переставить тейк в ноль.
Если позиция убыточная, то позже закроется в ноль, если прибыльная — закроется сразу. Действительно, «умное» 😁 закрытие позиций.
Необходимо посмотреть с визуализацией, что происходит на графике:
Похоже все работает корректно, то есть открывшаяся не верно сделка просто остается висеть, пока не закроется в ноль.
Но, по закону сохранения проблем в стратегии, когда я решил проблему с флетами, возникла другая — проблемная позиция появилась в тренде:
Там где раньше позиция, открывшаяся в неверную сторону могла провисеть до сигнала на противоположную (голубой), теперь она остается открытой, пока не уйдет в ноль или в стоп (оранжевый).
Эти убыточные позиции я просто не учел, поскольку они вообще не возникали, пока не было «умного» закрытия.
Получается, такой механизм хорош для избавления от небольших убытков во флете, но в тренде он сжирает прибыль верной позиции.
Справедливости ради, с алгоритмом умного закрытия Эмма 4 в минус не уходит, но и практически не зарабатывает. Так не пойдет.
Итоги
Умное закрытие позиций Эммы 4 оказалось слишком «умным», так, что от него придется отказаться, вернувшись к прежней версии. Четвертая версия в утиль.
Версия Эмма 3 (GitHub), в которой реализована фильтрация, повысила прибыльность базового алгоритма. Нужная еще доработка, поэтому следующую, пятую, версию продолжу с третьей.