Один советник, разные результаты: как сравнить два теста
Один советник может дать разные результаты при одинаковых видимых параметрах. До изменения стратегии сопоставьте код, данные, спецификацию инструмента и модель исполнения. Запись условий запуска помогает организовать проверку, но совпадение записей не доказывает совпадения всей среды. За каждым идентификатором должны стоять сохраненные отчеты, настройки и данные.
Что сохранить до нового запуска
Сохраните оба отчета, списки исполнений, журналы и наборы параметров отдельно, включая менее привлекательный результат. Изображение кривой средств не подтверждает цену первого исполнения, число частичных исполнений или фактическую дату начала. Нужна последовательность от условий запуска через операции к конечному итогу.
Одиночный тест, поиск параметров при оптимизации и оценка на более позднем периоде — разные задачи. Документация тестера MT5 описывает настройки и режимы. Одинаковое имя файла EA не означает одинаковую компиляцию или зависимости. Сохраните сборку терминала, исполняемый файл и необходимые библиотеки.
Сверьте запрошенную и фактическую даты начала. MetaQuotes описывает подготовку истории: при недостаточных предыдущих данных фактическое начало может сдвинуться вперед. Полный месяц и сокращенный период — разные оценки. Проверка покрытия CSV на английском изучает экспорт; здесь рассматривается более широкий набор условий.
Как записать условия в одном формате
Сохраняйте ровно тринадцать верхних полей из таблицы. Их технические ключи не переводятся. version — число 1, версия формата записи, а не советника. Остальные значения — строки; для inputs, costs и initialState допустимы также обычные JSON-объекты с описанием настроек.
| Ключи | Что они обозначают |
|---|---|
| version, platform, build, codeRevision | Формат записи, платформа, сборка, идентификатор кода и зависимостей. |
| inputs, dataSnapshot | Параметры и сохраненная версия набора данных. |
| symbolSpecification, executionModel, costs | Спецификация договора, модель исполнения и все заданные расходы. |
| requestedStart, actualStart, end | Запрошенное и фактическое начало, конец периода. |
| initialState | Начальные средства, позиции и существенные условия инициализации. |
В dataSnapshot можно записать идентификатор архива или отдельно рассчитанный хеш. Надпись «data-v1» остается декларацией: она не проверяет файл. Аналогично название codeRevision не подтверждает вычисление хеша. Не включайте в технические записи пароли, коды доступа и персональные сведения.
У даты должен быть явный часовой пояс; удобно использовать согласованную запись UTC. Разные строки могут описывать один момент и требовать ручного приведения. Добавить Z к времени сервера — не значит перевести его в UTC. Неизвестный идентификатор нельзя выдумывать ради заполненной формы.
Что проверяет сравнение записей
Сопоставляются введенные описания, а не работающий MT5, содержимое счета или файлы истории. Исходный модуль работает локально, не импортирует файлы и не сохраняет ввод постоянно. Равенство объектов означает равенство записей; оно не удостоверяет полноту описания среды или соответствие фактическим запускам.
Две исходные условные записи
Ниже сохранены исходные JSON-примеры с их идентификаторами. Английские технические значения обозначают синтетический пример, а не проверенную сборку или реальные котировки. Различается комиссия в costs: 1 USD против 2 USD за исполнение. Остальные значения одинаковы.
Запись 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"
}
}Каждая запись ограничена 64 KiB. Пустые или пропущенные поля означают неизвестные условия. Повторяющиеся ключи и неподдерживаемые верхние поля отвергаются. Ограничения исходного формата — восемь уровней и 2 000 значений; вложенные числа — до 15 значащих цифр без небезопасных больших целых. Параметры спецификации записываются строками с десятичной точкой. Сравнение буквальное: оно само не согласует различные форматы даты или названия.
По этим примерам можно вручную проверить одно различие costs.commissionPerFillUSD и отсутствие незаполненных условий. Даже одинаковые записи не доказывают тождество архивов. Для подтверждения файлов вычисляют хеш отдельно, а неизвестные условия оставляют явно неустановленными. Это правило сохраняется и при чтении без JavaScript.
Одна сделка с разной комиссией
Зададим линейный договор, счет в USD и одну закрытую сделку с двумя исполнениями. Результат изменения цены — 10 USD; цены, объем и период совпадают, финансирование и прочие расходы равны нулю. В A комиссия — 1 USD за исполнение, в B — 2 USD. Это учебные условия, не тариф брокера.
A дает 10 − 2 × 1 = 8 USD; B дает 10 − 2 × 2 = 6 USD. Разница 2 USD объясняется только заданной комиссией. Она не доказывает ухудшение сигнала, данных или проскальзывание. Поле costs нужно связать с отчетом и убедиться, что остальные допущения действительно одинаковы.
Одна сделка, два варианта расходов
Дополнительная проверка числа исполнений
В отдельном условном варианте вход исполнен одной сделкой, выход — двумя частями: всего три платных исполнения. Сохраним заданный результат цены 10 USD и тариф именно за каждое исполнение. Тогда A: 10 − 3 × 1 = 7 USD; B: 10 − 3 × 2 = 4 USD; разница — 3 USD. Одна закрытая позиция не обязательно означает два начисления. Здесь число исполнений задано; оно не восстановлено из MT5, и не предполагается, что любой реальный тариф устроен так же. Тариф может относиться к объему, стороне операции или иному периоду начисления.
В другом независимом сравнении валовые 10 USD с расходами 2 USD и валовые 12 USD с расходами 4 USD дают одинаковые чистые 8 USD. Совпадение конечного результата также не доказывает равенство исполнений. Проверяйте компоненты, а не только итог.
Что делать при одинаковых записях
Найдите первое различающееся событие: время сигнала, символ, сторону цены, объем, основание входа либо выхода. Конечные средства могут скрывать расхождение уже в первом чтении индикатора. Сохраняйте решения не торговать. В контрольном повторе меняйте одно условие и оставляйте предыдущий отчет; несколько одновременных изменений мешают установить причину.
Документация особенностей тестера различает среду агента и терминала, включая глобальные переменные и операции с файлами. Учитывайте зависимости и инициализацию программы. Если код использует случайные величины, сохраните способ инициализации генератора. Не объявляйте кеш причиной любого расхождения и не удаляйте единственный архив как первый диагностический шаг.
Запись может упускать зависимость или неверно описывать данные. Более высокий результат не становится автоматически правильным, а более низкий — ошибкой платформы. Реестр версий и доказательств на английском продолжает проверку, а руководство MT4 и MT5 на английском рассматривает настройки.
Порядок дальнейшей работы
- Сохраните A и B отдельно, заполните тринадцать полей и свяжите идентификаторы с архивами кода, данных и настроек. Неподтвержденные поля остаются неизвестными.
- Выберите одну разницу и проверьте ее последствия на коротком объяснимом случае. Для комиссии сопоставьте число исполнений и начислений, для даты начала — первый доступный сигнал. Сохраняйте также проверки, не подтвердившие исходную гипотезу.
- При одинаковых декларациях найдите первое различающееся событие журнала и недостающие для воспроизведения данные. Лишь после объяснения причины возвращайтесь к оценке стратегии, включая расходы, просадки и отдельный период после подбора параметров. Исторический результат не удостоверяет будущую прибыльность.
Проверьте понимание
Результат цены — 10 USD. В A два исполнения стоят по 1 USD, в B — по 2 USD. Какова разница чистых итогов?
Ответ и объяснения без JavaScript
Правильный ответ: 2 USD.
1 USD.
Меняются расходы обоих исполнений, а не только входа. Разница равна 2 × (2 − 1).
2 USD.
A: 10 − 2 = 8 USD; B: 10 − 4 = 6 USD. Разница равна 2 USD.
4 USD.
4 USD — все расходы в B. Разница расходов составляет 4 − 2 = 2 USD.
Вопросы и ответы
Подтверждают ли одинаковые записи воспроизводимость теста?
Нет. Они сопоставляют введенное описание, а не всю работающую среду. Одинаковый dataSnapshot не доказывает тождество файлов. Сохраните отчеты, код, настройки и данные; хеши вычисляются отдельно. Неизвестные условия остаются неустановленными. Отсутствие различий сужает поиск, но не исключает пропущенную зависимость, начальное состояние или иную настройку расходов.
Нужно ли сначала очистить кеш или перекомпилировать EA?
Сначала сохраните материалы обоих запусков. Изменение исполняемого файла, настроек или доступной истории до архивации затруднит воспроизведение. Сопоставьте записи, отчеты и первое различающееся исполнение, затем проведите повтор с одним документированным изменением. При новой компиляции сохраните прежний файл, версию кода и сборку. Не удаляйте единственную нужную копию данных.
Почему actualStart может отличаться от requestedStart?
Для подготовки нужны данные до выбранного начала. При их недостатке документация MT5 допускает сдвиг фактической даты. Не копируйте одну дату в оба поля без проверки. Сопоставьте отчет и журнал конкретного теста, доступную историю и настройки. До объяснения разницы это разные условия; похожие кривые результатов не заменяют проверку дат.
Стоит ли выбрать запуск с большей прибылью?
Не выбирайте более привлекательный отчет до согласования условий. В исходной модели разница вызвана комиссией, а не улучшением сигналов. Данные, период и исполнение тоже влияют на сравнение. Сначала воспроизведите причину и определите условия исследования, затем оценивайте стратегию с расходами, просадками и отдельной проверкой после периода подбора. История не подтверждает будущую прибыльность или правильность введенных допущений.
Источники и пределы применения
- MT5: настройки тестирования стратегий
Одиночный тест, параметры и расходы. Комиссии имеют разные способы и моменты начисления; учебный тариф за исполнение нельзя переносить на все счета.
- MT5: подготовка истории и фактическое начало
При нехватке подготовительной истории фактическое начало теста может переноситься вперед. Нужны отчет и журнал конкретного запуска.
- MT5: особенности среды тестера
Глобальные переменные агента, передаваемые параметры и файлы, отдельные каталоги агента. Совпадение пользовательских описаний не проверяет все зависимости.
Документация описывает MetaTrader5 и среду агента; язык читателя не задает юрисдикцию или условия брокера.