К содержанию

Сравнение двух записей исторического теста

Сопоставьте два описания условий исторического тестирования. Инструмент сравнивает введенные JSON-записи в браузере. Он не читает файлы, не вычисляет их контрольные суммы, не запускает MT5 и не подтверждает, что описание соответствует реальному тесту. Не вводите пароли, реквизиты счета или личные данные.

Что означает результат

«Совпадает» означает равенство сравниваемых значений, «отличается» — их различие. «Неизвестно» появляется, если сравниваемое поле отсутствует, равно null, содержит пустую или состоящую из пробелов строку либо пустой объект {}. Два неизвестных поля тоже не становятся подтвержденным совпадением. Имя файла или заявленный хеш остаются текстом: одинаковая надпись не доказывает одинаковых байтов.

Формат и границы

Нужны два JSON-объекта с обязательным version, равным числу 1. Это версия схемы, а не робота. Остальные 12 допустимых полей перечислены ниже; имена ключей не переводите.

Объявленные условия запуска
КлючиЧто записать
platform, build, codeRevisionПлатформу, сборку и идентификатор кода с зависимостями.
inputs, dataSnapshotПараметры и идентификатор сохраненной выборки данных.
symbolSpecification, executionModel, costsУсловия инструмента, способ моделирования исполнения и заданные расходы.
requestedStart, actualStart, endЗапрошенное и фактическое начало, конец теста с явной часовой зоной.
initialStateНачальный баланс, позиции и значимые условия инициализации.

Непустые значения верхнего уровня — строки; inputs, costs и initialState также могут быть обычными объектами. Внутри них допустимы JSON-значения, в том числе вложенные массивы. Вложенный пустой массив [] — известное значение; это не пустой объект {}. Для точных десятичных параметров используйте строки с точкой.

Предельный размер каждой записи — 64 КиБ (65 536 байт UTF-8); глубина не более 8 уровней, суммарно не более 2000 значений. Числа внутри JSON ограничены поддерживаемой точностью: не более 15 значащих цифр и без небезопасных больших целых, переполнения или исчезновения ненулевой величины до нуля. Повторные, запрещенные служебные ключи и неизвестные поля верхнего уровня отклоняются. Точное большое число можно хранить строкой, но инструмент не проверяет его экономический смысл.

Порядок ключей объекта не важен. Порядок элементов массива важен. Строки "1" и "1.0" различаются; числовые JSON-записи 1 и 1.0 после чтения являются одним числом. Строки с разными обозначениями единиц или одного момента времени автоматически не приводятся к общему виду. Приписывание Z серверному времени не превращает его в UTC. Инструмент не проверяет календарную корректность даты.

Сравните две записи

Оба начальных объекта — полностью синтетические примеры, а не экспорт MT5. Сохраняем даты примера 1–12 октября 2026 года. Английские технические значения с пометкой synthetic означают условные идентификаторы; это не свежая проверка файлов или теста.

Записи A и B

Введите два описания в одной схеме

Ограничения 64 КиБ, 8 уровней и 2000 значений действуют на каждую запись. Сравнение выполняется только после нажатия кнопки.

Полные исходные примеры A и B — доступны без JavaScript

Это неизменные тексты начальных вымышленных примеров. Они не меняются вместе с введенными выше записями. Откройте раздел и прокручивайте каждую область клавишами стрелок или Page Down.

Исходный пример A

{
    "version": 1,
    "platform": "MT5 — synthetic example",
    "build": "demo-build-a",
    "codeRevision": "synthetic-code-v1",
    "inputs": {
        "period": "14"
    },
    "dataSnapshot": "synthetic-export-v1",
    "symbolSpecification": "synthetic-EURUSD-spec-v1",
    "executionModel": "synthetic real-tick mode declaration",
    "costs": {
        "commissionPerFillUSD": "1",
        "fills": "2",
        "financingUSD": "0",
        "otherUSD": "0"
    },
    "requestedStart": "2026-10-01T00:00:00Z",
    "actualStart": "2026-10-01T00:00:00Z",
    "end": "2026-10-12T00:00:00Z",
    "initialState": {
        "depositUSD": "1000",
        "positions": "none"
    }
}

Исходный пример B

{
    "version": 1,
    "platform": "MT5 — synthetic example",
    "build": "demo-build-a",
    "codeRevision": "synthetic-code-v1",
    "inputs": {
        "period": "14"
    },
    "dataSnapshot": "synthetic-export-v1",
    "symbolSpecification": "synthetic-EURUSD-spec-v1",
    "executionModel": "synthetic real-tick mode declaration",
    "costs": {
        "commissionPerFillUSD": "2",
        "fills": "2",
        "financingUSD": "0",
        "otherUSD": "0"
    },
    "requestedStart": "2026-10-01T00:00:00Z",
    "actualStart": "2026-10-01T00:00:00Z",
    "end": "2026-10-12T00:00:00Z",
    "initialState": {
        "depositUSD": "1000",
        "positions": "none"
    }
}

Для сравнения и скачивания результата нужен JavaScript. Примеры и формат записи доступны ниже и выше на этой странице.

Обработка происходит в памяти этой страницы: инструмент не отправляет введенные записи на сервер и не записывает их в localStorage. Скачанный TXT содержит введенные значения; проверьте его перед сохранением или передачей. В TXT имена полей записаны как JSON-строки: табуляция и переносы строк внутри ключа не создают дополнительные столбцы или строки отчета. Это не гарантия поведения расширений или иных функций вашего браузера. Изменение любого поля убирает старый результат и возможность его скачать до нового сравнения. Кнопка возврата восстанавливает исходные A и B и очищает результат.

Условные расходы: два исполнения

Пусть линейная сделка в USD дала ценовой результат 10 USD; есть два платных исполнения, финансирование и прочие платежи равны нулю. A заявляет 1 USD за исполнение, B — 2 USD. Чистый результат A: 10 − 2 × 1 = 8 USD; B: 10 − 2 × 2 = 6 USD. Разница 2 USD объясняется только заданным тарифом при прочих равных условиях. Начальные записи отличаются в costs.commissionPerFillUSD: сравнитель должен показать одну измененную строку. Он сам не вычисляет денежный результат и не подтверждает тариф брокера.

Почему число исполнений и равный итог требуют внимания

В другом условном расчете при трех платных исполнениях и тех же 10 USD до расходов результаты равны 10 − 3 × 1 = 7 USD и 10 − 3 × 2 = 4 USD. Разница уже 3 USD. Одна сделка может содержать несколько исполнений: проверяйте фактический отчет и основание начисления комиссии. Эти суммы не являются универсальным тарифом MT5 или любого счета.

Отдельный учебный пример: ценовые результаты 10 и 12 USD при расходах 2 и 4 USD дают одинаковые чистые 8 USD. Равный итог не доказывает равенства составляющих. И наоборот, одинаковые заполненные метаданные не проверяют сами файлы или полноту описания. Назначенные суммы не являются оценкой качества стратегии.

Что проверять после сравнения

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

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

Источники и область применения

  1. MT5: настройки тестирования стратегий

    Одиночный тест, параметры и расходы. Комиссии имеют разные способы и моменты начисления; учебный тариф за исполнение нельзя переносить на все счета.

  2. MT5: подготовка истории и фактическое начало

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

  3. MT5: особенности среды тестера

    Глобальные переменные агента, передаваемые параметры и файлы, отдельные каталоги агента. Совпадение пользовательских описаний не проверяет все зависимости.

Объяснение программного сравнения деклараций и документации тестера. Все денежные примеры и идентификаторы вымышлены. Это не проверка счета, исполнимых рыночных данных или закона определенной страны; русский язык не определяет резидентство.