Каждый временной фильтр в советнике, каждое правило «закрытия перед ролловером» и каждое поле сессии на графике опираются на одну вещь: таблицу сессий инструмента, то есть часы, которые брокер объявляет через SymbolInfoSessionQuote и SymbolInfoSessionTrade. Данный инструмент сверяет эту таблицу с историческими данными. За последние N полных дней он подсчитывает, для каждой минуты недели, в скольких из этих дней у символа есть бар M1, и помещает результат рядом с тем, что указано в таблице: заявленные минуты, которые обычно пусты, бары в минутах, которые таблица считает закрытыми, минуты, в которых таблицы торгов и котировок не совпадают, а также единичные перебои в заявленных минутах, которые обычно не бывают пустыми.

Пять символов из Market Watch, по 35 полных дней каждый (с 01.09.2026 по 06.10.2026, по серверному времени), один проход за 62 мс. «Table h/wk» и «Real h/wk» — это количество часов в неделю, заявленное таблицей сессий, и количество часов, в течение которых бары присутствуют как минимум в половине дат данного дня недели. «Мертвые минуты/неделю» — это количество заявленных минут, в которых свечи присутствуют не более чем на четверти дат; «Перебои» — это количество пробелов продолжительностью пять минут или более в заявленных минутах, которые не являются «мертвыми». Таблица сформирована с использованием шрифта размером 4 для удобства просмотра на странице; по умолчанию используется размер 8.
Проблема
Таблица сеансов — это декларация, а не измерение. Терминал отображает её в спецификации символа, и советник может её считывать, но ничто не сверяет её с ценами, которые фактически поступают. На демонстрационном сервере, данные по которому приведены ниже, пары EURUSD, GBPUSD и USDJPY заявлены как котируемые с 00:00 до 24:00 с понедельника по четверг. История M1 показывает, что сразу после 21:00 по серверному времени цены часто отсутствуют вовсе. Для золота на том же сервере заявлен перерыв с 20:58 до 22:00, и её бары до минуты совпадают с таблицей — за исключением понедельника, 7 сентября 2026 года, когда в США был праздник: последний бар перед перерывом пришёлся на 18:27, а два с половиной часа заявленной сессии остались пустыми.
Ничего из этого не видно из таблицы, а всё это имеет значение для автоматической торговли. Временной фильтр, написанный на основе таблицы, будет пытаться открывать сделки в минутах, в которых часто отсутствует цена. В Тестере стратегий там также нет тиков, поэтому правило, срабатывающее «в 21:01», в большинстве дней может просто никогда не сработать. А параметр «торговые часы», который кто-то когда-то скопировал из спецификации, верный лишь настолько, насколько верна сама спецификация.
Что он измеряет
Окно составляет [D0, D1): D1 — это 00:00 по серверному времени дня, когда сформировался самый новый бар M1 по символу, поэтому сегодняшний незавершённый день исключается, а D0 находится на InpDays целых дней ранее (сдвигается вперёд до первого целого дня, если история M1 начинается позже). Для каждой минуты недели инструмент подсчитывает даты этого дня недели в окне — по календарю, так что праздничный день, в который нет ни одного бара, считается датой, в которой отсутствует каждая минута, — а также совпадения, то есть даты, в которые в эту минуту имеется бар M1. Минута считается реальной, если её начало находится в пределах сессии котировок соответствующего дня недели, причём для проверки сессии используется тот же тест, что и в Tick Integrity Auditor.
Журнал выводит арифметическое выражение в виде тождества для каждого символа: findings_rows == dead_windows + outside_windows + trade_no_quote_windows + quote_no_trade_windows + outages. Проверка, которая не была измерена, оставляется пустой в файле CSV и отображается как «-» на панели, но никогда как «0».
Пример измерений
Демо-сервер Exness, время сервера = UTC, пять символов в «Обзоре рынка», InpDays=35, все остальные параметры по умолчанию.
| символ | таблица ч/нед | реальное время в часах/неделю | неактивные минуты / окна | Вне мин | торговые≠котировочные минуты | перебои | самый длительный перебой |
|---|---|---|---|---|---|---|---|
| XAUUSD | 114,82 | 114,82 | 0 / 0 | 0 | 0 | 1 | 150 мин, пн 07.09.2026 18:28 |
| EURUSD | 119,90 | 119,70 | 7 / 5 | 0 | 0 | 4 | 7 мин, ср 02.09.2026 11:39 |
| BTCUSD | 168,00 | 168,00 | 0 / 0 | 0 | 0 | 1 | 13 мин, воскресенье, 13.09.2026, 07:16 |
| GBPUSD | 119,90 | 119,62 | 9 / 6 | 0 | 0 | 5 | 9 мин, чт 01.10.2026 21:03 |
| USDJPY | 119,90 | 119,57 | 14 / 5 | 0 | 0 | 9 | 10 мин, воскресенье, 04.10.2026, 21:05 |
Ролловер — это пробел, который не отображается в таблице. Во все 20 вечеров с понедельника по четверг в течение периода последний бар перед ролловером находится в 20:59. После этого в течение как минимум одной минуты в промежутке с 21:00 до 21:19 отсутствует ценовой бар в 16 вечеров для пары EURUSD, в 19 — для пары GBPUSD и в 20 — для пары USDJPY, причем в 10, 10 и 14 из этих вечеров отсутствуют четыре или более таких минут. Продолжительность меняется от вечера к вечеру, поэтому это проявляется двумя способами: в виде «мертвых минут», когда большинство вечеров совпадают (USDJPY в понедельник и вторник, с 21:00 до 21:05 — свечи появляются не более чем в один день из пяти), и в виде провалов, когда это наблюдается лишь в некоторых случаях (GBPUSD в три вечера, считая с 21:03, когда заканчиваются его «мертвые минуты», по семь–девять минут в каждом случае). Двадцать восемь из 36 случаев начинаются в промежутке с 21:00 по 21:15; два из них — это воскресное открытие USDJPY, когда первый бар появился через 6 и 10 минут после заявленного времени 21:05.

Слева: доля из 20 вечеров с понедельника по четверг в рамках данного окна, когда у пары EURUSD появляется бар M1, минута за минутой с 20:50 до 21:15; в таблице сессий каждая из этих минут указана как время открытия. Справа: XAUUSD в понедельник 07.09.2026 по сравнению с остальными четырьмя понедельниками данного периода; заштрихованная полоса обозначает прорыв, заявленный в таблице. Данные взяты из баров M1, прочитанных через интерфейс MCP терминала, а не из собственных выводов инструмента.
Таблица по золоту верна, за исключением праздничного дня. Фактические и заявленные сессии по XAUUSD совпадают в каждый будний день с точностью до минуты: с 00:00 до 20:58 и с 22:00 до 24:00 с понедельника по четверг, с 22:01 до 24:00 в воскресенье, с 00:00 до 20:58 в пятницу. Единственное отклонение — 07.09.2026, День труда в США: с 18:28 до перерыва в 20:58 отсутствует бар, что составляет 150 минут. В таблице нет возможности указать «сегодня раннее закрытие»; в истории это отражено.
Два дневных сбоя затронули все три валютные пары одновременно. Среда, 02.09.2026, с 11:39, и среда, 09.09.2026, с 10:37: по семь минут каждый раз, в одни и те же минуты на парах EURUSD, GBPUSD и USDJPY, в то время как на XAUUSD и BTCUSD в каждую из этих минут есть свеча. Какова бы ни была причина, сбой затронул все три валютные пары одновременно, а золото и биткойн остались незатронутыми, и это именно тот вид события, который бэктест тех дней воспроизводит без единого слова.
Что ясно: ни у одного символа нет ни одного бара в минуте, которую таблица указывает как закрытую, а торговая таблица совпадает с таблицей котировок по всем пяти парам, поэтому C2 и C3 здесь ничего не обнаружили. Пара BTCUSD, заявленная как работающая 24/7, действительно работает круглосуточно; единственный перебой в работе длился 13 минут в воскресенье 13.09.2026, начиная с 07:16.
Независимая проверка отчёта
Отчет можно пересчитать вне MetaTrader. Скрипт, используемый на этой странице, считывает только то, что Python не может получить самостоятельно — окно, три пороговых значения, включен ли был торговый контроль, а также таблицы сессий из файлов сводки и сессий — извлекает времена баров M1 через интерфейс MCP терминала и пересчитывает 22 столбца результатов сводки, все 10 080 ячеек карты каждого символа, эффективные сессии и строки результатов из приведённых выше определений. На приведённом здесь отрезке он совпадает с инструментом по каждому значению всех пяти символов. Обе ошибки, вручную внесенные в копию файлов (один счётчик, одна ячейка карты), были обнаружены. Его собственные определения сначала проверялись на двух синтетических неделях, рассчитанных вручную.
Как использовать
Прикрепите советник к любому графику. Если поле InpSymbols пусто, он проверяет символ графика; * — проверяет весь список Market Watch; список, разделенный запятыми, — проверяет указанные символы. Проверка запускается один раз (или каждые InpRefreshMinutes), выводит сравнение по дням недели и перебои в журнал советников, рисует таблицу на графике и записывает файлы в формате CSV. Он считывает только таблицы истории и сессий: в коде нет функции торговли, нет DLL и нет сетевого доступа. При использовании символа * проверка затрагивает только те символы, которые уже находятся в окне «Market Watch»; символ, указанный в списке, но еще отсутствующий в окне «Market Watch», выбирается терминалом при чтении его истории, как и при любом запросе истории.
Сначала прочитайте строки журнала. Строка вида
USDJPY Mon table 00:00-24:00 | real 00:00-21:00 21:05-24:00 | dead 21:00-21:05 (1/5) | outside none
означает, что по понедельникам таблица объявляет весь день, бары присутствуют с 00:00 до 21:00 и с 21:05 и далее, а каждая минута с 21:00 до 21:05 имела бар не более чем в один из пяти понедельников. Используйте для временных фильтров реальные сессии, а не заявленные; увеличьте значение InpDays, чтобы увидеть больше недель, и уменьшите значение InpOutageMinutes, чтобы увидеть более короткие провалы.
Входные данные
| входные данные | по умолчанию | значение |
|---|---|---|
| InpSymbols | "" | Символы: пустое поле = символ графика, * = «Наблюдение за рынком», в остальных случаях — список в формате CSV |
| InpDays | 28 | Количество полных серверных дней истории M1 для аудита (заканчивающихся до сегодняшнего дня) |
| InpLivePct | 50 | Минута считается реальной, если на ней имеются бары как минимум на этот процент рабочих дней недели |
| InpDeadPct | 25 | Минута считается мертвой, если на ней есть бары не более чем на этот процент |
| InpOutageMinutes | 5 | Сообщать о разовых пропаданиях в заявленных минутах, которые обычно являются активными, длительностью не менее указанного значения |
| InpCheckTrade | true | Сравнить таблицу торговых сессий с таблицей котировочных сессий |
| InpMaxExamples | 5 | Журнал: количество перебоев в работе, выведенных для каждого символа |
| InpWriteCsv | true | Запись файлов CSV с сводкой, сессиями, картой, эффективными значениями и результатами |
| InpShowPanel | true | Отобразить таблицу результатов на диаграмме |
| InpPanelCorner | CORNER_LEFT_UPPER | Угол панели |
| InpPanelFontSize | 8 | Размер шрифта панели |
| InpPanelX | 10 | Смещение панели по оси X, пикселей |
| InpPanelY | 18 | Смещение панели по оси Y, пикселей |
| InpRefreshMinutes | 0 | Повторная проверка каждые N минут (0 = проверка один раз) |
Значения входных данных аудита, выходящие за пределы допустимого диапазона, ограничиваются по одной строке журнала для каждого (панель принимает входные данные без предупреждения); советник никогда не отказывается запускаться.
Выходные файлы
Все файлы сохраняются в папке MQL5\Files\SessionRealityAuditor\, разделены точкой с запятой и имеют строку заголовка, именованы как <символы>_<дней>d_<идентификатор графика>_…, чтобы два графика никогда не перезаписывали друг друга.
Ограничения, изложенные прямо
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/78079
ATS Trade Management Library - break-even, trailing stop and partial closes for any EA
Контролируйте открытые позиции в советнике: уровень безубыточности, трейлинг-стоп, два частичных закрытия, а также стоп и цель для позиций, у которых их нет. Советник никогда не открывает сделки.
ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule
Одна панель для параметров конкурса проп-фирм: дневной убыток, максимальный убыток (статический или скользящий), целевой уровень прибыли, минимальное количество торговых дней и правило «лучшего дня» (стабильность). Для каждого параметра отображается, какая сумма уже использована и сколько средств осталось в денежном выражении. Функция «Ещё одна сделка» показывает максимальный размер лота, при котором стоп-аут остаётся в пределах сегодняшнего лимита и лимита максимального убытка. Только для чтения: панель никогда не открывает, не изменяет и не закрывает сделки. В предустановках используются типовые значения; компании меняют свои правила, поэтому проверьте правила своей компании и используйте пользовательскую предустановку. Построено на основе библиотеки ATS Risk Library (ATS_RiskLib.mqh, входит в комплект).
CajasTF — интегрированная боковая панель с несколькими таймфреймами для MT5
Мини-график на боковой панели, отображающий данные в реальном времени по нескольким таймфреймам, с интеллектуальной цветовой схемой, независимой ценовой шкалой и таймером обратного отсчёта свечей.
Advanced Prop-firm Trade Panel based on S-R
Панель для ручной торговли со встроенной системой защиты от рисков для проп-фирм и скрытым инструментом для поиска уровней поддержки и сопротивления для MetaTrader 5.