Главная > Блог > Частичное закрытие и трейлинг: что ломается и как проверить

MQL5разработка советников

Частичное закрытие и трейлинг: что ломается и как проверить

Опубликовано: 2026-11-11Время чтения: ~2 мин
⏱ Эта статья отражает информацию на дату публикации. Показатели EA (PF, DD, годовая доходность) меняются с реальной торговлей и повторной валидацией — актуальные данные смотрите на страницах EA. Смотреть актуальные результаты EA →
Содержание (5)
  1. Вывод: ломается не логика, а «передача состояния»
  2. Почему при совмещении всё ломается
  3. На «память» советника по остатку полагаться нельзя
  4. Лот нужно не «округлять», а «отбрасывать вниз»
  5. Запись SL — в одном месте и в конце
  6. Чек-лист реализации и проверки
  7. Ограничения и предостережения
  8. Итоги

Вывод: ломается не логика, а «передача состояния»

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

  1. Учёт остатка: советник не может «помнить», что частичное закрытие уже выполнено
  2. Шаг лота: объём закрытия не соответствует минимальному лоту или шагу объёма у брокера
  3. Порядок пересчёта SL: частичное закрытие, перенос в безубыток и трейлинг перезаписывают друг друга

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

Сравнение рекомендованных брокеров →

🎁 Скачать бесплатный EA

📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков

* Конфиденциальность строго защищена. Отписаться можно в любое время.

Почему при совмещении всё ломается

На «память» советника по остатку полагаться нельзя

В MT5 при частичном закрытии тикет позиции не меняется, уменьшается только POSITION_VOLUME. Если признак «частично закрыто» хранится лишь в переменной типа bool, он теряется при перезапуске советника, переподключении VPS или смене таймфрейма. Типичный сбой: на первом же тике после этого советник снова закрывает половину оставшейся позиции.

В качестве решения мы с помощью HistorySelectByPosition() просматриваем историю сделок по позиции и определяем стадию частичного закрытия, сравнивая начальный объём с текущим остатком. Флаг в памяти используется только как вспомогательный.

Лот нужно не «округлять», а «отбрасывать вниз»

Половина от 0.03 лота — это 0.015. На счёте с шагом 0.01 округление по правилам арифметики приведёт к закрытию 0.02, то есть больше задуманного. Объём закрытия нужно округлять вниз по SYMBOL_VOLUME_STEP, а также проверять, не окажется ли остаток после закрытия меньше SYMBOL_VOLUME_MIN. Позицию в 0.01 лота разделить невозможно в принципе, поэтому в спецификации нужно заранее решить: «не закрывать частично» или «закрывать целиком». Иначе советник будет бесконечно получать ошибки.

Запись SL — в одном месте и в конце

PositionModify() задаёт SL и TP одновременно. Если трейлинг передаёт в TP значение 0, TP исчезает. Кроме того, если после частичного закрытия перенос SL в безубыток и подтягивание SL трейлингом срабатывают на одном тике независимо друг от друга, побеждает тот, кто записал позже. В итоге SL, уже поднятый до безубытка, может опуститься обратно.

Мы используем такой порядок:

  • Отправить частичное закрытие → заново выбрать позицию и проверить остаток
  • Рассчитать оба кандидата: SL безубытка и SL трейлинга
  • Двигать SL только в «более выгодную сторону» (для покупки — выше, для продажи — ниже)
  • Проверить уровни stop level и freeze level, затем изменить позицию один раз, заново передав текущее значение TP

Чек-лист реализации и проверки

Что проверитьСимптом при поломкеКак проверить
Определяется ли стадия частичного закрытия по истории сделокПосле перезапуска происходит повторное частичное закрытиеПереустановите советник во время работы и посмотрите, как меняется остаток
Округляется ли объём закрытия вниз по шагуЗакрывается больше задуманного либо возникает ошибкаОткройте позицию минимальным лотом и посмотрите журнал
Решено ли, как делить позицию при минимальном лотеЗакрытие не удаётся на каждом тикеПротестируйте на лоте 0.01
Не возвращается ли SL в невыгодную сторонуПозиция закрывается с убытком после переноса SL в безубытокПроследите изменения SL по времени в журнале
Не стирает ли изменение SL значение TPФиксация прибыли не срабатываетПосмотрите поле TP у позиции после изменения
Не двигается ли SL, если частичное закрытие не удалосьОстаток и исходные допущения по SL расходятсяОтправьте ордер перед закрытием рынка, чтобы вызвать отказ
Не запущен ли советник на счёте с неттингомПозиции складываются с позициями других советниковПроверьте тип счёта

Если вы пользователь, самая быстрая проверка — запустить советник на демо-счёте минимальным лотом и переустановить его посреди работы, убедившись, что поведение не изменилось. Основы настройки описаны в разделе Как настроить советник.

Ограничения и предостережения

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

К тому же частичное закрытие не гарантирует улучшения результатов. У трендовых систем с низким процентом выигрышных сделок, где общий результат держится на немногих крупных прибылях (например, DONCHIAN ENGINE показывает в бэктесте 34.5% прибыльных сделок), сокращение объёма в фазе роста прибыли может снизить математическое ожидание. Колебания результата станут меньше, но чем вы за это заплатите, можно понять только проверкой на конкретном советнике. Мы и сами проверили не все возможные сочетания.

Если вы самостоятельно добавляете частичное закрытие к стратегии вроде DONCHIAN ENGINE, учтите: исходные результаты проверки к изменённой версии уже не применимы.

Итоги

  • При совмещении частичного закрытия и трейлинга ломается чаще всего не логика, а «передача состояния»
  • Стадию частичного закрытия определяйте по истории сделок и остатку, а не по флагу в памяти
  • Лот округляйте вниз по шагу и проверяйте, чтобы остаток не оказался меньше минимального лота
  • Изменение SL выполняйте в одном месте, двигайте только в выгодную сторону и не стирайте TP
  • В бэктесте эти сбои плохо заметны, поэтому проведите на демо-счёте тест с переустановкой советника
  • Частичное закрытие сглаживает колебания результата, но может снижать математическое ожидание

Другие замечания по реализации собраны в разделе Знания об советниках и MT5.

📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков

* Конфиденциальность строго защищена. Отписаться можно в любое время.

Есть вопрос о советниках или Forex?

Задайте его на трейдерском форуме Nattzy (бесплатная регистрация). Можно спрашивать не только по этой статье — о настройке советников, выборе брокера и многом другом.

Спросить на Nattzy ↗

Комментарии и вопросы