Для хайпа будем препарировать популярный на Маркете советник, автор которого только на MQL5-площадке продал копий своих советников на $10+ миллионов (оценочное суждение).
В данном обзоре будут только официально разрешенные (MetaQuotes) методы исследования. Т.е. не будет дампа EX5, не будет меняться сам EX5, не будет изучения RAM Тестера стратегий, подстановка своих кусков данных в RAM во время выполнения и прочих популярных в узких кругах хак-штучек.
Просто покажем некоторые несложные методы возможного исследования чужого советника с закрытым исходным кодом на конкретном примере.
Маркет-сервис продажи торговых советников позволяет бесплатно закачивать исполняемый файл EX5 с ограничением — работать будет только в Тестере стратегий. Используя эту бесплатную официальную возможность мы и будем строить почти все дальнейшие действия.
Авторы советников вносят коррективы в свои изделия, что находит отражения в соответствующем разделе каждого советника. Пример такого. И перед тем, как обновлять даже бесплатную тестерную версию советника, настоятельно рекомендуется устаревший EX5-советника переименовывать.
Потому что сравнение разных версий EX5 позволяет многое выяснить. И об этом будет ниже. А сейчас покажем, какие версии советника будут исследоваться в данной заметке.
MQL5\Experts\Market\Quantum Queen MT5\Quantum Queen MT5 2025-05-05.ex5 MQL5\Experts\Market\Quantum Queen MT5\Quantum Queen MT5 2025-10-22.ex5 MQL5\Experts\Market\Quantum Queen MT5\Quantum Queen MT5 2026-02-17.ex5
Даты в конце были прописаны вручную и соответствуют времени обновления советника. Т.е. у нас имеются три версии бесплатных EX5-версий одного и того же советника.
Благодарность людям, кто поделился этими версиями. Еще раз настоятельно рекомендуется вести архив EX5-версий каждого интересуемого (даже потенциально) торгового советника.
Могут быть два проявления человеческого фактора: случайное и целенаправленное. Второе будет сильно ниже по тексту. А вот случайным может быть, например, забытие автором распечаток в Журнале Тестера какой-то закрытой технической информации (дебажные строки). Которая может быть полезна исследователю. Вплоть до полного открытия используемых индикаторов.
Это еще один плюс в пользу ведения архива всех выпускаемых версий советника. Ну и при анализе советника получается, что одним из источников анализа явялется log-файл соответствующих одиночных проходов Тестера. Причем два лога: с включенным и выключенным Визуализатором, т.к. есть MQL_VISUAL_MODE.
Разделим все торговые советники на два принципиально разных вида: оптимизируемые и вшитые.
На самом деле вшитые советники на продажу могут создаваться целенаправленно по множеству причин. И со знаком плюс и со знаком минус для каждой из сторон сделки. В частности, вшитые советники иногда делаются в случае, если торгуется портфель из нескольких торговых логик. И чтобы упростить поддержку (support), входные параметры каждой из таких логик жестко прописываются в исходном коде.
Таким портфельным советником является и советник, который будем препарировать. Вшитые советники тяжело исследовать, т.к. минимум возможностей для маневра.
В MT5 можно использовать высокоточный режиме реальных тиков. И грубый - M1 OHLC. Грубость нужна для высокой скорости. И авторы советников частенько используют именно грубый метод (торговый сигнал на открытии бара + анализ размера спреда), чтобы иметь возможность быстро исследовать рынок и настраивать свои торговые логики через Оптимизатор.
Да, имеются возможности быстро тестировать на реальных тиках, но иногда это избыточно и требуется определенная компетентность.
Если по реальным тикам и M1 OHLC результат бэктестов советника слабо отличаются, то целесообразно выбрать M1 OHLC для дальнейших манипуляций. Такая ситуация и с исследовательским советником — его имеет смысл гонять на быстром режиме M1 OHLC.
В описании продаваемых советников авторы сообщают о торговых символах и рекомендуемых брокерах. Именно на комбинации символ+брокер автор настраивал свой советник. Поэтому резонно для начала повторить исходные данные, какие были у автора.
Берем реальный счет рекомендуемого автором брокера и смотрим соответствующую Bases-папку с историей M1-баров.

Хорошо видно, что до 2017 года размер файлов каждого года мелкий. Что говорит о некачественной базе для этих лет. Поэтому имеет смысл запускаться не ранее 2018 года.

Автор советника предусмотрел этот момент и сам запретил торговлю раньше 2018 года. Поэтому выставление более ранней даты на итоговый результат не повлияет.
Так что будем запускать данный советник с начала 2018 года на XAUUSD M1 OHLC в режиме пипсов (быстрее).
Запускаем одиночный прогон последовательно имеющихся трех версий советника. После каждого прохода запускаем TesterReport, который создает соответствующий html-отчет торговли и virt-файл с этой историей.

Также сохраняем log-файл каждого одиночного прохода.
На скриншоте специально выделены длительности вычислений каждого одиночного прохода. К этому вернемся.
Далее будем работать с тремя virt-файлами, который создал TesterReport.
TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt
Все файлы можно визуализировать в браузере с помощью CustomReport.

Это позволит подробно рассмотреть историю торговли каждой версии советника.
Можем видеть, что с обновлением количество позиций за восемь лет уменьшалось: 3892, 3559, 3128.
virt — это формат библиотеки виртуального окружения Virtual. Которая нам позволит удобно проводить дальнейший анализ.
Мы будем делать сравнение только первых двух версий советника. Третья отличается сильно, но об этом позже.
Сначала определим, чем отличается история торговли версии от 22.10.2025 от более ранней версии 05.05.2025. Для этого запустим скрипт Compare.mq5 (прикреплен), логика которого такая.
#include <fxsaber\Virtual\Virtual.mqh> // <a href="https://www.mql5.com/ru/code/22577" target="_blank">https://www.mql5.com/ru/code/22577</a>
// Проверка существования ордера в текущем торговом окружении.
bool IsExist( const ORDER_BASE &Order )
{
bool Res = false;
for (int i = OrdersHistoryTotal(); (bool)i-- && !Res;)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
Res = IsEqual(Order); // Равенство ордера с выбранным в текущем торговом окружении.
return(Res);
}
// Возвращает индексы ордеров текущего торгового окружения, которых нет в VirtualPointer-окружении.
int Compare( const VIRTUAL_POINTER &VirtualPointer, int &Pos[] )
{
const int Total = ArrayResize(Pos, OrdersHistoryTotal());
int Count = 0;
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
{
ORDER_BASE Order = VIRTUAL::GetOrder();
if (_VP(VirtualPointer, !IsExist(Order))) // Если в другом торговом окружении не нашелся такой ордер.
Pos[Count++] = i;
}
return(ArrayResize(Pos, Count));
}
Скрипт попросит выбрать два соответствующих virt-файла и покажет, какие произошли изменения в торговле после обновления версии.

По выданному скриптом результату в Журнал сразу станет понятно, что после обновления версии советника стало запрещено торговать последние две недели и первые две недели календарного года. В остальном торговля до 2025 года идентична (небольшое различие есть 2024.04.02). А дальше начались почти незначительные изменения, которые еще можно объяснить валидными доп. условиями в торговой логике — каждый случай сранивал в HTML-отчетах.
Остались только два случая.
TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt - exist. TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt - not exist. 282: #6714 2025.06.20 20:35:00.000 buy 0.01 XAUUSD 3368.36 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 1.60 QQ[XAUUSD]1234[T2/S04] 0: +160 (+160) - 01:35:00 283: #6715 2025.06.20 20:57:00.000 buy 0.01 XAUUSD 3366.84 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 3.12 QQ[XAUUSD]1234[T2/S04] 0: +312 (+312) - 01:13:00 284: #6716 2025.06.20 21:19:00.000 buy 0.01 XAUUSD 3364.96 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 5.00 QQ[XAUUSD]1234[T2/S04] 0: +500 (+500) - 00:51:00 285: #6717 2025.06.20 19:45:00.000 buy 0.01 XAUUSD 3373.25 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 -3.29 QQ[XAUUSD]1234[T2/S04] 0: -329 (-329) - 02:25:00 286: #6718 2025.06.20 19:49:00.000 buy 0.01 XAUUSD 3371.67 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 -1.71 QQ[XAUUSD]1234[T2/S04] 0: -171 (-171) - 02:21:00 287: #6719 2025.06.20 20:18:00.000 buy 0.01 XAUUSD 3370.13 0.00 0.00 2025.06.20 22:10:00.000 3369.96 0.00 0.00 -0.17 QQ[XAUUSD]1234[T2/S04] 0: -17 (-17) - 01:52:00 288: #6723 2025.06.20 22:35:00.000 buy 0.01 XAUUSD 3368.29 0.00 0.00 2025.06.20 23:50:00.000 3368.92 0.00 0.00 0.63 QQ[XAUUSD]1234[T2/S03] 0: +63 (+63) - 01:15:00 289: #6724 2025.06.20 22:41:00.000 buy 0.01 XAUUSD 3366.48 0.00 0.00 2025.06.20 23:50:00.000 3368.92 0.00 0.00 2.44 QQ[XAUUSD]1234[T2/S03] 0: +244 (+244) - 01:09:00 290: #6725 2025.06.20 22:15:00.000 buy 0.01 XAUUSD 3370.28 0.00 0.00 2025.06.20 23:50:00.000 3368.92 0.00 0.00 -1.36 QQ[XAUUSD]1234[T2/S03] 0: -136 (-136) - 01:35:00 291: #6870 2025.07.30 23:01:00.000 sell 0.01 XAUUSD 3272.85 0.00 0.00 2025.07.30 23:28:00.000 3270.00 0.00 0.00 2.85 QQ[XAUUSD]1234[T3/S06] 0: +285 (+285) - 00:27:00 292: #6871 2025.07.30 23:00:00.000 sell 0.01 XAUUSD 3269.31 0.00 0.00 2025.07.30 23:28:00.000 3270.00 0.00 0.00 -0.69 QQ[XAUUSD]1234[T3/S06] 0: -69 (-69) - 00:28:00 293: #6884 2025.07.31 04:54:00.000 sell 0.01 XAUUSD 3291.19 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 1.43 QQ[XAUUSD]1234[T3/S06] 0: +143 (+143) - 20:08:00 294: #6885 2025.07.31 05:01:00.000 sell 0.01 XAUUSD 3295.21 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 5.45 QQ[XAUUSD]1234[T3/S06] 0: +545 (+545) - 20:01:00 295: #6886 2025.07.31 06:02:00.000 sell 0.01 XAUUSD 3298.25 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 8.49 QQ[XAUUSD]1234[T3/S06] 0: +849 (+849) - 19:00:00 296: #6887 2025.07.31 09:08:00.000 sell 0.01 XAUUSD 3302.11 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 12.35 QQ[XAUUSD]1234[T3/S06] 0: +1235 (+1235) - 15:54:00 297: #6888 2025.07.31 10:46:00.000 sell 0.01 XAUUSD 3309.14 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 19.38 QQ[XAUUSD]1234[T3/S06] 0: +1938 (+1938) - 14:16:00 298: #6889 2025.07.31 11:19:00.000 sell 0.01 XAUUSD 3312.39 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 22.63 QQ[XAUUSD]1234[T3/S06] 0: +2263 (+2263) - 13:43:00 299: #6890 2025.07.30 23:30:00.000 sell 0.01 XAUUSD 3269.42 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -20.34 QQ[XAUUSD]1234[T3/S06] 0: -2034 (-2034) - 1d 01:32:00 300: #6891 2025.07.31 01:02:00.000 sell 0.01 XAUUSD 3274.13 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -15.63 QQ[XAUUSD]1234[T3/S06] 0: -1563 (-1563) - 1d 00:00:00 301: #6892 2025.07.31 01:04:00.000 sell 0.01 XAUUSD 3278.35 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -11.41 QQ[XAUUSD]1234[T3/S06] 0: -1141 (-1141) - 23:58:00 302: #6893 2025.07.31 02:39:00.000 sell 0.01 XAUUSD 3281.38 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -8.38 QQ[XAUUSD]1234[T3/S06] 0: -838 (-838) - 22:23:00 303: #6894 2025.07.31 02:57:00.000 sell 0.01 XAUUSD 3284.42 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -5.34 QQ[XAUUSD]1234[T3/S06] 0: -534 (-534) - 22:05:00 304: #6895 2025.07.31 03:02:00.000 sell 0.01 XAUUSD 3287.94 0.00 0.00 2025.08.01 01:02:00.000 3289.76 0.00 0.00 -1.82 QQ[XAUUSD]1234[T3/S06] 0: -182 (-182) - 22:00:00
И оба случая попадают в промежуток между выпусками рассматриваемых версий.
Первый случай — 2025.06.20.
До обновления было шесть (красная рамка) одновременно открытых позиций. После обновления — три.
В мониторинге присутствуют все сделки, как в версии до обновления — 05.05.2025.
Второй случай - 2025.07.3x.
Кусок торговли, где было одновременно 12 открытых позиций, вырезан. Невозможно точно сказать, было это сделано специально, либо же так совпало, т.к. было несколько версий советника, вышедших до вырезанного интервала. К сожалению, их нет в архиве.
В мониторинге торговля присутствует частично, как в версии от 05.05.2025.
Чтобы вырезать при бэктесте интервалы, связанные с сильными запланированными новостями, автор всегда может предоставлять файл календаря в открытом формате. Тогда любые подозрения в нечестных манипуляциях могут быть нивелированы данными из этого календаря.
Другое дело, если удаление определенных интервалов торговли происходит несистемно. Здесь уже сложно сказать о манипулятивной составляющей. Но иногда это оправдано, если оптимизация советника не включала эти интервалы по объективным причинам.
Выше обратил внимание на длительность расчетов. Самая ранняя версия 11.5 млн вызовов OnTick за восемь лет рассчитала за 20 секунд. Это говорит о том, что торговая логика вычислительно примитивна.
При этом после обновления расчеты стали длиться на 50% дольше. И это при том, что количество позиций уменьшилось и на >90% позиции совпадают (семь лет идентичны). Такое торможение может вызвать только крайне неэффективно лобовой алгоритм проверки на принадлежность к вырезанным интервалам. Например, к месяцу вокруг 1-го января.
Советник можно запустить на сдвинутых котировках по времени, что даст дополнительный анализ на наличие вырезанных интервалов.
При сдвиге надо знать ответы на два вопроса.
В какую сторону?
В прошлое двигать нежелательно по той причине, что возможно влияние вырезанных интервалов, т.к. про прошлое знал автор. Поэтому двигаем только в будущее. Тем более, что автор сам поставил запрет на торговлю до 2018 года.
На сколько сдвигать?
Чтобы почти все алгоритмы работы со временем действовали корректно, нужно сдвигать на интервал, кратный минимальному полному циклу — 28 лет: четыре года (расстояние между високосными) умножить на семь (количество дней в неделе).
Удобно для восприятия будет, если сдвинуть на 2800 лет: был 2018, а стал — 4818. Но datetime такое не позволяет.
Тогда сдвинуть на 280 лет. Но и здесь могут быть проблемы, т.к. 2100 год — первый невисокосный, кратный четырем.
Поэтому сдвиг на 28 лет: было 2018, стало — 2046.
Особенности MT5-Тестера.
Однако, на момент написания заметки Тестер MT5 не мог тестировать на котировках «из будущего». И мы также еще и не можем сдвигать на 28 лет в прошлое, т.к. в советнике стоит ограничение на торговлю до 2018 года.
Компромисс.
Високосность редко используется в торговле, чаще всего — дни недели (например, расписание торговых сессий). Поэтому нужно тестировать на парах отдельных календарных лет, у которых все даты совпадают по дням недели. Но таких подходящих пар не оказалось.
Тогда календарный год делаем, как в давние времена у восточных славян — 12 месяцев и начало 1-го марта: первая дата после конца февраля, в котором 28/29 дней.
Автоматизируем поиск.
ENUM_DAY_OF_WEEK GetDayOfWeek( const datetime time )
{
return((ENUM_DAY_OF_WEEK)((time / (24 * 3600) + THURSDAY) % 7));
}
void OnStart()
{
for (int i = 2018; i <= 2026; i++)
Print((string)i + " - " + (string)GetDayOfWeek((datetime)((string)i + ".03.01")));
}В таком случае подходящие пары находятся: 2026<->2020 и 2024<->2019.
2018 - 4 2019 - 5 2020 - 0 2021 - 1 2022 - 2 2023 - 3 2024 - 5 2025 - 6 2026 - 0
На момент написания заметки не прошло и двух месяцев 2026 года. Поэтому останавливаемся только на одной такой паре:
2024.03.01 - 2025.02.28 2019.03.01 - 2020.02.28
На этих двух интервалах полное совпадение чисел с днями недели.

В MT5 есть возможность создавать свои символы с любой историей котировок. Для советников они отличаются только одним явным флагом SYMBOL_CUSTOM и одним косвенным SYMBOL_PATH. И этот идентификатор может оригинально использоваться в продаваемых советниках, включая запрет на бэктесты на искусственных символах, начиная с какого-то обновления. Поэтому опять же помним про важность архива версий.
Скрипт SymbolOffset.mq5 создает кастомный символ с историей, сдвинутой на пять особых (см. выше) лет в прошлое.
input datetime inOffsetTime = (D'2024.03.01' - D'2019.03.01'); // Пять особых лет
void OnStart()
{
MqlRates Rates[];
if (CopyRates(_Symbol, PERIOD_M1, 0, INT_MAX, Rates) > 0)
{
const int Size = ArraySize(Rates);
const string Name = _Symbol + "c";
CustomSymbolCreate(Name, NULL, _Symbol);
ResetLastError();
// Сдвинули на пять лет назад.
for (int i = Size; (bool)i--;)
Rates[i].time -= inOffsetTime;
if (CustomRatesReplace(Name, 0, LONG_MAX, Rates) == Size)
ChartOpen(Name, PERIOD_CURRENT);
else
Print("CustomRatesReplace Error " + (string)_LastError);
}
}
И мы можем сделать одиночные прогоны + TesterReport (повторить действия, что описаны были выше) исследуемых версий советника на одинаковых последовательностях баров, но с разным временем.

Оценивать влияние сдвига времени на результат торговли будем на одной версии — от 22.10.2025.
Сначала штатные отчеты MT5.
Хорошо видно, что после сдвига получили идентичную историю котировок в Тестере, но количество сделок увеличилось, как и размер просадки.
Теперь запускаем ранее представленный скрипт Compare.mq5.

И он показывает (один из примеров), что в конце февраля 2025 года вырезан крайне неудачный (сетка из 10 позиций) кусок торговли.
TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSDc_20190301-20200228_1M1.virt - exist. TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20240301-20250228_1M1.virt - not exist. 039: #1121 2020.02.26 03:00:00.000 buy 0.01 XAUUSDc 2923.67 0.00 0.00 2020.02.26 03:07:00.000 2924.47 0.00 0.00 0.80 QQ[XAUUSDc]1234[T1/S02] 0: +80 (+80) - 00:07:00 040: #1123 2020.02.26 03:15:00.000 buy 0.01 XAUUSDc 2923.57 0.00 0.00 2020.02.26 03:16:00.000 2925.39 0.00 0.00 1.82 QQ[XAUUSDc]1234[T1/S02] 0: +182 (+182) - 00:01:00 041: #1134 2020.02.26 03:58:00.000 buy 0.01 XAUUSDc 2915.87 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 2.31 QQ[XAUUSDc]1234[T1/S02] 0: +231 (+231) - 07:03:00 042: #1135 2020.02.26 06:18:00.000 buy 0.01 XAUUSDc 2912.93 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 5.25 QQ[XAUUSDc]1234[T1/S02] 0: +525 (+525) - 04:43:00 043: #1136 2020.02.26 08:11:00.000 buy 0.01 XAUUSDc 2910.92 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 7.26 QQ[XAUUSDc]1234[T1/S02] 0: +726 (+726) - 02:50:00 044: #1137 2020.02.26 08:36:00.000 buy 0.01 XAUUSDc 2908.80 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 9.38 QQ[XAUUSDc]1234[T1/S02] 0: +938 (+938) - 02:25:00 045: #1138 2020.02.26 08:56:00.000 buy 0.01 XAUUSDc 2907.18 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 11.00 QQ[XAUUSDc]1234[T1/S02] 0: +1100 (+1100) - 02:05:00 046: #1139 2020.02.26 03:30:00.000 buy 0.01 XAUUSDc 2927.71 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 -9.53 QQ[XAUUSDc]1234[T1/S02] 0: -953 (-953) - 07:31:00 047: #1140 2020.02.26 03:39:00.000 buy 0.01 XAUUSDc 2925.87 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 -7.69 QQ[XAUUSDc]1234[T1/S02] 0: -769 (-769) - 07:22:00 048: #1141 2020.02.26 03:41:00.000 buy 0.01 XAUUSDc 2923.98 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 -5.80 QQ[XAUUSDc]1234[T1/S02] 0: -580 (-580) - 07:20:00 049: #1142 2020.02.26 03:47:00.000 buy 0.01 XAUUSDc 2922.43 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 -4.25 QQ[XAUUSDc]1234[T1/S02] 0: -425 (-425) - 07:14:00 050: #1143 2020.02.26 03:56:00.000 buy 0.01 XAUUSDc 2919.73 0.00 0.00 2020.02.26 11:01:00.000 2918.18 0.00 0.00 -1.55 QQ[XAUUSDc]1234[T1/S02] 0: -155 (-155) - 07:05:00 051: #1145 2020.02.26 22:45:00.000 buy 0.01 XAUUSDc 2915.46 0.00 0.00 2020.02.26 22:56:00.000 2915.98 0.00 0.00 0.52 QQ[XAUUSDc]1234[T2/S03] 0: +52 (+52) - 00:11:00
Это обстоятельство трудно иначе трактовать, чем специально прописанный в исходнике обход неудобного участка истории. Т.е. это несистемные действия.
Несложно заметить, что исследуемый советник содержит сразу несколько ТС, где идентификатором свой-чужой служит комментарий к ордерам.
Делим тогда торговлю на отдельные ТС, чтобы оценить их количество в целом и качество в отдельности.
Для этого запустим скрипт Separate.mq5, который создает virt-файлы каждой под-ТС следующим образом.
void Separate( const string FileName, const bool Stats = false )
{
VIRTUAL::DeleteAll(); // Удаляем все виртуальные окружения.
if (VIRTUAL::SelectByHandle(VIRTUAL::Create()) && VIRTUAL::Load(FileName))
{
Print(FileName);
const int Total = OrdersHistoryTotal();
SORTDATA<string> Comments; // Сортированный массив.
// Собрали все варианты комментариев.
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
Comments += OrderComment();
// Для каждого варианта комментария создаем виртуальное окружение.
for (int i = Comments.GetAmount(); (bool)i--;)
VIRTUAL::Create();
// Разбиваем историю торговли на окружения с одинаковым комментарием.
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
{
const ORDER_BASE Order = VIRTUAL::GetOrder();
// Позицию поместили в соответствующее виртуальное окружение.
_VI(Comments.GetPos(OrderComment()) + 2, VIRTUAL::AddOrder(Order));
}
// По каждому комментарию сохраняем историю торговли
for (int i = 1; i < VIRTUAL::Total(); i++)
{
_VSI(i + 1) // Зашли в виртуальное окружение.
const string FileName = FileName + "_\\" + (string)i + ".virt";
Print((string)i + ": " + Comments.Data[i - 1] + ": " + FileName + " - " + (string)VIRTUAL::Save(FileName)); // Сохранили.
}
}
}
Результат такой.
TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt 1: QQ[XAUUSD]1234[T1/S01]: TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\1.virt - 376765 2: QQ[XAUUSD]1234[T1/S02]: TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\2.virt - 219429 3: QQ[XAUUSD]1234[T2/S03]: TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\3.virt - 171149 4: QQ[XAUUSD]1234[T2/S04]: TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\4.virt - 263165 5: QQ[XAUUSD]1234[T3/S06]: TesterReport.mq5\Quantum Queen MT5 2025-05-05_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\5.virt - 77145 TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt 1: QQ[XAUUSD]1234[T1/S01]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\1.virt - 343537 2: QQ[XAUUSD]1234[T1/S02]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\2.virt - 196709 3: QQ[XAUUSD]1234[T2/S03]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\3.virt - 160073 4: QQ[XAUUSD]1234[T2/S04]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\4.virt - 250101 5: QQ[XAUUSD]1234[T3/S06]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\5.virt - 62661 TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt 1: QQ[XAUUSD]1234[T1/S01]: TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\1.virt - 407153 2: QQ[XAUUSD]1234[T2/S03]: TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\2.virt - 211193 3: QQ[XAUUSD]1234[T4/S08]: TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\3.virt - 69761 4: QQ[XAUUSD]1234[T5/S09]: TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\4.virt - 52437 5: QQ[XAUUSD]1234[T6/S12]: TesterReport.mq5\Quantum Queen MT5 2026-02-17_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\5.virt - 150133
Т.е. каждая версия содержит по пять внутренних ТС. Странно, что последняя версия не содержит 10 ТС, как это утверждал автор.
Strategies increased to 10 — yes, TEN built-in strategies now, including dedicated London session trading strategies.Через CustomReport открываем сгенерированные virt-файл и оцениваем каждую ТС отдельно.
Хотя быстрее будет через тот же Separate.mq5 скрипт.
TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt STAT_PROFIT = 4584.27 STAT_BALANCE_DD = 30.02 STAT_EXPECTED_PAYOFF = 1.29 STAT_PROFIT_FACTOR = 5.11 STAT_RECOVERY_FACTOR = 152.71 STAT_TRADES = 3559.00 1: QQ[XAUUSD]1234[T1/S01]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\1.virt - 343537 STAT_PROFIT = 1787.59 STAT_BALANCE_DD = 23.09 STAT_EXPECTED_PAYOFF = 1.48 STAT_PROFIT_FACTOR = 6.91 STAT_RECOVERY_FACTOR = 77.42 STAT_TRADES = 1208.00 2: QQ[XAUUSD]1234[T1/S02]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\2.virt - 196709 STAT_PROFIT = 1090.19 STAT_BALANCE_DD = 26.90 STAT_EXPECTED_PAYOFF = 1.58 STAT_PROFIT_FACTOR = 4.94 STAT_RECOVERY_FACTOR = 40.53 STAT_TRADES = 691.00 3: QQ[XAUUSD]1234[T2/S03]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\3.virt - 160073 STAT_PROFIT = 579.55 STAT_BALANCE_DD = 21.43 STAT_EXPECTED_PAYOFF = 1.03 STAT_PROFIT_FACTOR = 4.80 STAT_RECOVERY_FACTOR = 27.04 STAT_TRADES = 562.00 4: QQ[XAUUSD]1234[T2/S04]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\4.virt - 250101 STAT_PROFIT = 917.68 STAT_BALANCE_DD = 30.02 STAT_EXPECTED_PAYOFF = 1.04 STAT_PROFIT_FACTOR = 4.63 STAT_RECOVERY_FACTOR = 30.57 STAT_TRADES = 879.00 5: QQ[XAUUSD]1234[T3/S06]: TesterReport.mq5\Quantum Queen MT5 2025-10-22_ICMarketsSC-MT5-2_XAUUSD_20180101-20260223_1M1.virt_\5.virt - 62661 STAT_PROFIT = 209.26 STAT_BALANCE_DD = 17.05 STAT_EXPECTED_PAYOFF = 0.96 STAT_PROFIT_FACTOR = 2.61 STAT_RECOVERY_FACTOR = 12.27 STAT_TRADES = 219.00
За восемь лет каждая сеточная под-ТС содержит такое количество позиций: 1208, 691, 562, 879 и 219, соответственно. Стат. значимость невысокая. Да, в сумме они дают 3559 позиций, но это никак на стат. значимость не влияет. Оценивать нужно каждую под-ТС в отдельности.
Когда имеется история каждой под-ТС, становится значительно легче разобраться в алгоритме ведения открытой позиции. Это тот случай, когда он несложно читается.
Грубо говоря, закрытие всегда происходит по фиксированному виртуальному TakeProfit совокупной сеточной позиции. В общем, получилось довольно близко воспроизвести этот алгоритм в файле Primitive.mq4. Случаи, что проверялись — полное совпадение.
В MT5 запускается так.
#include <MT4Orders.mqh> // <a href="https://www.mql5.com/ru/code/22770" target="_blank">https://www.mql5.com/ru/code/22770</a> #include "Primitive.mq4"
Желающие могут попробовать — прикреплен.
Данных по индикаторам нет. Но есть информация по используемым таймфреймам. Для этого нужно запустить советник в режиме Визуализации.

XAUUSD,M6: history cache allocated for 131129 bars and contains 68729 bars from 2023.01.03 01:00 to 2024.02.29 23:54 XAUUSD,M15: history cache allocated for 52457 bars and contains 27497 bars from 2023.01.03 01:00 to 2024.02.29 23:45 XAUUSD,M5: history cache allocated for 157354 bars and contains 82474 bars from 2023.01.03 01:00 to 2024.02.29 23:55 XAUUSD,M10: history cache allocated for 78682 bars and contains 41242 bars from 2023.01.03 01:00 to 2024.02.29 23:50 XAUUSD,M20: history cache allocated for 39347 bars and contains 20627 bars from 2023.01.03 01:00 to 2024.02.29 23:40 XAUUSD,M30: history cache allocated for 26231 bars and contains 13751 bars from 2023.01.03 01:00 to 2024.02.29 23:30 XAUUSD,Daily: history cache allocated for 560 bars and contains 300 bars from 2023.01.03 00:00 to 2024.02.29 00:00
Возможно, что-то из списка технических индикаторов: RSI, Demarker и т.д.
Не хватает только фильтра, чтобы понять, при каких условиях открывается сетка соответствующей под-ТС.
Тут могут пригодиться методы машинного обучения, т.к. данных достаточно: есть M1-история, OrderOpenTime 1208 позиций, список таймфреймов и ограниченный список потенциальных индикаторов.
Статьи на эту тему были.
Но надо помнить, что искажения будут вносить несистемные искусственные заплатки неудобных участков истории, коих не мало.
Согласно этой методике можно ограничить максимальное количество открытых позиций.

Если ограничиться только одной позицией, то последняя версия будет выдавать такой результат.

Разрешение на две или три одновременно открытых позиций делает линию вверх еще стремительнее. Инструмент предоставлен, чтобы в этом убедиться.
Получается, что возможно отказаться от ущербной логики закрытия в плюс нетто-позиции с огромными рисками. И оставить малые риски.
Чтобы измерить риск в виде просадки по Equity, можно запустить virt-файл прямо в Тестере. Там риск, действительно, падает.
Делать это в данном советнике нецелесообразно с точки зрения продаж, т.к. всегда можно выпустить другой продукт.
Можно в десятки раз ускорить расчеты за счет мат. режима Тестера MT5.
#include <fxsaber\EAToMath\EAToMath.mqh> // <a href="https://www.mql5.com/ru/code/61283" target="_blank">https://www.mql5.com/ru/code/61283</a>
#include "Primitive.mq4"
double OnTester() { return(AccountInfoDouble(ACCOUNT_BALANCE)); }EAToMath.mqh 1352: XAUUSD: 2026.01.01 - 2026.02.28, 1 Month 27 Days, 10 863 625 ticks. EAToMath.mqh 1357: TotalTime = 00:00:00.579, Performance = 18.75 Ticks (millions)/sec.
Сеточная ТС спокойно может считаться со скоростью десятков миллионов тиков в секунду на одном CPU-ядре. Что позволяет работать с точными моделями расчетов.
Были подробно показаны некоторые официально разрешенные методы исследования EX5-советников на примере популярного представителя Маркет-сервиса.
Они позволили выявить проблемные места, вплоть до неприличных. Создать базу для воспроизведения в виде открытого исходного кода.
И, возможно, сделать переоценку витринам.