Частичное закрытие и трейлинг: что ломается и как проверить
Содержание (5)
Содержание
Вывод: ломается не логика, а «передача состояния»
По отдельности частичное закрытие и трейлинг-стоп — несложные операции. Проблемы начинаются, когда обе применяются к одной и той же позиции. По нашему опыту разработки, неполадки почти всегда сосредоточены в трёх местах:
- Учёт остатка: советник не может «помнить», что частичное закрытие уже выполнено
- Шаг лота: объём закрытия не соответствует минимальному лоту или шагу объёма у брокера
- Порядок пересчёта 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.
По теме
2026-11-07
Стоп-уровень и уровень заморозки: почему не ставится SL
2026-11-01
Почему EA на закрытых барах не перерисовывает сигналы
2026-10-29
MQL5: OnTick и OnTimer — как выбрать при разработке EA
2026-10-02
Разнести советники по нескольким брокерам
📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков
* Конфиденциальность строго защищена. Отписаться можно в любое время.
Есть вопрос о советниках или Forex?
Задайте его на трейдерском форуме Nattzy (бесплатная регистрация). Можно спрашивать не только по этой статье — о настройке советников, выборе брокера и многом другом.
Спросить на Nattzy ↗