Почему не сработал стоп-лосс: Bid, Ask и проскальзывание

Автор материала
  • фото сергей сергеев

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

В ордере стоял Stop Loss 1,10000, а позиция закрылась по 1,09958. В другом случае сделку Sell закрыло, хотя максимум свечи остался ниже стопа. Эти ситуации выглядят одинаково — трейдер считает, что приказ не сработал правильно. Причины у них разные.

Стоп-лосс состоит из двух событий. Сначала определённая котировка достигает установленного уровня. Затем сервер отправляет операцию на закрытие позиции по доступной рыночной цене. Уровень активации и цена сделки могут не совпасть.

В MetaTrader 5 Stop Loss длинной позиции проверяется по цене Bid, короткой — по Ask. После достижения уровня позиция закрывается рыночной операцией, поэтому цена исполнения может оказаться хуже Stop Loss. Если терминал не показывает Ask, между котировками возник гэп или расширился спред, трейдер может не увидеть цену, которая активировала приказ.

Принятый сервером Stop Loss работает при выключенном терминале. Trailing Stop ведёт себя иначе: его рассчитывает сама торговая платформа, поэтому без запущенного терминала уровень перестаёт передвигаться.

Что именно делает Stop Loss

Stop Loss — связанный с открытой позицией приказ на её автоматическое закрытие после достижения заданного ценового условия.

MetaTrader разделяет три понятия:

  1. Ордер — инструкция брокеру.

  2. Сделка — исполненная покупка или продажа.

  3. Позиция — итоговый объём обязательств по инструменту.

Достижение Stop Loss активирует операцию закрытия. Сделкой становится уже результат её исполнения. Поэтому в истории могут находиться разные значения:

  • уровень Stop Loss;

  • цена активации;

  • цена закрывающей сделки;

  • финансовый результат.

Официальная документация MetaTrader указывает, что покупка обычно исполняется по Ask, а продажа — по Bid. Цена самой сделки зависит от режима исполнения конкретного инструмента. Источник: MetaTrader 5 — основные принципы торговли.

Что Stop Loss не гарантирует

Обычный стоп-лосс не гарантирует закрытие по указанной цифре.

Он не обеспечивает:

  • наличие котировки точно на уровне стопа;

  • неизменный спред;

  • непрерывное движение цены без гэпов;

  • достаточную ликвидность по одной цене;

  • отсутствие задержки между активацией и исполнением;

  • сохранение рассчитанного убытка во время резкого движения;

  • работу Trailing Stop при выключенном терминале.

Investor.gov объясняет тот же принцип для биржевых стоп-приказов: после достижения стоп-цены приказ превращается в рыночный, а рыночная заявка гарантирует приоритет исполнения, но не конкретную цену. Эти правила относятся к рынку ценных бумаг США, однако они наглядно показывают разницу между ценой активации и исполнения.

По какой цене срабатывает Stop Loss

Для внебиржевых инструментов MetaTrader использует разные стороны котировки.

Позиция Чем закрывается Цена проверки Stop Loss Условие активации
Buy Продажей Bid Bid ≤ Stop Loss
Sell Покупкой Ask Ask ≥ Stop Loss

Это правило указано в официальном руководстве MetaTrader 5.

Stop Loss позиции Buy

Трейдер купил EUR/USD и поставил Stop Loss ниже текущей цены. Чтобы закрыть позицию, сервер должен продать валюту. Продажа проходит по Bid.

Условие:

Если Stop Loss установлен на 1,10000, он активируется при Bid 1,10000 или ниже.

Свечи MetaTrader для большинства внебиржевых инструментов формируются по Bid. Поэтому касание стопа длинной позиции обычно видно на графике.

Stop Loss позиции Sell

Трейдер продал EUR/USD и поставил Stop Loss выше рынка. Чтобы закрыть короткую позицию, сервер должен купить валюту. Покупка проходит по Ask.

Условие:

Свечи MetaTrader обычно показывают Bid, а Ask по умолчанию может быть скрыт. Из-за этого короткая позиция способна закрыться, хотя максимум видимой свечи не дошёл до Stop Loss.

MetaTrader рекомендует включать отдельную линию Ask для контроля таких ситуаций.

Почему стоп-лосс сработал раньше видимой цены

Причина чаще всего находится в спреде.

Связь между котировками:

Для короткой позиции условие Stop Loss можно переписать через цену на Bid-графике:

Отсюда видимый уровень срабатывания:

Пример для позиции Sell

Исходные данные:

  • позиция Sell EUR/USD;

  • Stop Loss — 1,10500;

  • Bid — 1,10472;

  • Ask — 1,10502;

  • спред — 0,00030, или 30 пятизначных пунктов.

Проверяем:

Ask превысил Stop Loss на два пункта. Позиция должна закрыться, хотя максимум Bid-свечи находится на 28 пунктов ниже уровня 1,10500.

Терминал ничего не «дорисовывал». Трейдер смотрел не на ту сторону котировки, по которой проверялся приказ.

Почему расширение спреда опасно

При обычном спреде 10 пунктов Ask находится близко к Bid. Перед новостями, после перерыва или при снижении ликвидности спред может расшириться.

Допустим:

  • Stop Loss позиции Sell — 1,10500;

  • Bid — 1,10450;

  • спред расширился до 50 пунктов.

Тогда:

Стоп активируется, хотя Bid-график находится на пять пипсов ниже его линии.

Это не доказывает корректность конкретной котировки брокера. Для проверки потребуется история Bid и Ask на торговом сервере.

Что происходит с биржевыми инструментами

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

Следовательно, на биржевом инструменте нужно проверить три цены:

  • Last — могла активировать приказ;

  • Bid — цена доступной продажи;

  • Ask — цена доступной покупки.

Переносить правила EUR/USD на акцию или фьючерс без проверки спецификации нельзя.

Почему сделка закрылась хуже Stop Loss

После достижения стоп-уровня серверу нужна встречная заявка. Если по указанной цене объёма нет, позиция исполняется по следующей доступной цене.

Разница называется проскальзыванием:

Знак результата зависит от направления позиции, поэтому для оценки убытка удобнее использовать отдельные формулы.

Для позиции Buy:

Для позиции Sell:

Если результат положительный, сделка закрылась хуже Stop Loss. Отрицательное значение означает исполнение лучше установленного уровня.

FINRA предупреждает, что при быстром рынке цена исполнения стоп-приказа может заметно отличаться от стоп-цены. Источник относится к американским акциям, но описывает общий риск рыночного исполнения после активации: FINRA — риски стоп-приказов.

Пример проскальзывания EUR/USD

Исходные данные:

  • позиция Buy объёмом 0,5 лота;

  • Stop Loss — 1,10000;

  • последняя котировка Bid перед гэпом — 1,10018;

  • следующая Bid — 1,09962;

  • цена исполнения — 1,09958;

  • размер одного пункта — 0,00001.

Проскальзывание:

Это 4,2 пипса.

Для 0,5 лота EUR/USD стоимость одного пипса на долларовом счёте составляет около $5:

Проскальзывание увеличило убыток примерно на $21 относительно расчёта по Stop Loss. Спред, комиссия и своп учитываются отдельно.

Почему цена могла перескочить через стоп

Рынок не обязан передавать каждое промежуточное значение.

Последовательность котировок может выглядеть так:

Событие Bid
Последняя цена до новости 1,10018
Установленный Stop Loss 1,10000
Первая цена после новости 1,09962

Котировки 1,10000 в потоке не было. Сервер увидел, что первая доступная цена уже находится ниже стопа, и отправил позицию на закрытие.

Этот сценарий возникает:

  • при открытии рынка после выходных;

  • после торгового перерыва;

  • во время публикации статистики;

  • при резком падении ликвидности;

  • после приостановки торгов;

  • при движении цены через несколько уровней стакана.

Stop Loss ограничивает убыток при наличии рынка. Он не создаёт ликвидность на указанной цене.

Может ли Stop Loss действительно не закрыть позицию

Да, но сначала нужно отделить отсутствие исполнения от исполнения по другой цене.

MetaTrader указывает: если после активации Stop Loss соответствующую рыночную операцию нельзя выполнить, например биржа её отклонила, приказ не удаляется. Сервер попробует активировать его снова на следующем подходящем тике.

Позиция может временно остаться открытой по следующим причинам:

Причина Что происходит
Торги закрыты Новых котировок и доступных заявок нет
Инструмент приостановлен Биржа или брокер не исполняет операции
Рыночная операция отклонена Stop Loss остаётся активным и ждёт следующего тика
Нет доступной ликвидности Исполнение переносится либо разбивается на сделки
Stop Loss не был принят На сервере отсутствует активный уровень
Stop Loss удалили или заменили Позиция остаётся без прежней защиты
Истёк срок действия уровней Возможно для отдельных серверных режимов и инструментов
Сработало другое правило Позицию мог изменить советник, сигнал, встречный ордер или Stop Out

Фразу «рынок коснулся линии» недостаточно использовать как доказательство. Нужно проверить сторону котировки, точное серверное время и статус самого уровня.

Почему Stop Loss мог не установиться

MetaTrader проверяет корректность Stop Loss до отправки или принятия изменения.

У инструмента могут быть заданы:

  • SYMBOL_TRADE_STOPS_LEVEL — минимальное расстояние для размещения стоп-приказа;

  • SYMBOL_TRADE_FREEZE_LEVEL — расстояние, внутри которого торговые операции с приказом ограничены;

  • допустимые типы приказов;

  • торговый режим инструмента;

  • расписание сессий.

Если уровень находится слишком близко к цене, терминал может вернуть ошибку Invalid stops. В этом случае Stop Loss не существует на сервере, даже если трейдер ввёл цифру в окно заявки.

Минимальное расстояние и Freeze Level задаются брокером для конкретного инструмента. Они могут различаться между типами счетов.

После установки нужно проверить, появился ли уровень S/L непосредственно у открытой позиции. Нажатие кнопки без подтверждения сервера не защищает сделку.

Работает ли Stop Loss при выключенном MetaTrader

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

Официальное руководство MetaTrader относит закрытие по Stop Loss к серверным операциям.

Условие одно: Stop Loss должен быть принят сервером до отключения.

Если трейдер ввёл уровень при нестабильном соединении, но запрос не дошёл до сервера, позиция останется без защиты. Проверять нужно поле S/L, историю приказов и журнал терминала.

Stop Loss и Trailing Stop работают по-разному

Trailing Stop не является отдельным серверным приказом. Терминал следит за ценой и отправляет команды на перенос обычного Stop Loss.

Параметр Stop Loss Trailing Stop
Где обрабатывается На торговом сервере В клиентском терминале
Работает при закрытом терминале Да, если принят сервером Нет
Что происходит после отключения Уровень остаётся Перестаёт передвигаться
Нужен постоянный поток котировок в терминале Нет Да
Может менять Stop Loss Нет Да

Если терминал выключился, последний установленный Stop Loss продолжает действовать. Trailing Stop уже не подтянет его вслед за ценой.

MetaTrader также ограничивает частоту обработки Trailing Stop и выбирает определённый порядок при нескольких позициях по одному инструменту.

Как Stop Loss может измениться в неттинговом счёте

В неттинговом режиме по одному инструменту существует одна общая позиция. Новая сделка меняет её объём, направление и связанные уровни.

MetaTrader указывает: при увеличении или развороте позиции новые Stop Loss и Take Profit могут заменить прежние значения. Если в новом приказе переданы нулевые уровни, существующая защита может быть удалена.

На хеджинговом счёте несколько позиций по одному инструменту учитываются отдельно. У каждой может быть собственный Stop Loss.

Поэтому после доливки, частичного закрытия, разворота или работы советника нужно повторно проверить поле S/L.

Для внебиржевых Forex-позиций перенос на следующие торговые сутки обычно сохраняет Stop Loss. Для некоторых биржевых инструментов уровни могут сбрасываться при переносе, поставке или изменении контракта. Эти правила описаны в документации MetaTrader.

Как проверить исполнение Stop Loss в MetaTrader 5

Проверка должна связать позицию, приказ и закрывающую сделку.

Шаг 1. Найдите идентификатор позиции

Откройте вкладку «История» и найдите первоначальную сделку. Сохраните:

  • тикет позиции;

  • тикет ордера;

  • инструмент;

  • направление;

  • объём;

  • цену открытия;

  • время открытия.

Шаг 2. Найдите закрывающую сделку

Проверьте:

  • время исполнения;

  • цену сделки;

  • объём;

  • комментарий;

  • причину закрытия;

  • комиссию;

  • своп;

  • прибыль или убыток.

В MQL5 предусмотрено значение DEAL_REASON_SL. Оно означает, что сделка выполнена из-за активации Stop Loss.

История также хранит:

  • DEAL_PRICE — цену исполнения;

  • DEAL_SL — Stop Loss позиции в момент закрытия;

  • DEAL_TIME_MSC — время сделки с точностью до миллисекунд;

  • DEAL_POSITION_ID — идентификатор связанной позиции.

Шаг 3. Определите цену активации

Для Buy запросите Bid на момент события. Для Sell нужен Ask.

Обычная свеча M1 не заменяет тиковую историю. За одну минуту спред способен несколько раз расшириться и вернуться к прежнему значению.

Шаг 4. Сравните Stop Loss и цену сделки

Рассчитайте проскальзывание в пунктах и деньгах.

Если позиция закрыта по Stop Loss, но цена отличается, это вопрос исполнения. Если причины DEAL_REASON_SL нет, сделку мог закрыть другой приказ, робот, Stop Out или ручная операция.

Шаг 5. Проверьте журнал

Ищите сообщения:

  • Invalid stops;

  • Market closed;

  • Trade disabled;

  • No prices;

  • Requote;

  • Rejected;

  • успешное изменение позиции;

  • удаление или замену Stop Loss.

Журнал показывает, был ли запрос принят сервером. Скриншот линии на графике этого не подтверждает.

Как читать результат проверки

Что найдено Возможный вывод
DEAL_REASON_SL, цена хуже уровня Stop Loss сработал с проскальзыванием
Sell закрыт, Ask достиг уровня, Bid не достиг Стоп активирован корректно по Ask
В истории есть Invalid stops Уровень не был установлен
Поле S/L стало нулевым после новой сделки Stop Loss удалён или заменён
Есть гэп между соседними тиками Исполнение по Stop Loss было невозможно
Рыночная операция отклонена Сервер должен повторить активацию на следующем подходящем тике
Сработал DEAL_REASON_SO Позицию закрыл Stop Out, а не Stop Loss
Советник изменял позицию Нужно проверять журнал программы и Magic Number
Trailing Stop не двигался после отключения Клиентский алгоритм перестал работать

Как рассчитать стоимость проскальзывания

Если известна стоимость одного пункта:

Где:

  • AdverseSlippage — отклонение цены против позиции;

  • PointValue — стоимость одного минимального пункта для всего открытого объёма.

Если известна стоимость пипса:

Пример

Позиция EUR/USD объёмом 0,2 лота:

  • Stop Loss — 1,08000;

  • цена закрытия — 1,07950;

  • отклонение — пять пипсов;

  • стоимость пипса — около $2.

Фактический убыток оказался примерно на $10 больше расчёта по стоп-цене.

Для иеновых пар, металлов, индексов и криптовалютных CFD стоимость пункта рассчитывается иначе. Значение нужно брать из спецификации инструмента или торгового калькулятора брокера.

Stop Loss и Stop Out нельзя путать

Stop Loss устанавливает трейдер для конкретной позиции. Stop Out запускает брокерский сервер, когда средств на счёте становится недостаточно для поддержания маржи.

Событие Кто задаёт порог Что контролирует
Stop Loss Трейдер Убыток отдельной позиции
Trailing Stop Трейдер Автоматический перенос Stop Loss
Stop Out Брокер Уровень маржи всего счёта

Если счёт достиг Stop Out раньше установленного Stop Loss, сервер может принудительно закрыть позицию. В истории причиной сделки будет указан Stop Out.

Проверить критический размер Equity и запас счёта можно в инструкции FinTerminal: как рассчитать Stop Out

Поделиться статьёй

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх