RequestLatencyLab - client-observed request latency measurement lab (MQL5)
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-16 15:37:55 +03:00
Data RequestLatencyLab 1.00 (draft): implementation per TZ, LOCAL_ONLY safety default 2026-09-09 01:19:31 +03:00
Docs RequestLatencyLab 1.00 (draft): implementation per TZ, LOCAL_ONLY safety default 2026-09-09 01:19:31 +03:00
Include Вынесение методов за пределы определения классов 2026-09-16 15:37:55 +03:00
Presets RequestLatencyLab 1.00 (draft): implementation per TZ, LOCAL_ONLY safety default 2026-09-09 01:19:31 +03:00
Scripts Вынесение методов за пределы определения классов 2026-09-16 15:37:55 +03:00
Tests Вынесение методов за пределы определения классов 2026-09-16 15:37:55 +03:00
.gitignore RequestLatencyLab 1.00 (draft): implementation per TZ, LOCAL_ONLY safety default 2026-09-09 01:19:31 +03:00
CHANGELOG.md fix(audit14): R15-B1..B2 и R15-S1; инвалидация marker в ExportRun проверяется (отказ до переписи пары), NewSessionId по любому известному файлу отчёта (SessionDirUsed — частичный остаток не маскируется), чужой объект графика без принудительной перерисовки в окне; регрессия SESS-03 2026-09-12 16:38:37 +03:00
CSV_SCHEMA.md fix(audit10): блокеры R10-B1..B4 и существенные R10-S1; Start-latch, повторный INTENT, cleanup ждёт DEAL-callback, формат market_ticks.csv, пилот LOCAL_ONLY 2026-09-12 02:21:14 +03:00
dependencies.lock.json fix(audit): устранены пункты 1-13 аудита RequestLatencyLab; сборка 0/0 2026-09-10 16:43:28 +03:00
README.md fix(audit): устранены пункты 1-13 аудита RequestLatencyLab; сборка 0/0 2026-09-10 16:43:28 +03:00
RequestLatencyLab.mq5 Вынесение методов за пределы определения классов 2026-09-16 15:37:55 +03:00
RequestLatencyLab.mqproj Вынесение методов за пределы определения классов 2026-09-16 15:37:55 +03:00

RequestLatencyLab

Лаборатория измерения client-observed request latency — задержки торгового запроса со стороны клиентского терминала — средствами MQL5 (ТЗ §1). Связывает торговый запрос с его событиями, измеряет локальные интервалы T0–T6, проводит пять экспериментов и сохраняет отчёт, пригодный для повторного расчёта.

Статус: черновик спецификации; реализация кода в этом репозитории. Режим по умолчанию — LOCAL_ONLY (синтетические проверки, без торговли). Торговые режимы — только демо и только по явному Start оператора.

Состав

RequestLatencyLab.mq5          — основной советник (единственный торговый entrypoint)
RequestLatencyLab.mqproj       — проект MetaEditor (сборка основного советника)
Include/RequestLatencyLab/     — собственные модули лаборатории
  Models.mqh                   — типы, перечисления, LatencySample (10 редакторских полей)
  Configuration.mqh            — проверка входов/среды, правила символа, configuration_id
  TimeSource.mqh               — источник времени; синтетические часы для LOCAL_ONLY
  Statistics.mqh               — качество выборок, summary, гистограммы, знаковые разности
  EventJournal.mqh             — append-only журнал событий с контрольными ёмкостями
  MarketRegime.mqh             — причинное окно, f/r-признаки, классификация QUIET/FAST
  StateReader.mqh              — адресное чтение ордеров/сделок/позиций, снимки
  CompletionPolicy.mqh         — исход операции и условия T6 (таблица ТЗ §6.4)
  RequestTracker.mqh           — реестр записей, корреляция, метрики, маски T0–T6
  ExperimentRunner.mqh         — план 10 блоков, Park–Miller + Fisher–Yates, роли
  CsvStorage.mqh               — сериализация UTF-8/CRLF, экранирование, read-back
  ReportBuilder.mqh            — повторный расчёт отчёта из архивных CSV
  LatencyPanel.mqh             — панель Start/Status (отключена во время MAIN)
  AppController.mqh            — автомат состояний, единая точка отправки, очистка
  Legacy/                      — переиспользуемые модули из статьи 1
    BenchmarkStatistics.mqh    — Min/Max/Avg/Percentile (адаптированные проверяемые версии)
    TradeRequestTools.mqh      — BuildRequest/PreCheck/нормализация (без Inp*/EXT*)
    LifecycleAdapter.mqh       — адаптер над TradeLifecycle.mqh
Include/Dependencies/Article01/ — снимок исходников статьи 1 (в составе репозитория; источник https://forge.mql5.io/dima_s/mql5-execution-microstructure)
Scripts/MarketCalibration.mq5  — калибровка p50/p90 для классификатора рынка (без торговли)
Scripts/LatencyReport.mq5      — повторный расчёт summary из samples.csv (без счёта)
Tests/RequestLatencyTests.mq5  — синтетические проверки (LOCAL_ONLY), пишет checks.csv
Presets/                       — файлы настроек .set
Data/                          — отобранные наборы данных поставки
Docs/                          — ТЗ, DependencyChanges.md
CSV_SCHEMA.md                  — контракт CSV (по ТЗ §8)
dependencies.lock.json         — фиксация зависимостей от статьи 1

Сборка

Проект собирается из своего каталога MetaEditor'ом. Модуль TradeLifecycle.mqh подключается относительным #include из снимка Include/Dependencies/Article01; репозиторий-источник статьи 1: https://forge.mql5.io/dima_s/mql5-execution-microstructure (SHA-256 коммит зафиксирован в dependencies.lock.json) (относительный #include в LifecycleAdapter.mqh); адаптации — в Include/RequestLatencyLab/Legacy.

  • Основной советник: открыть RequestLatencyLab.mqproj → Compile. Выход: RequestLatencyLab.ex5.
  • Скрипты и тесты собираются независимо: открыть файл → Compile.
    • Scripts/MarketCalibration.mq5MarketCalibration.ex5
    • Scripts/LatencyReport.mq5LatencyReport.ex5
    • Tests/RequestLatencyTests.mq5RequestLatencyTests.ex5

Целевая сборка: 0 ошибок, 0 предупреждений (MetaEditor build 6182, AVX2).

Запуск

LOCAL_ONLY (по умолчанию)

  1. Установить советник на график с режимом InpRunMode=LOCAL_ONLY.
  2. Нажать Start на панели. Синтетический прогон использует тестовые часы и транспорт-счётчик; реальная торговля не выполняется (SAFE-01).
  3. Отчёт пишется в MQL5\Files\RequestLatencyLab\<campaign>\<session>\: manifest.csv, samples.csv, events.csv, schedule.csv.

Проверки

Запустить скрипт Tests/RequestLatencyTests.mq5 на любом графике. Результат — MQL5\Files\RequestLatencyLab\tests\checks.csv и сводка PASS/FAIL в журнале.

Демо-пилот / основные серии (только DEMO)

  1. Выполнить Scripts/MarketCalibration.mq5 — получить calibration.csv (для E3).
  2. Выставить InpRunMode=MARKET_ORDER или PENDING_CREATE_DELETE, заполнить обязательные broker-зависимые значения (D, filling, minimum volume).
  3. Явный Start оператора на панели. Основное измерение — по плану 10 блоков (по 10 A/B на блок, 5 Buy/5 Sell), пауза, очистка, сроки 5000/1000 мс.
  4. Анализ: Scripts/LatencyReport.mq5 пересчитывает summary из архивных CSV без обращения к текущему счёту.

Документация

  • Docs/RequestLatencyLab_TZ_RU.md — исходное техническое задание (черновик).
  • Docs/DependencyChanges.md — история адаптации кода статьи 1.
  • CSV_SCHEMA.md — контракт CSV-отчёта.
  • Приёмочные сценарии: RequestLatencyLab_AcceptanceTests_RU.md (73+ сценария; начальный статус всех — NOT_RUN, выполнение тестов не означает проведения экспериментов).

Ограничения и безопасность

  • Реальная торговля — только демонстрационный счёт; никаких сторонних объектов.
  • Никаких DLL/Python/сетевых сервисов для повторения эксперимента.
  • Один основной запрос в работе; служебные CLEANUP отдельными sequence и request_id.
  • Однопрогонный отчёт не является доказательством прибыльности или устойчивости.
  • Backtest/пилот не гарантирует будущих результатов; числа из синтетических фикстур не переносятся в статью как наблюдения терминала.