Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Session Reality Auditor - эксперт для MetaTrader 5

Quoc Dat Quach
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself.
| Russian English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Просмотров:
17
Рейтинг:
(1)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

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

sra-panel

Пять символов из 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.

  • Таблица «Эффективные». Минута считается реальной, если бары присутствуют как минимум на InpLivePct процентах её дат (по умолчанию 50). Последовательные реальные минуты одного дня недели формируют эффективные сессии, отображаемые рядом с объявленными.
  • Неактивные объявленные минуты (C1). Объявленная минута, в которой есть бары не более чем на InpDeadPct процентов дат (по умолчанию 25). Каждая последовательность неактивных минут в одном дне недели является результатом проверки.
  • Бары вне таблицы (C2). Минута, которую таблица считает закрытой, но в которой есть бар хотя бы на одной дате. Каждая последовательность является нарушением, с указанием количества баров в ней.
  • Сравнение таблицы торгов с таблицей котировок (C3). Минуты, находящиеся в торговой сессии, но отсутствующие в сессии котировок (заявки приняты, цена не ожидается), и минуты, находящиеся в сессии котировок, но отсутствующие в торговой сессии (цены отображаются, заявки отклонены). Каждая последовательность считается нарушением. Параметр InpCheckTrade=false отключает эту проверку.
  • Единичные перебои (C4). На реальной временной шкале, минута за минутой: заявленная минута, которая не является «мертвой» и не содержит бара. Серии таких минут, которые могут пересекать полночь, длительностью не менее InpOutageMinutes минут (по умолчанию 5), являются перебоями; каждая из них — это результат с указанием даты. «Мёртвые» минуты исключаются намеренно: минута, пустая большую часть времени, является паттерном и относится к C1, а пустая минута, которая обычно заполнена, является событием и относится к данной категории.

Журнал выводит арифметическое выражение в виде тождества для каждого символа: 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.

sra-real-vs-table

Слева: доля из 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_<идентификатор графика>_…, чтобы два графика никогда не перезаписывали друг друга.

  • …_<символ>_summary.csv — одна строка: окно, пороговые значения и все счетчики выше.
  • …_<символ>_sessions.csv — записи о каждой котировочной и торговой сессии из таблицы.
  • …_<символ>_map.csv — 10 080 строк, по одной на каждую минуту недели: заявленная котировка, заявленная сделка, совпадения, даты.
  • …_<symbol>_effective.csv — эффективные сессии, по одной строке на каждое окно.
  • …_findings.csv — по одной строке на каждый результат анализа по каждому символу, с указанием дня недели, начала, конца, длительности и значения.

Ограничения, изложенные прямо

  • Наличие котировок определяется по барам M1: минута, в которой есть бар, считается котируемой. Бар считается существующим, если в минуте есть хотя бы один тик, поэтому 30-секундная пауза внутри минуты здесь не учитывается; для пауз в секундах используйте инструмент «тик».
  • Инструмент считывает таблицу сессий в том виде, в каком она есть сейчас. Если брокер изменил часы работы внутри окна, более старые дни оцениваются по новой таблице.
  • Даты подсчитываются по календарю, поэтому праздничный день уменьшает долю каждой минуты соответствующего рабочего дня на одну дату. Это сделано намеренно: именно об этом в таблице не было сказано.
  • Везде используется серверное время. Переход на летнее время в пределах окна сдвигает перенос на час для части дат, и доли этих минут соответственно уменьшаются.
  • Глубина аудита ограничена историей M1, хранящейся в терминале для данного символа (настройка «Максимальное количество баров на графике»); более короткая история сокращает окно до одной строки журнала.
  • Приведенные выше данные относятся к одному демо-серверу за пять недель. Они описывают именно этот канал данных, а не реальные счета брокера и не данные какого-либо другого сервера.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/78079

ATS Trade Management Library - break-even, trailing stop and partial closes for any EA 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 Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule

Одна панель для параметров конкурса проп-фирм: дневной убыток, максимальный убыток (статический или скользящий), целевой уровень прибыли, минимальное количество торговых дней и правило «лучшего дня» (стабильность). Для каждого параметра отображается, какая сумма уже использована и сколько средств осталось в денежном выражении. Функция «Ещё одна сделка» показывает максимальный размер лота, при котором стоп-аут остаётся в пределах сегодняшнего лимита и лимита максимального убытка. Только для чтения: панель никогда не открывает, не изменяет и не закрывает сделки. В предустановках используются типовые значения; компании меняют свои правила, поэтому проверьте правила своей компании и используйте пользовательскую предустановку. Построено на основе библиотеки ATS Risk Library (ATS_RiskLib.mqh, входит в комплект).

CajasTF — интегрированная боковая панель с несколькими таймфреймами для MT5 CajasTF — интегрированная боковая панель с несколькими таймфреймами для MT5

Мини-график на боковой панели, отображающий данные в реальном времени по нескольким таймфреймам, с интеллектуальной цветовой схемой, независимой ценовой шкалой и таймером обратного отсчёта свечей.

Advanced Prop-firm Trade Panel based on S-R Advanced Prop-firm Trade Panel based on S-R

Панель для ручной торговли со встроенной системой защиты от рисков для проп-фирм и скрытым инструментом для поиска уровней поддержки и сопротивления для MetaTrader 5.