Главная > Блог > Полное решение ошибки Market closed (10018 / ошибка 132)

MT5MQL5ОшибкиРешение проблемСоветники

Полное решение ошибки Market closed (10018 / ошибка 132)

Опубликовано: 2026-07-07Время чтения: ~7 мин
This article reflects information as of its publish date. EA performance figures (PF, DD, annual return) change with live trading and re-validation — check the latest on the EA pages. See the latest EA results

Содержание

  1. Что такое Market closed (разница между 10018 и 132)
  2. ① TRADE_RETCODE_MARKET_CLOSED = 10018 (MT5 / код возврата `OrderSend()`)
  3. ② ERR_MARKET_CLOSED = 132 (MT4 / `GetLastError()` в MQL4)
  4. Экспресс-диагностика за 30 секунд
  5. Причины и решения (6 сценариев)
  6. ① Рынок целиком закрыт из-за выходных или праздника
  7. ② Вне торговой сессии конкретного инструмента (дневной перерыв)
  8. ③ Путаница между серверным и локальным временем
  9. ④ Символ недоступен для торговли или разрешено только закрытие (SYMBOL_TRADE_MODE)
  10. ⑤ Сразу после открытия в понедельник или сразу после возобновления сессии
  11. ⑥ Приостановка торгов из-за новостей или событий
  12. Код на MQL5 для предотвращения этой ошибки (для разработчиков советников)
  13. Проверка, идёт ли сейчас торговая сессия
  14. Проверка торгового режима (SYMBOL_TRADE_MODE)
  15. Объединяем в общий фильтр перед отправкой ордера
  16. Обработка, если ошибка 10018 всё же возникла
  17. Чек-лист по приоритетам
  18. Итоги
  19. Часто задаваемые вопросы
  20. В: Ошибка Market closed появляется днём в будний день. Почему?
  21. В: В чём разница между 10018 и 132?
  22. В: Советник постоянно выдаёт ошибку по выходным. Можно ли это игнорировать?
  23. В: Ошибка Market closed появилась и по криптовалюте (BTCUSD). Разве она не торгуется 24 часа в сутки?

Полное решение ошибки Market closed (MT5/MQL5)

Когда в логе советника появляется Market closed или market is closed, объяснение "просто выходные" подходит лишь в половине случаев. Гораздо чаще людей ставит в тупик другая картина: ошибка появляется в будний день посреди торговой сессии, или по другим инструментам ордера проходят нормально, а по конкретному — нет.

Причина далеко не всегда в "выходных" — она может крыться в торговой сессии конкретного инструмента (дневной перерыв у золота или фондовых индексов), расхождении между серверным временем брокера и вашим локальным временем, а также в ограничении торгового режима символа (например close-only). Эта статья написана как для трейдеров, использующих готовые советники на MT5, так и для разработчиков советников на MQL5, и разбирает суть ошибки Market closed, 6 её причин, экспресс-диагностику за 30 секунд и постоянную защиту на уровне кода. Полный список кодов ошибок смотрите в сводном руководстве по кодам ошибок MQL5 / MT5.

Статья актуальна для MT5 (сборки серии 4xxx) по состоянию на июль 2026 года. Время сессий и названия экранов могут отличаться в зависимости от брокера и билда платформы.


Что такое Market closed (разница между 10018 и 132)

Код, обозначающий "рынок закрыт", отличается в MT5 и MT4 (MQL4). Смотрите на то, какая у вас платформа и откуда именно получено значение.

① TRADE_RETCODE_MARKET_CLOSED = 10018 (MT5 / код возврата OrderSend())

Результат отправки ордера через OrderSend() в MQL5 попадает в поле MqlTradeResult.retcode. Когда торговый сервер определяет, что "по этому инструменту сейчас не торговое время", и отклоняет заявку, возвращается код 10018. Это не внутренняя ошибка MT5, а отказ от торгового сервера брокера.

Значение: рынок закрыт (Market is closed)
Константа: TRADE_RETCODE_MARKET_CLOSED
Значение: 10018
// Типичный пример записи в логе
2026.07.06 23:05:11.204 EA_NAME XAUUSD,M5: OrderSend error 10018 [Market closed]

② ERR_MARKET_CLOSED = 132 (MT4 / GetLastError() в MQL4)

В MT4 (MQL4) после неудачного вызова OrderSend() функция GetLastError() возвращает 132. Значение то же самое, что и у 10018, — "рынок закрыт". Если вы параллельно используете версию советника для MT4, одна и та же причина проявится как 10018 в MT5 и как 132 в MT4.

Значение: рынок закрыт (Market is closed)
Константа: ERR_MARKET_CLOSED (MQL4)
Значение: 132

Практическое сравнение:

ПлатформаИсточникЗначение
MT5 (MQL5)MqlTradeResult.retcode / CTrade.ResultRetcode()10018
MT4 (MQL4)GetLastError() после неудачи OrderSend()132

В обоих случаях первопричина одна: "ордер был отправлен вне торговой сессии сервера (либо торговля по инструменту ограничена)". Способы решения тоже общие, поэтому разберём их вместе.


Экспресс-диагностика за 30 секунд

Прежде чем бездумно перезапускать советника, проверьте эти четыре пункта — они сразу подскажут причину.

  1. Посмотрите торговую сессию инструмента — в окне обзора рынка (Market Watch) щёлкните правой кнопкой по нужному символу → «Спецификация (Specification)» → «Торговые сессии». Там указано время, когда торговля разрешена по дням недели (в серверном времени). Если текущее время выходит за эти рамки — вот и ответ.
  2. Проверьте серверное время — время, отображаемое в верхней части окна обзора рынка, — это серверное время брокера. Определение сессии происходит именно по этому времени, а не по часам вашего компьютера. Разница с японским временем в несколько часов — обычное дело.
  3. Проверьте торговый режим — не стоит ли в поле «Торговля» того же окна «Спецификация» значение, отличное от Full access (например, Disabled или Close only). Если так, новые заявки будут отклоняться даже внутри сессии.
  4. Попробуйте другой инструмент — если тот же советник или ручной ордер по основной валютной паре, например EURUSD, проходит без проблем, значит, проблема не в счёте и не в советнике, а именно в сессии/ограничениях этого инструмента.

Причины и решения (6 сценариев)

① Рынок целиком закрыт из-за выходных или праздника

Симптом: ошибка появляется в субботу, воскресенье, а также в период новогодних праздников или на Рождество. Возникает по всем инструментам сразу.

Причина: рынок Forex в целом не работает примерно с закрытия в пятницу по серверному времени до открытия в понедельник. В праздники (Новый год, Рождество и т. д.) даже в будний день торговля может быть приостановлена или сокращена. Если советник по логике обработки баров или таймфрейма пытается отправить заявку и в выходные, ошибки 10018/132 будут появляться постоянно.

Решение:

  1. Сама по себе ошибка безвредна. Она пройдёт сама, как только рынок откроется
  2. Если не хочется засорять лог, добавьте в советник проверку дня недели и сессии, чтобы заявка изначально не отправлялась (код ниже)
  3. Календарь праздников у каждого брокера свой, поэтому уточняйте расписание нерабочих дней у своего брокера

② Вне торговой сессии конкретного инструмента (дневной перерыв)

Симптом: ошибка появляется в будний день, но только по определённым инструментам (золото, серебро, CFD на фондовые индексы, энергоносители и т. п.). Возникает почти в одно и то же время каждый день.

Причина: валютные пары торгуются практически круглосуточно в будние дни, но у драгоценных металлов и CFD на фондовые индексы есть ежедневный перерыв в торговле продолжительностью от десятков минут до нескольких часов. Это связано с техническим обслуживанием на бирже базового актива или с роловером, а конкретное время зависит от брокера и инструмента. Если советник отправляет заявку именно в этот перерыв, возникает ошибка 10018.

Решение:

  1. Уточните точное время перерыва по конкретному инструменту в разделе «Спецификация → Торговые сессии» (только эти данные верны — не стоит слепо доверять времени из чужих статей, оно отличается у разных брокеров)
  2. Настройте временной фильтр советника (TradeStartHour/TradeEndHour и т. п.), чтобы избегать перерыва
  3. Разработчикам стоит проверять это в коде через SymbolInfoSessionTrade() (см. ниже)

Стоит отметить, что у многих брокеров криптовалюты (например, BTCUSD) торгуются и по выходным, но это тоже зависит от конкретного брокера. Не считайте само собой разумеющимся, что "крипта торгуется 24/7" — проверяйте это в окне спецификации.


③ Путаница между серверным и локальным временем

Симптом: ошибка появляется, хотя, судя по спецификации, время должно быть торговым. Часто встречается при использовании зарубежных брокеров.

Причина: и время сессий в спецификации, и время, отображаемое в MT5, — это всегда серверное время брокера. Многие зарубежные брокеры используют GMT+2/+3 (настройку, при которой закрытие Нью-Йорка приходится на полночь), что даёт расхождение с японским временем в 6–7 часов. Типичная ситуация: по японскому времени "ещё вечер пятницы", а по серверному времени уже суббота.

Решение:

  1. Возьмите за привычку ориентироваться на время в окне обзора рынка (то есть серверное время)
  2. Параметры советника (например, фильтр торгового времени), как правило, задаются в серверном времени. Проверьте, не настроили ли вы их, думая, что это японское время
  3. В коде используйте TimeTradeServer() (не определяйте сессию через TimeLocal())

④ Символ недоступен для торговли или разрешено только закрытие (SYMBOL_TRADE_MODE)

Симптом: ошибка появляется в будний день внутри торговой сессии, но по конкретному инструменту все новые ордера отклоняются. Иногда закрытие позиций при этом проходит нормально.

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

SYMBOL_TRADE_MODEЗначение
SYMBOL_TRADE_MODE_FULLБез ограничений (обычный режим)
SYMBOL_TRADE_MODE_CLOSEONLYРазрешено только закрытие (новые сделки запрещены). Характерно для CFD перед делистингом или сменой контрактного месяца
SYMBOL_TRADE_MODE_DISABLEDТорговля полностью отключена
SYMBOL_TRADE_MODE_LONGONLY / SHORTONLYРазрешены только покупки/только продажи

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

Решение:

  1. Проверьте поле «Торговля» в окне «Спецификация»
  2. Если стоит Close only, о новых сделках по этому инструменту придётся забыть — остаётся только закрыть позиции. Если вам нужно постоянно торговать этим инструментом, уточните, не предусмотрен ли аналогичный символ с другим контрактным месяцем или другим суффиксом (например, US500.f)
  3. Если стоит Disabled, уточните у брокера, доступна ли торговля этим инструментом для вашего типа счёта

⑤ Сразу после открытия в понедельник или сразу после возобновления сессии

Симптом: ошибка или отказ в исполнении возникает только в первые несколько минут после открытия рынка в понедельник либо сразу после окончания дневного перерыва.

Причина: между моментом "открытия" сессии и моментом, когда исполнение ордеров становится стабильным, проходит некоторое время. Сразу после открытия ликвидность низкая, а спред может экстремально расширяться; некоторые брокеры вообще не принимают заявки, пока не начнут поступать котировки (то есть отклоняют их как при закрытом рынке). С этим типично сталкиваются советники, подающие сигнал сразу утром в понедельник, а также советники по золоту, ориентированные на пробой сразу после перерыва.

Решение:

  1. Добавьте фильтр, пропускающий открытие новых позиций в течение N минут после открытия (например, параметр AvoidMondayOpen). Именно поэтому советники, распространяемые на этом сайте, по умолчанию избегают периода 0–3 часа по серверному времени в понедельник
  2. Обязательно используйте вместе с этим фильтр спреда (MaxSpread). Исполнение по аномальному спреду сразу после открытия куда болезненнее с точки зрения убытков, чем сама ошибка
  3. Заложите в логику: если получена ошибка 10018, не повторять попытку немедленно, а дождаться следующего бара

⑥ Приостановка торгов из-за новостей или событий

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

Причина: некоторые брокеры и инструменты временно приостанавливают торговлю (halt) или ограничивают новые заявки во время значимых событий. По CFD на фондовые индексы торговля иногда останавливается синхронно со срабатыванием "автоматических выключателей" (circuit breaker) на рынке базового актива. Заявки в этот период отклоняются как при закрытом рынке.

Решение:

  1. Это временное явление, оно проходит само по себе через некоторое время
  2. Если использовать фильтр экономических новостей (UseEconomicFilter в советниках этого сайта) и блокировать открытие новых сделок вокруг публикации показателей, можно одновременно избежать и ошибок, и риска резких движений цены

Код на MQL5 для предотвращения этой ошибки (для разработчиков советников)

Правильный подход к Market closed — не "реагировать после появления ошибки", а проверять сессию и торговый режим перед отправкой заявки и не отправлять её, если рынок закрыт. Это не только избавляет лог от лишнего, но и предотвращает бессмысленные запросы к серверу и неконтролируемые повторные попытки.

Проверка, идёт ли сейчас торговая сессия

Функция SymbolInfoSessionTrade() возвращает время начала/окончания (в секундах от полуночи по серверному времени) i-й сессии для указанного дня недели. Чтобы поддержать инструменты с несколькими сессиями (например, индексы с дневным перерывом), все сессии проверяются в цикле.

// Определяет, находится ли текущее серверное время внутри торговой сессии этого инструмента
bool IsTradeSessionOpen(const string symbol)
{
   MqlDateTime dt;
   TimeToStruct(TimeTradeServer(), dt);           // Определять обязательно по серверному времени
   int now = dt.hour*3600 + dt.min*60 + dt.sec;   // Секунды, прошедшие с полуночи

   datetime from, to;
   for(uint i = 0; SymbolInfoSessionTrade(symbol, (ENUM_DAY_OF_WEEK)dt.day_of_week, i, from, to); i++)
   {
      int f = (int)from;                 // Секунды от полуночи
      int t = (int)to;                   // Окончание в 24:00 будет равно 86400
      if(now >= f && now < t)
         return true;
   }
   return false;   // Для этого дня недели нет подходящей сессии (например, выходные) или время вне всех сессий
}

Проверка торгового режима (SYMBOL_TRADE_MODE)

// Определяет, допустим ли торговый режим для открытия новой позиции
bool IsNewEntryAllowed(const string symbol, ENUM_ORDER_TYPE type)
{
   long mode = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);
   if(mode == SYMBOL_TRADE_MODE_DISABLED)  return false; // Торговля отключена
   if(mode == SYMBOL_TRADE_MODE_CLOSEONLY) return false; // Только закрытие = новые сделки запрещены
   if(mode == SYMBOL_TRADE_MODE_LONGONLY  && type != ORDER_TYPE_BUY)  return false;
   if(mode == SYMBOL_TRADE_MODE_SHORTONLY && type != ORDER_TYPE_SELL) return false;
   return true;   // SYMBOL_TRADE_MODE_FULL и т. п.
}

Объединяем в общий фильтр перед отправкой ордера

// Внутри OnTick: даже если появился сигнал, не отправлять заявку, если рынок закрыт
if(!IsTradeSessionOpen(_Symbol) || !IsNewEntryAllowed(_Symbol, ORDER_TYPE_BUY))
{
   // Заранее предотвращаем ошибку 10018. Оставляем одну строку в логе и ждём следующий бар
   return;
}

Обработка, если ошибка 10018 всё же возникла

Ситуации, когда фильтр не срабатывает — например, из-за задержки обновления данных о сессии или отказа сразу после открытия, — исключить полностью невозможно. Важное правило: если в retcode после OrderSend() пришло 10018, не повторять попытку немедленно (дождаться следующего бара). Повторные попытки во время закрытия рынка только засоряют лог и ничего не улучшают.

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... формируем req ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_MARKET_CLOSED)   // 10018
      Print("Market closed. Skip and wait for the next session.");
   else
      PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}

Честно говоря, советники, отправляющие заявки сразу после открытия в понедельник или вокруг дневного перерыва (особенно по золоту и фондовым индексам), регулярно сталкиваются с этой ошибкой. Советники, учитывающие расписание сессий — с проверкой сессии, пропуском периода сразу после открытия и закрытием позиций перед выходными, — не только избегают лишних ошибок, но и предотвращают неудачное исполнение в периоды низкой ликвидности. Советники, распространяемые FXEA365, по умолчанию реализуют пропуск открытия в понедельник (AvoidMondayOpen), временной фильтр и закрытие всех позиций перед выходными (CloseAllBeforeWeekend).


Чек-лист по приоритетам

ПриоритетПроверкаДействие
🚨 СначалаСейчас выходные или праздник (по серверному времени)?Просто подождать. Сама ошибка безвредна
🚨 СначалаТекущее время входит в «Торговые сессии» из спецификации?Обойти перерыв конкретного инструмента с помощью временного фильтра
⚠️ ДалееНе перепутано ли серверное время с японским?Настроить параметры заново, ориентируясь на время в окне обзора рынка
⚠️ ДалееТорговый режим — Full access?Если Close only / Disabled, уточнить условия у брокера
✅ ПроверитьНе сразу ли после открытия или после окончания перерыва?Пропуск N минут + фильтр спреда
🛠 РазработкаПроверяется ли сессия/режим перед отправкой ордера?Реализовать фильтр на основе SymbolInfoSessionTrade

Итоги

  • Market closed — это 10018 (TRADE_RETCODE_MARKET_CLOSED) в MT5 и 132 (ERR_MARKET_CLOSED) в MT4. Значение одинаковое: "заявка отправлена вне торговой сессии / при ограничении торговли".
  • Ошибка возникает не только по выходным, но и из-за дневного перерыва по конкретному инструменту (золото, индексы), расхождения с серверным временем, ограничения SYMBOL_TRADE_MODE и отказов сразу после открытия. Если ошибка появилась в будний день, первым делом проверьте «Спецификация → Торговые сессии».
  • Время сессий отличается у разных брокеров и инструментов. Верно только то время, которое указано в окне спецификации вашей платформы MT5.
  • Разработчикам советников стоит реализовать постоянную защиту через фильтр перед отправкой ордера на основе SymbolInfoSessionTrade() + SYMBOL_TRADE_MODE + TimeTradeServer(). Если получена ошибка 10018, не повторять попытку немедленно, а дождаться следующего бара.

Полный список кодов ошибок смотрите в сводном руководстве по кодам ошибок MQL5 / MT5, а бесплатных советников со встроенной защитой от закрытия сессий и временными фильтрами — в списке советников.


Часто задаваемые вопросы

В: Ошибка Market closed появляется днём в будний день. Почему?

Причина, скорее всего, в периоде торгового перерыва, характерном для конкретного инструмента (дневной перерыв), либо в ограничении торгового режима символа. У золота, серебра и CFD на фондовые индексы есть периоды, когда торговля недоступна каждый день даже в будни. Щёлкните правой кнопкой по символу в окне обзора рынка → «Спецификация» → проверьте «Торговые сессии» и поле «Торговля».

В: В чём разница между 10018 и 132?

Разница только в платформе, значение одинаковое. 10018 (TRADE_RETCODE_MARKET_CLOSED) — это код возврата OrderSend() в MT5, а 132 (ERR_MARKET_CLOSED) — значение GetLastError() в MT4 (MQL4). Решение проблемы общее для обеих платформ.

В: Советник постоянно выдаёт ошибку по выходным. Можно ли это игнорировать?

Реального вреда это не наносит. Как только рынок откроется, ошибки прекратятся сами. Однако если вас беспокоит засорение лога или постоянные push-уведомления, кардинальное решение — добавить в советник проверку дня недели/сессии, чтобы отправка заявки блокировалась заранее (см. код в статье).

В: Ошибка Market closed появилась и по криптовалюте (BTCUSD). Разве она не торгуется 24 часа в сутки?

Доступность торговли криптовалютными CFD по выходным зависит от конкретного брокера. У некоторых брокеров торговля по выходным приостанавливается полностью или предусмотрен короткий технический перерыв. Как и с валютными парами, уточняйте реальное время доступной торговли у вашего брокера в разделе «Спецификация → Торговые сессии».

📧 Оповещения до повышения цен + бесплатный 5-дневный email-курс

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

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

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