Если Вы используете сжатие базового таймфрейма и строите альтернативный сжатый таймфрейм, чтобы получать с него сигналы, то порой мы видим, что сделка открывается по сигналу, закрывается внутри сжатой свечи и снова открывается сделка, т.к. старый сигнал еще действует.
Давайте попробуем воссоздать данную проблему и потом постараться решить её.
Сделаем простой скрипт. Сигнал для открытия сделки на покупку по условию, что свеча растущая.
Закрывать будем коротким трейлом, чтобы быстро подтягивался и позиция быстрее закрывалась.
Инструмент Si — фьючерс на валютную пару доллар/рубль.
Из 1 минутного базового таймфрейма мы сделали через сжатие 5 минутный таймфрейм и от него уже получаем сигналы на открытие позиций.
Посмотрим на график и увидим, что происходят сделки по сигналам (сигнал от логической формулы вынесли на отдельную панель графика, чтобы видеть как долго длится сигнал), закрывается позиция по трейлу, но на этой же свече открывается еще раз.
Нам же надо, чтобы сделка открывалась только один раз по сигналу от 5 минутной свечи, если закрылась позиция, то ждали новый сигнал от 5 минутой свечи и не заходили на текущей сжатой свече еще раз в сделку.
Для решения проблемы повторных входов в позицию можно сделать есть несколько способов, мы рассмотрим два из них.
Первый Способ
Из Панели инструментов — Вкладка «Торговая математика» — берем два кубика: «Время» и «Разжать»
Подключаем блок «Время» к сжатому таймфрейму (кубик М5 -Сжать).
К блоку Разжать подключается Сжатый таймфрейм к верхнему входу и к нижнему входу подключается кубик «Время»
Далее возьмем Логическую формулу, которая и будет являться фильтром от повторных входов, и напишем в ней условие «Разжать!=Разжать[-1]».
Все, можно теперь через кубик логическое «И» объединить основной сигнал (свеча растущая) и наше дополнительное условие.
Объединенный сигнал от блока «И» подключим на вход для открытия позиции и добавим на отдельную панель графика, чтобы визуально наблюдать действие фильтра
Смотрим на график. Лишние сделки перестали исполняться, все работает как и планировали!
Второй Способ
Данный способ более громоздкий и ресурсоемкий, но тоже рабочий.
Возьмем два блока «Номер бара» и блок «Разжать» из вкладки «Торговая математика».
Один подключим к основному источнику.
А второй переименуем «НомерСжатогоБара» и подключим к Сжатому источнику — блок Сжать (М5).
Далее подключим к блоку «Разжать» к верхнему входу связь от блока «Сжать» (М5), а к нижнему входу связь от блока «НомерСжатогоБара».
Также из вкладки «Позиция» добавим в окно редактора блок «Номер бара выхода из последней закрытой позиции»
Теперь через блок «Обновляемое значение», который берем из вкладки «Служебные элементы» (переименуем его в OZ), будем запоминать номер сжатого бара по условию «НомБарВыхИзПосЗакПоз==НомерБара».
Дальше как раз подходим к конечному фильтрующему условию, а звучит оно так «НомерСжатогоБара!=OZ»
т.е. закрывается сделка, запоминаем номер сжатого бара и не входим, пока он не изменится на следующий.
Выглядит итоговый вариант 2 так:
Как видим, данный вариант фильтрации незапланированных повторных входов на сжатых свечах тоже работает!
Небольшое видео по данной теме
Вы уже сейчас можете начать изучать Видео курс- роботы в TSLab и научиться самому делать любых роботов!
Можно записаться на следующий поток ОнЛайн курса «Создание роботов в TSLab без программирования», информацию по которому можно посмотреть тут->
Также можете научиться программировать роботов на нашем Видео курсе «Роботы для QUIK на языке Lua»
Если же вам не хочется тратить время на обучение, то вы просто можете выбрать уже готовые роботы из тех, что представлены у нас ДЛЯ TSLab, ДЛЯ QUIK, ДЛЯ MT5, ДЛЯ КРИПТОВАЛЮТЫ!
Также можете посмотреть совершенно бесплатные наработки для МТ4, Квика, МТ5. Данный раздел также постоянно пополняется.
Не откладывайте свой шанс заработать на бирже уже сегодня!
Отличная статья. Спасибо. У меня работает по второму способу, но первый более изящный, как говорится, век живи — век учись
Спасибо!
к первому способу я бы дописал небольшую ремарку: подходит только в том случае если вход по логике скрипта будет осуществляться строго в начале сжатой свечи, то есть на первой свече НЕсжатого интервала, что хорошо видно на Вашем примере, т.к. условие будет истинным только в момент смены сжатого бара. Если же вход возможен внутри сжатой свечи, то данный способ подойдет и надо использовать исключительно способ №2, потому как он позволяет входить в независимости от начала свечи в любой ее точке. Решил переделать по способу №1 и столкнулся с таким ограничением его использования. Заодно приложу метод на API
В простой переворотной системе способ №1 также не сработает, т.к. закрытие произойдет на первом несжатом баре сжатой свечи на котором действие сигнала по способу №1 уже не будет работать. Поэтому вот такие небольшие ограничения
Я сделал по 1-му способу — все работает. Спасибо за труд!
Спасибо! Отлично!
Большое спасибо за проделанную работу и помощь!
Спасибо!