Категория
Платформа
Уровень
Начальный
Где применяется
Работа в MT5Оценка советника

Магический номер

Целое число, которым советник помечает каждый отправленный ордер, чтобы узнавать собственные позиции и не трогать всё остальное на счёте.

также: magic советника, магический номер ордера, MAGIC

Обновлено · Проверено

Простыми словами

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

Почему это важно

MetaTrader даёт каждому советнику на счёте одинаковый обзор всех позиций. Без метки советник не отличит свои сделки от ваших или от сделок другого советника — а советник, управляющий чужой позицией, это ошибка, которая стоит денег, а не выбрасывает сообщение.

  • Именно она вообще делает возможным запуск нескольких советников на одном счёте.
  • Она защищает ручные сделки: у них magic 0, и корректно написанный советник их никогда не трогает.
  • Так историю торгов можно разделить по стратегиям задним числом — метка сохраняется в истории сделок.

В MetaTrader 5

Где это в MT5

  • График → свойства советника (F7) → Входные параметры — собственный параметр MagicNumber советника
  • Тестер стратегий → Входные параметры — тот же параметр при тестировании
  • Код MQL5: MqlTradeRequest.magic при отправке, POSITION_MAGIC / ORDER_MAGIC / DEAL_MAGIC при обратном чтении

Как это используют советники

  • Задаётся один раз при запуске — CTrade::SetExpertMagicNumber(MagicNumber) — после чего каждый отправленный советником ордер несёт метку.
  • Фильтруется на каждом проходе: цикл по позициям пропускает любой тикет, чей POSITION_MAGIC не его собственный, прежде чем что-либо изменить, подтянуть или закрыть.
  • История фильтруется так же, чтобы статистика по советнику считалась только по его сделкам.
  • Каждый советник, созданный конструктором mt5depot, поставляется с параметром MagicNumber, значение которого выводится из стратегии, так что два разных сгенерированных советника не сталкиваются из коробки.

Типичные настройки

Параметр Обычное значение Примечание
Ручные сделки 0 Значение терминала по умолчанию. Советник никогда не должен управлять magic 0.
Один советник, один символ любое уникальное целое Подойдёт любое запоминающееся — 20260807, 1001.
Тот же советник на нескольких символах по значению на график Иначе экземпляр EURUSD закроет позиции экземпляра GBPUSD.
Портфельный советник с несколькими стратегиями по значению на ветвь Каждой ветви нужна своя метка, чтобы её подтягивали и закрывали независимо.

Частые эксплуатационные проблемы

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

Связанные функции MT5

CTrade::SetExpertMagicNumber()
Задаёт метку, которую понесёт каждый последующий ордер этого экземпляра.
PositionGetInteger(POSITION_MAGIC)
Читает метку с открытой позиции.
OrderGetInteger(ORDER_MAGIC)
Читает её с отложенного ордера.
HistoryDealGetInteger(ticket, DEAL_MAGIC)
Читает её с закрытой сделки, и именно так история разделяется по советникам.

Пример

Три советника на одном счёте. Каждый ставит свой номер, поэтому каждый цикл по позициям трогает только свои строки, хотя все они видят все шесть позиций.

Один терминал, один счёт, три владельца — метка единственное, что их разделяет.
Трендовый советник на EURUSD
20260101
Советник возврата к среднему на USDJPY
20260102
Ваши ручные сделки
0
Ни один советник не претендует на эту метку, поэтому ничто автоматическое их не закроет.

Расчёт if (PositionGetInteger(POSITION_MAGIC) != MagicNumber) continue;

Результат Каждый советник управляет только теми позициями, которые открыл сам

Числа приведены для иллюстрации — это не история какого-либо советника из каталога.

Как это используется

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

  • Назначайте значение на запущенный экземпляр, а не на продукт — тот же советник на двух графиках требует двух значений.
  • Ведите список. Как только работают четыре-пять экземпляров, незаписанная метка неотличима от продублированной.
  • Никогда не используйте повторно метку, к которой ещё привязаны открытые позиции, даже от снятого советника.
  • Проверяйте её после каждой переустановки терминала или восстановления профиля — именно там возвращаются значения по умолчанию.

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

Частые ошибки

Считать, что магический номер влияет на исполнение

Он ничего не меняет в том, как исполняется ордер. Это метаданные: брокер по ним не действует, и они не влияют ни на цену, ни на спред, ни на проскальзывание.

Использовать один магический номер для советника на многих графиках

Важна личность запущенного экземпляра, а не продукта. Два графика с общей меткой — это два экземпляра, управляющие одним общим набором позиций.

Менять его, чтобы «сбросить» неправильно ведущий себя советник

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

Полагать, что магический номер разделяет выписку по счёту

Вкладка «Торговля» в терминале его не показывает. Разделение результатов по советникам требует чтения DEAL_MAGIC из истории — это делают отчётные инструменты, а не стандартная выписка.

Подробнее

Чего метка не покупает, посчитано на этой полке

По 14 советникам, опубликованным здесьЗначение
Карточек с параметром MagicNumber10
Карточек, где его требуется менять при установке0
Карточек, требующих запускать их там, где символ больше никто не торгует8
Из них карточек, которые всё же несут параметр MagicNumber6
Символов, на которые претендует больше одной карточки7 из 15
Пар советников, которые не могут делить один счёт15 из 91

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

Значит, вопрос сочетаемости — это вопрос символа, и ответить на него можно до покупки. На USD/JPY одновременно претендуют четыре карточки — Iridescence, Kestrel Hover, Lanternfish и Tessera, — поэтому никакие две из них вместе не ставятся. EUR/GBP теперь несёт два — Ballast и Thunderhead. Только Orrery, Peregrine и Zerqon не пересекаются ни с кем. Там, где двое пересекаются, разделение счетов решает то, чего не может метка: каждый советник тогда считает набор, содержащий только его собственные сделки. Наша методология фиксирует каждый опубликованный прогон по символу — то же самое различие, увиденное со стороны измерения.

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

Какой магический номер выбрать?
Любое целое, ещё не занятое на этом счёте, и не 0 — это значение принадлежит ручным сделкам. Значение вида даты, например 20260807, легко отслеживать, когда работает несколько экземпляров.
Могут ли два советника использовать один магический номер?
Технически да, и это частая причина трудно диагностируемых убытков: каждый экземпляр считает позиции другого своими и может закрыть или подтянуть их не вовремя. Дайте каждому запущенному экземпляру собственное значение.
Важен ли магический номер в тестере стратегий?
Для теста одного советника нет, потому что в тестовом счёте больше ничего не торгует. Он становится важен, как только на одном реальном или демо-счёте работает больше одного советника.