preview
Как разработать мультивалютного советника с ИИ-помощником (AI Assistant) в MetaTrader 5

Как разработать мультивалютного советника с ИИ-помощником (AI Assistant) в MetaTrader 5

MetaTrader 5 — Примеры |
46 0
Automated-Trading
Automated-Trading

Один советник, несколько валютных пар, разные торговые стратегии и единая система управления рисками. Задача выглядит вполне понятной, пока не начинаешь разбираться в деталях.

Представим, что советник одновременно покупает EURUSD и GBPUSD. Формально это две разные сделки, но обе зависят от поведения американского доллара. Если доллар начнёт укрепляться, убытки могут возникнуть сразу по обеим позициям. Поэтому недостаточно просто научить робота торговать несколькими инструментами — нужно учитывать взаимосвязи между ними, распределять риск и контролировать весь портфель.

Разработка такой системы требует знаний MQL5, статистики, архитектуры торговых программ и риск-менеджмента. Но обязательно ли разбираться во всём этом самостоятельно?

Новая эра алготредийнга

Начиная с билда 6060, в MetaTrader 5 и MetaEditor появился встроенный AI Assistant с поддержкой Model Context Protocol (MCP). Теперь искусственный интеллект может участвовать не только в написании кода, но и в его компиляции, исправлении ошибок и тестировании. Это позволяет по-новому организовать разработку даже достаточно сложных торговых систем.

Мы покажем, как использовать эти возможности для создания полноценного мультивалютного советника. Причём не будем заранее задавать все торговые правила — предложим AI самостоятельно подобрать несколько стратегий, исследовать их, объединить в портфельную систему и проверить полученный результат.

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

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

Правильное начало

Начнём не с написания кода, а с организации работы. Если просто попросить AI создать мультивалютного советника, он может самостоятельно придумать торговые правила, выбрать архитектуру и принять множество решений, которые нас не устроят.

Поэтому сразу договоримся: сначала составляем план, каждый следующий этап предварительно обсуждаем, а все существенные действия и результаты сохраняем в журнале разработки. Открываем MetaTrader 5, переходим в раздел чатов и начинаем разговор с AI Assistant. Наш первый запрос будет совсем коротким.

Привет.

Нужно написать советника, но предварительно мы составим план.  Каждый пункт плана мы будем предварительно обсуждать и только после моего одобрения ты будешь его выполнять. 

После нескольких минут размышлений получаем первый ответ:



Как видим, AI Assistant сразу же приступил к делу и предложил готовый детальный План разработки. Но мы немного усилим протокол работы, чтобы у нас осталась строгая техническая история нашей работы.

Мы дадим помощнику первую инструкцию, и она очень детальна. Вы можете написать ее самостоятельно, но гораздо быстрее и лучше написать ее с помощью любой современной модели — ChatGPT, Claude, Gemini и так далее.

Сначала мы обговорим порядок работы.

Начиная с этого сообщения, веди постоянный журнал всех существенных действий над проектом. Журнал необходим для последующего анализа проведенной работы по разработке торговой системы с помощью AI Assistant.

## 1. Файл журнала

Создай файл `DEVELOPMENT_LOG.md` в каталоге проекта MQL5.

Если файл уже существует, прочитай его и продолжи журнал, не удаляя предыдущие записи.

Сохраняй журнал непосредственно на диске, а не только в контексте диалога.

## 2. Что фиксировать

Записывай каждый существенный этап:

- Постановка задачи и уточнение требований.
- Проектирование алгоритмов и архитектуры.
- Создание и изменение исходного кода.
- Добавление новых функций и модулей.
- Компиляция и устранение ошибок.
- Поиск и исправление логических ошибок.
- Запуск тестирования и анализ результатов.
- Оптимизация и улучшение производительности.
- Изменение требований и принятые технические решения.

Не регистрируй каждое незначительное действие. Объединяй связанные операции в логические этапы.

## 3. Учёт времени

Для каждого этапа фиксируй:

- Номер и название этапа.
- Время начала и окончания.
- Продолжительность в минутах и секундах.
- Краткое описание выполненных действий.
- Созданные или изменённые файлы.
- Возникшие проблемы и способы их решения.
- Полученный результат.

Используй локальное время компьютера с указанием часового пояса.

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

Если точное время определить невозможно, укажи «не измерено». Если длительность рассчитана приблизительно, явно обозначь её как оценочную.

Различай:
- Полное прошедшее время этапа, включая ожидание компиляции и тестирования.
- Активное время работы, только если его действительно можно измерить.

## 4. Правила ведения журнала

Перед началом нового значимого этапа запиши его название, цель и время начала.

После завершения этапа сразу дополни запись результатами и временем окончания.

При возникновении ошибки зафиксируй её причину, внесённое исправление и результат повторной проверки.

Если этап не завершён, оставь статус IN PROGRESS. При следующем запуске проверь незавершённые этапы.

Не удаляй записи о неудачных попытках. Они представляют ценность для технической статьи.

Если исправление оказалось неудачным, сохрани это в истории, а не заменяй первоначальный результат.

При каждом новом запросе пользователя сначала проверяй состояние журнала и открытого этапа. После выполнения запроса обновляй журнал до сообщения о завершении работы.

## 5. Формат журнала

В начале файла поддерживай сводку:

- Название проекта.
- Дата начала разработки.
- Текущий статус.
- Количество завершённых этапов.
- Суммарное измеренное время.
- Количество компиляций, ошибок и запусков тестера, если эти данные достоверно известны.

Для каждого этапа используй следующую структуру:

### Этап N. Название

- Начало:
- Окончание:
- Продолжительность:
- Цель:
- Запрос пользователя: краткая суть
- Действия:
- Изменённые файлы:
- Ошибки и исправления:
- Проверка:
- Результат:
- Статус: DONE / IN PROGRESS / FAILED

## 6. Проверка перед завершением ответа

Перед каждым сообщением о завершении значимой работы:

1. Убедись, что журнал обновлён.
2. Проверь наличие фактических результатов компиляции или тестирования, если они выполнялись.
3. Не называй задачу успешно завершённой без соответствующей проверки.
4. Кратко сообщи о результате и записи в журнале.

## 7. Итоговый отчёт

Когда я напишу «Сформируй отчёт о разработке», прочитай весь журнал и подготовь краткий технический отчёт со следующими разделами:

1. Какая задача решалась.
2. Как создавалась архитектура и торговая логика.
3. Основные этапы разработки в хронологическом порядке.
4. Какие ошибки возникли и как AI Assistant их исправлял.
5. Как проводились компиляция, отладка и тестирование.
6. Какие результаты получены.
7. Сколько времени заняла разработка в целом и по основным этапам.
8. Какие ограничения или нерешённые проблемы остались.

Добавь компактную таблицу этапов с их продолжительностью.

Отчёт должен быть фактическим, без рекламных формулировок. Он послужит основой для улучшения процессов разработки роботов на MQL5.com.

## 8. Приоритет инструкции

Считай ведение журнала постоянным рабочим правилом данного проекта. Оно действует на всех последующих этапах до моего явного распоряжения об отключении журналирования.

Если контекст диалога сокращается или начинается новая сессия, восстанавливай историю работы из `DEVELOPMENT_LOG.md`.

Не полагайся на собственную память вместо сохранённого файла.

Сейчас создай журнал, запиши время начала проекта и подтверди, что файл действительно создан на диске. Если нет доступа к файловой системе, сообщи об этом прямо.


AI Assistant сразу же создает Журнал и делает первые записи в нем:



Выбор торговой системы

Современные модели являются огромными энциклопедиями практически во всех областях знаний. Если мы зададим четкие правила для торговли, то в какой-то степени ограничим наши возможности.  Поэтому попросим AI самостоятельно поискать для нас идеи — это будет хорошей отправной точкой.  Наша задача — не  создать с первого раза полностью работающую систему в прибыль, а получить опыт разработки и хороший задел для будущих разработок.  До появления  AI в MetaTrader 5 пройти такой путь можно было за дни или даже недели упорного программирования в редакторе MetaEditor. Сейчас мы можем это сделать прямо из терминала, даже если не имеем опыта работы со средой разработки

Нужно написать советника, который будет торговать по нескольким торговым стратегиям и по нескольким символам одновременно. 

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

Получаем ответ:

Хорошо. Прежде чем углубляться, один критичный технический момент, который влияет на всю архитектуру.

Важно: противоположные позиции по одному инструменту

  • Хеджинговый счёт — можно одновременно держать Buy и Sell по одному символу. Стратегии реально перекрывают друг друга, нетто-экспозиция считается как сумма.
  • Неттинговый счёт — вторая противоположная позиция не открывается отдельно: она уменьшает или переворачивает существующую. "Противоположные позиции по одному инструменту" технически невозможны — только нетто-позиция.

Скажи, какой тип счёта используется (или планируется). От этого зависит, делаем ли мы слой "виртуальных" позиций (учёт стратегий внутри одной нетто-позиции) или используем настоящий хеджинг.


Стратегии-кандидаты (разные идеи → разные режимы рынка)

№ Идея Режим рынка Сигнал входа Выход ТФ
S1 Трендовый пробой канала (Donchian + ATR) Сильный тренд Закрытие бара за границей канала N баров + ADX>20 / цена по сторону от EMA200 SL 2×ATR, TP 3×ATR, трейлинг по каналу H1, H4
S2 Возврат к средней (Bollinger + z-score) Флэт / боковик Закрытие за полосой BB(20,2), z-score < −2, ADX<20 → Buy; зеркально Sell TP к средней, SL за экстремум / 1.5×ATR, закрытие по времени M15, H1
S3 Импульс (MACD + RSI) Тренд средней силы Смена знака гистограммы MACD + RSI пересекает 50, подтверждение закрытием SL 1.5×ATR, TP 2×ATR, безубыток после 1×ATR H1
S4 Сжатие волатильности (BB внутри Keltner) Переход низкая → высокая волатильность Squeeze N баров, затем пробой BB в сторону выхода ATR-стоп, трейлинг H1, H4
S5 Пробой торговой сессии (Opening Range) Внутридневной импульс на открытии Лондона/Нью-Йорка Пробой диапазона первых 30–60 мин + ретест SL за противоположную границу, TP 1–2R, закрытие к концу сессии M5, M15
S6 Относительная стоимость (спред/пары) Отклонение корреляции от нормы z-score спреда двух коррелированных инструментов > 2 → шорт переоценённого / лонг недооценённого Возврат z-score к 0, SL при z

Как они дополняют и "гасят" друг друга

  • S1 vs S2 — противоположные по природе: тренд ловит продолжение, возврат к средней — откат. На одном символе в разных режимах дают естественный хедж.
  • S3 близок к S1 по направлению (продолжение тренда), но входит раньше и без пробоя уровня — нужен приоритет, чтобы не дублировать.
  • S4 реагирует на смену режима, а не на сам тренд — не конфликтует с S1/S2 напрямую.
  • S5 — единственная чисто внутридневная, время-зависимая.
  • S6 использует саму корреляцию как торговый сигнал и лучше всего стыкуется с портфельным контролем экспозиции (лонг одного инструмента / шорт коррелированного).

Рекомендация для первой версии

S1 + S2 + S6 — тренд, возврат к средней и относительная стоимость. Три разных режима, естественные противоположные позиции, прямая связь с корреляционным слоем. S3/S4/S5 — во вторую итерацию, чтобы не раздувать первый релиз.


Слой портфельного риска (набросок, обсудим отдельно)

  1. Риск на сделку — % от эквити → объём через tick value / tick size.
  2. Лимит на символ — максимум нетто-ноционала.
  3. Корреляционные кластеры — rolling-корреляция (60–120 баров), группировка инструментов, лимит экспозиции на кластер.
  4. Общая экспозиция — максимум gross notional и % использования маржи.
  5. Правила конфликта сигналов — приоритеты стратегий, разрешённый/запрещённый хедж, блокировка дублирующих входов.

Что нужно от тебя, чтобы двигаться дальше

  1. Тип счёта: хеджинговый или неттинговый?
  2. Набор инструментов: сколько и какие (например, 7 FX-мажоров + XAUUSD? индексы? крипта?)
  3. Таймфреймы: фиксированные или допускаем мульти-ТФ логику?
  4. Состав первой версии: согласен на S1 + S2 + S6 или хочешь другой набор?
  5. Ограничения: максимальный спред, проскальзывание, торговые часы/сессии?
  6. Валюта депозита и стартовый капитал — для расчётов риска и маржи.

Done.

Changed:
- `MQL5/DEVELOPMENT_LOG.md`: добавлена запись Этапа 2 (выбор стратегий), обновлён текущий статус сводки.

Validation:
- Compilation: Not run — изменений кода нет.
- Проверка файла: журнал прочитан, запись этапа на месте.

Notes:
- Стратегии пока предложены на уровне концепции; конкретные формулы индикаторов, пороги и правила ещё не зафиксированы.
- Требуется решение по типу счёта (хедж/неттинг) — это ключевая развилка архитектуры.
- После выбора стратегий перейдём к Этапу 3: формализация ТЗ и входных параметров.


Как видите, AI задал дополнительные вопросы, он не стал молча собирать советника на свое усмотрение.  Все это благодаря вводному промпту, где мы сразу описали план действий.

Отвечаем ему по списку

Отвечаю по пунктам:
1. Счет хеджинговый
2. Выбери 3 валютные пары с минимальной корреляцией
3. Таймфрейм будем подбирать - от M5 до H1
4. Согласен, но мы будем сначала разрабатывать каждую стратегию отдельно на одном инструменте. Потом будем думать, как собрать вместе стратегии.
5. Это пока не учитываем
6. Валюта депозита - USD. Начальный депозит 3000. 



После 4 минут размышлений получаем ответ. Оцените, сколько времени вам понадобилось бы на проведение этого анализа самостоятельно.  И это при условии, что вы обладаете всеми необходимыми навыками в статистике и программировании. 

За это время AI запросил  необходимую историю по недостающим символам из MarketWatch.

  • Написал скрипт для расчета корреляции.
  • Составил отчет по полученным данным и выбрал символы, которые имеют минимальную взаимную корреляцию.
  • Предложил отложить временно стратегию S6 до этапа 5.

Готово. Зафиксировал решения и выполнил корреляционный анализ по фактическим данным, а не "на глаз".

Зафиксированные вводные

  • Хеджинговый счёт (проверю фактически при первом запуске на счёте).
  • 3 пары с минимальной корреляцией, M5–H1, поэтапная разработка, депозит 3000 USD.
  • Спред/проскальзывание пока не ограничиваем.

Как считалась корреляция

Написан диагностический скрипт CorrelationMatrix.mq5: логарифмические доходности Close, коэффициент Пирсона, D1, 500 баров (2024-12-03 … 2026-11-05), 12 символов. Дополнительно — контрольный прогон на H1/500 (~1 месяц).

Основные значения на D1/500:

Пара corr
AUDUSD – NZDUSD 0.872
EURJPY – GBPJPY 0.841
EURUSD – USDCHF −0.829
EURUSD – GBPUSD 0.809
USDJPY – USDCAD 0.411
EURGBP – GBPJPY −0.375
EURGBP – USDCAD −0.064
GBPJPY – USDCAD −0.026

Лучшие тройки по критерию "минимум максимальной |corr| внутри тройки":

# Тройка max abs corr avg abs corr
1 NZDUSD / EURGBP / EURCHF 0.040 0.022
2 USDCAD / EURGBP / EURCHF 0.089 0.051
3 AUDUSD / EURGBP / EURCHF 0.111 0.059

Выбор: EURGBP + USDCAD + GBPJPY

Пара D1/500 H1/500 Спред (текущий)
EURGBP – USDCAD −0.064 −0.001 1 пункт
GBPJPY – USDCAD −0.026 −0.154 7 пунктов (0.7 пипса)
EURGBP – GBPJPY −0.375 −0.151 —

Почему не чисто статистический минимум (0.040): та тройка — NZDUSD, EURGBP, EURCHF — состоит из однотипно низковолатильных, преимущественно боковых инструментов. Трендовой стратегии (S1) там негде работать, и вся идея "разных состояний рынка" теряется.

Выбранная тройка даёт три разных характера при максимуме |corr| 0.375 (против 0.8+ у классических мажоров):

  • EURGBP — низкая волатильность, боковик → база для S2 (возврат к средней).
  • GBPJPY — высокая волатильность, сильные тренды → база для S1 (трендовый пробой).
  • USDCAD — средняя волатильность, сырьевой драйвер, почти не коррелирует с двумя другими.

Корреляции нестабильны во времени: 0.375 — это текущий режим, а не константа. Поэтому динамический корреляционный слой в портфельной части всё равно понадобится, статической матрицы недостаточно.

Важное следствие для S6

Относительная стоимость по определению торгует коррелированные инструменты (спред). Тройка намеренно некоррелирована, поэтому S6 на ней не запускается. Варианты, которые надо выбрать позже:

  1. добавить 4-й символ (например, коррелированную пару к USDCAD) специально под S6;
  2. реализовать S6 как синтетический спред (например, EURGBP против отношения EURUSD/GBPUSD);
  3. заменить S6 другой одноинструментной стратегией.

Это решение Этапа 5, к нему вернёмся после S1/S2. Пока просто фиксирую, чтобы не было сюрприза.

Изменения в терминале

Символы USDJPY, USDCHF, USDCAD, NZDUSD, EURGBP, EURJPY, GBPJPY, EURCHF, AUDUSD, AUDJPY добавлены в Market Watch (скрыто, без отображения) — иначе терминал не отдавал историю и скрипт зависал. Торговых действий не выполнялось.

Следующий шаг — Этап 4

Предлагаю начать с S1 (трендовый пробой) на GBPJPY: зафиксировать правила входа/выхода, параметры индикаторов, фильтры и подобрать таймфрейм в диапазоне M5–H1 через тестер. Жду подтверждения — код пока не пишу.

Done.

Changed:
- `MQL5/Scripts/DevTools/CorrelationMatrix.mq5`: создан диагностический скрипт матрицы корреляций и рейтинга троек.
- `MQL5/DEVELOPMENT_LOG.md`: закрыт Этап 2, добавлен и закрыт Этап 3 с фактическими результатами.

Validation:
- Compilation: 0 errors, 0 warnings (`CorrelationMatrix.mq5`).
- Скрипт выполнен, результат прочитан из журнала экспертов: 12 символов × 500 дневных баров, все символы — 499–500 баров.

Notes:
- Корреляции зависят от режима рынка; статической матрицы для портфельного слоя недостаточно.
- S6 несовместим с некоррелированной тройкой — нужно решение на Этапе 5.
- Бэктест не гарантирует будущую доходность; результаты тестера будут только проверкой логики.


Выдаем одобрение и AI Assistant продолжает работу.



AI сам пишет код советника, запускает тестирование на разных таймфреймах и делает промежуточный вывод. 


Этап 4 завершён. Ниже — результаты и правила S1.

Подбор таймфрейма (GBPJPY, депозит 3000 USD, 2025-01…2026-10)

Первая версия: канал 20, ADX ≥ 20, EMA200, SL 2×ATR, TP 3×ATR.

ТФ Прибыль PF Просадка Сделок
M5 −2790 0.75 93.3% 3945
M15 −1872 0.75 64.4% 1369
M30 −968 0.80 39.6% 733
H1 −335 0.87 18.5% 360

Метрики монотонно улучшаются с ростом ТФ. H1 — единственный кандидат.

Что дала структурная итерация (H1)

Конфигурация Прибыль PF Просадка Сделок
TP 3×ATR, EMA200, ADX 20 −335 0.87 18.5% 360
Без TP, выход по каналу 10, EMA200, ADX 20 −233 0.88 18.5% 262
Без EMA, ADX 20 −43 0.98 15.4% 314
Без EMA, ADX 25 +166 1.09 10.9% 264
Без EMA, ADX 30 +434 1.32 5.4% 201
Без EMA, ADX 35 +205 1.22 6.9% 145

Два вывода: фиксированный TP действительно "срезал" прибыль, а фильтр EMA200 вредил (запаздывал и отсекал входы).

Проверка вне выборки

Конфигурация ADX 30 дала +434 на 2025–2026, но на 2023–2024 — −289, PF 0.84. Это признак подгонки под период. Полный прогон 2023–2026 с нейтральным ADX 25: −138 USD, PF 0.966, просадка 24.7%, 584 сделки. Модель m1 ohlc дала тот же результат (−138.91) — артефактом тестера это не объясняется.

Итог: у S1 в текущем виде нет подтверждённого статистического преимущества на GBPJPY. Как компонент портфеля она допустима (низкая корреляция с будущими S2/S6), но не готова к реальной торговле.


Правила стратегии S1 v1.0

Инструмент: GBPJPY. Таймфрейм: H1.

Индикаторы: канал Дончиана 20 (вход), канал Дончиана 10 (выход), ATR(14), ADX(14).

Вход (один раз на бар, по закрытому бару; бар 0 — текущий, незакрытый):

  • Покупка: Close[1] > max(High[2..21]) И ADX[1] ≥ 25
  • Продажа: Close[1] < min(Low[2..11]) … точнее min(Low[2..21]) И ADX[1] ≥ 25
  • Канал строится по барам 2…21 — бар сигнала не участвует в своём же уровне пробоя.
  • EMA-фильтр отсутствует (проверен, вреден).

Выход:

  • Стоп-лосс: 2.0 × ATR[1] от цены входа, выставляется сразу.
  • Тейк-профит: отсутствует.
  • Выход по развороту: лонг закрывается при Close[1] < min(Low[2..11]), шорт — при Close[1] > max(High[2..11]).
  • Трейлинг: опционально, по умолчанию выключен; при включении — 1.5 × ATR, шаг улучшения 0.5 × ATR.

Размер позиции:

  • Риск 0.5% эквити на сделку.
  • лот = риск / ((дистанция SL / tick_size) × tick_value), округление вниз до шага объёма, ограничение min/max.
  • Одна позиция на символ+magic; противоположные позиции внутри S1 не открываются.

Защитные проверки: разрешение торговли терминала/счёта/советника, режим символа, стоп-левел, freez-левел при трейлинге, нормализация цен по tick size.

Параметры по умолчанию:

Параметр Значение
InpChannelPeriod 20
InpExitChannelPeriod 10
InpATRPeriod 14
InpADXPeriod 14
InpADXMin 25
InpSL_ATR 2.0
InpTP_ATR 0 (выключен)
InpEMAPeriod 0 (выключен)
InpTrailATR 0 (выключен)
InpRiskPercent 0.5
InpMagic 20261105

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


Следующий шаг — Этап 5: S2 (возврат к средней) на EURGBP. Скажи, продолжать — и я зафиксирую спецификацию S2 перед реализацией.

Done.

Changed:
- `MQL5/Experts/S1_TrendBreakout.mq5`: создан советник S1 (Дончиан, ADX, ATR-стопы, выход по каналу, риск-менеджмент).
- `MQL5/Profiles/Tester/*.ini`, `*.set`: конфигурации и наборы параметров для 14 прогонов.
- `MQL5/DEVELOPMENT_LOG.md`: добавлен и закрыт Этап 4, обновлена сводка.

Validation:
- Compilation: 0 errors, 0 warnings (4 сборки S1).
- Backtests: 14 прогонов, результаты в таблицах выше; вне выборки — отрицательный.

Notes:
- Корреляции и результаты зависят от периода; один прогон не доказывает преимущество.
- ADX 30 (+434) не прошёл проверку вне выборки — использовать как «рабочий» параметр нельзя.
- S1 пригодна только как компонент портфеля; перед реальной торговлей нужна отдельная доработка и форвард-тест.

Выдаем разрешение и просим обосновать выбор EURGBP.

Да, продолжай так же.  Сделай обзор стратегии S2 и обоснуй выбор EURGBP для нее.

На скриншоте видны графики символов, по которым происходило тестирование.



Через несколько минут получаем ответ, в нем дается не только математический расчет, но и упоминаются экономические факторы, которые могут повлиять на торговлю. 

Математики много, чтобы разбираться в ней, нужно провести отдельный разбор в отдельном чате.  Если есть желание.  Но как и обещалось —  AI может вам дать такие идеи, которые вы самостоятельно просто так не найдете.

Предложенная стратегия не гарантирует прибыли, но значительно более продвинута,чем  большинство простых систем, которые строятся на правилах, которые не проходили статистическую проверку.

Этап 5 завершён. Обоснование построено на измерениях, а не на общих словах.

Идея S2 — возврат к средней

S2 играет против растянутого движения в отсутствие тренда: цена отклоняется от локальной средней, статистически склонна возвращаться, а фильтр по ADX отсекает моменты, когда отклонение — это начало тренда, а не шум.

Ключевое отличие от S1:

S1 S2
Состояние рынка тренд, ADX ≥ 25 флэт, ADX < 20
Направление входа по пробою против растяжения
Выход по развороту канала по возврату к средней
Характер редкие крупные прибыли частые небольшие прибыли

Фильтры по ADX у стратегий взаимоисключающие — они не должны одновременно сигналить на одном инструменте. Именно это и даёт "противоположные позиции" при интеграции.

Методика

Написан скрипт RegimeStatistics.mq5: на H1 за 10 000 баров считает средний ADX, долю баров с ADX < 20, автокорреляцию доходностей (лаг 1), variance ratio VR(2/5/10), efficiency ratio (10), ATR и спред.

Смысл метрик:

  • VR < 1 — дисперсия растёт медленнее линейно, движение возвращается (mean reversion); VR > 1 — трендовое.
  • Efficiency ratio — отношение "нетто-движения" к "пройденному пути"; чем ниже, тем более рваное, боковое движение.
  • Доля ADX < 20 — сколько времени инструмент проводит в слабом тренде.

Результаты (H1, 10 000 баров)

Метрика EURGBP GBPJPY USDCAD EURUSD
ADX средний 29.13 29.76 30.37 29.96
Доля ADX < 20, % 23.3 19.3 17.2 19.5
Автокорреляция (лаг 1) −0.0295 −0.0300 −0.0435 −0.0126
VR(2) 0.971 0.970 0.957 0.988
VR(5) 0.931 0.947 0.916 0.958
VR(10) 0.911 0.923 0.918 0.963
Efficiency ratio (10) 0.3073 0.3201 0.3224 0.3272
ATR H1, пунктов 56.8 258.4 115.8 121.7
ATR, % цены 0.0682 0.1214 0.0829 0.1085
Спред, пунктов 2 6 1 1
Спред / ATR, % 3.5 2.3 0.86 0.82

Почему EURGBP

  1. Больше всего времени в боковике — 23.3% баров с ADX < 20 против 17–19.5% у остальных. Это ровно то состояние, в котором S2 имеет право работать.
  2. Самый низкий efficiency ratio (0.3073) — движение наименее прямолинейное, цена чаще возвращается, чем продолжает.
  3. Самый низкий VR(10) = 0.911 — на десятичасовом горизонте отклонение статистически гасится.
  4. Минимальная волатильность — 0.068% цены за час. Для возврата к средней нужен узкий, "пилящий" диапазон, а не широкие амплитуды.
  5. Кросс без доллара — меньше зависимости от фактора USD, что полезно для декорреляции с S1 на GBPJPY.

Честные контраргументы

  • Стоимость сделки. Спред EURGBP = 2 пункта при ATR 56.8 пункта, то есть 3.5% от ATR — худший показатель из четырёх. У USDCAD всего 0.86%. Это значит: цель должна быть не меньше ~0.5–1 ATR, иначе спред съест преимущество. Частый скальпинг на EURGBP противопоказан.
  • USDCAD по части метрик не хуже: автокорреляция −0.0435 и VR(5) 0.916 даже сильнее. Но у него выше ER, ниже доля боковика (больше трендовых эпизодов на нефти и заседаниях Банка Канады), и он зарезервирован под S6.
  • Риск событийных гэпов. Политика ЕС/Великобритании даёт редкие, но широкие разрывы — стоп по ATR может проскальзывать.
  • Затяжной тренд (стресс GBP) — контртрендовая логика будет накапливать убытки, поэтому жёсткий SL и фильтр ADX обязательны.

Предлагаемая спецификация S2 (черновик)

  • Инструмент: EURGBP. ТФ: M15–H1, подбирается тестом.
  • Сигнал: z = (Close − SMA(20)) / StdDev(20).
    • Лонг: z[1] ≤ −2.0 и ADX(14)[1] < 20.
    • Шорт: z[1] ≥ +2.0 и ADX(14)[1] < 20.
  • Цель: SMA(20) на момент входа (z → 0).
  • Стоп: 2.0 × ATR(14) от входа.
  • Выход по времени: закрытие через N баров (24), если ни цель, ни стоп не сработали.
  • Риск: 0.5% эквити; одна позиция на символ+magic.

Жду подтверждения спецификации — после этого реализую S2 по образцу S1: отдельный советник, компиляция, прогон по M15/M30/H1, проверка вне выборки, затем правила.

Done.

Changed:
- `MQL5/Scripts/DevTools/RegimeStatistics.mq5`: создан скрипт измерения режима рынка.
- `MQL5/DEVELOPMENT_LOG.md`: добавлен и закрыт Этап 5, обновлена сводка.

Validation:
- Compilation: 0 errors, 0 warnings.
- Скрипт выполнен на H1/10000 баров по 4 символам, данные прочитаны из журнала экспертов.

Notes:
- Худшее отношение спреда к ATR у EURGBP (3.5%) — главное ограничение; цель меньше 0.5 ATR делать нельзя.
- Метрики режима нестабильны во времени, выбор инструмента подтверждён на текущем периоде и требует перепроверки на других окнах.
- Код стратегии ещё не писался — сначала подтверждение спецификации.

Даем добро на продолжение разработки

Да, продолжай по плану. Создай советника по стратегии S2 и проверь на разных таймфреймах

AI где-то за кулисами пишет код в MetaEditor, мы даже не видим этой работы. Затем запускает написанного советника последовательно на разных таймфреймах в тестере стратегий.




В процессе работы произошел сбой связи с редактором MetaEditor.  После восстановления получены результаты.

Что характерно — AI честно выдает негативный вердикт для стратегии S2 на EURGBP. То есть он не просто пишет код и тестирует, но еще и высказывает критику.

Проверил: компиляция состоялась. Файл MQL5\Experts\S2_MeanReversion.ex5 появился (45 014 байт, время сборки 18:07:40), терминал читает его метаданные (version 1.00, compiler build 6296, 19 параметров, 15 входных) и запускает в тестере. Инструменты metaeditor5__* в сессии так и не зарегистрировались, поэтому текст компилятора и предупреждения я не видел — успешность сборки подтверждена по факту наличия и работоспособности файла.ex5.

Прогнал все 5 запланированных конфигураций (EURGBP, депозит 3000 USD, плечо 1:100, модель "open prices", риск 0.5%, параметры по умолчанию):

ТФ Период Сделок Прибыль, USD PF Просадка по балансу
M5 2025.01.01–2026.10.01 1157 −2328.85 0.4196 77.82%
M15 2025.01.01–2026.10.01 412 −694.27 0.7010 30.70%
M30 2025.01.01–2026.10.01 284 −150.33 0.9119 12.08%
H1 2025.01.01–2026.10.01 170 +88.79 1.0973 7.10%
H1 out-of-sample 2023.01.01–2024.12.31 194 −43.96 0.9624 5.08%
H1 полный 2023.01.01–2026.10.01 367 +52.10 1.0249 7.30%

Вывод по S2 — преимущество не подтверждено.

  • Таймфрейм работает как фильтр издержек: M5 → M15 → M30 → H1 дают PF 0.42 → 0.70 → 0.91 → 1.10. Смысл простой: при ATR EURGBP 56.8 пункта (H1) и спреде ~2 пункта любая цель меньше 0.5×ATR съедается спредом; на M5 сделок 1157, и каждая платит за вход/выход.
  • H1 в выборке 2025–2026 положителен, но OOS 2023–2024 отрицателен, а полный прогон даёт +52 USD прибыли при 367 сделках — это шум, а не край. Наблюдение то же, что и с S1: параметры подбирать под положительный участок не буду, иначе получим подгонку.
  • Подгонка параметров не выполнялась; 0.5 ATR как минимум цели сработал как защита от скальпинга, но это лишь отсрочка, а не преимущество.

Журнал обновлён: добавлен подраздел "Этап 6. Компиляция и прогоны тестера" (18:08:00–18:09:13, 5 прогонов, таблица результатов, вывод), Этап 6 закрыт как DONE, попытка 2 помечена SUPERSEDED. В сводке: завершённых этапов 6, компиляций 8, запусков тестера 19, суммарное время 21 ч 00 мин 48 с.

Варианты дальнейших действий по S2 (нужно ваше решение):

  1. Проверить ту же логику на USDCAD и GBPJPY — у них спред/ATR в 3–4 раза лучше, и если идея "возврата к средней" работоспособна, то проявится там, а не на EURGBP. Это ~2 прогона на H1 + OOS.
  2. Ограничить входы условием z ≥ 2.5 и целью строго на среднюю без частичных выходов, добавив фильтр по волатильности; проверить, растёт ли PF устойчиво на обоих периодах.
  3. Признать S2 непригодной в текущем виде и перейти к Этапу 7 (S6 / интеграция), оставив S2 в портфеле только как кандидат с нулевым весом.

Рекомендую пункт 1 — он дешевле всего отделяет "плохую идею" от "плохого инструмента".


Соглашаемся на дополнительные проверки

Да, проверь на 2-х остальных символах  USDCAD и GBPJPY.


В процессе тестирования видим обнадеживающий график по GBPJPY на H1.



Но вердикт AI неутешителен:

Проверил. Итог: переворот знака у всех трёх инструментов — устойчивости нет.

Все прогоны H1, параметры S2 по умолчанию (z-entry 2.0, ADX<20, SL 2×ATR, тайм-стоп 24 бара), риск 0.5%, без подгонки:

Символ 2025–2026 PF 2023–2024 (OOS) PF 2023–2026 (полный) PF Сделок Просадка
EURGBP +88.79 1.0973 −43.96 0.9624 +52.10 1.0249 367 7.30%
USDCAD −67.65 0.9106 +306.31 1.3261 +249.30 1.1401 278 5.37%
GBPJPY +107.37 1.1682 −51.44 0.9345 +58.51 1.0415 257 3.91%

Что из этого следует

  • На всех трёх символах знак прибыли меняется при смене периода: EURGBP и GBPJPY плюс в 2025–2026 и минус в 2023–2024, USDCAD — ровно наоборот (минус в недавнем, PF 1.33 в OOS). Совпадения знака на двух периодах нет ни у одного инструмента.
  • Полные прогоны 2023–2026 у всех трёх положительны, но это PF 1.02–1.14 при 257–367 сделках и ожидаемым результатом +0.14…+0.90 USD на сделку — статистически неотличимо от нуля. Итог определяется тем, какое окно данных сильнее повлияло, а не свойством инструмента.
  • Гипотеза "идея рабочая, инструмент плохой" не подтвердилась: EURGBP с худшим спредом/ATR дал результат не хуже USDCAD с лучшим. Значит, дело не в инструменте и не в таймфрейме, а в самой логике: вход по экстремуму z-score на закрытом баре не даёт достаточного смещения относительно издержек.
  • Ограничения честно: модель "open prices", без проскальзывания и комиссии; при переходе на реальные тики результат S2 скорее ухудшится, так как она торгует часто и против движения.

Журнал обновлён: добавлен подраздел "Этап 6. Расширенная проверка S2 на USDCAD и GBPJPY" (18:21:00–18:22:19, 6 прогонов, таблица по трём символам, вывод), обновлены сводка (запусков тестера 25, суммарное время 21 ч 02 мин 07 с) и текущий статус. Созданы 6 конфигураций S2_USDCAD_H1*.ini, S2_GBPJPY_H1*.ini.

Варианты дальнейших действий (нужно ваше решение):

  1. Закрыть S2 как самостоятельную стратегию. Зафиксировать правила S2 в журнале в виде "спецификация + причина отказа", вес 0 в портфеле, и перейти к Этапу 7 (S6 / интеграция). Быстро и честно.
  2. Одна контролируемая попытка улучшить S2 без подгонки: z-entry 2.5, вход только при расширяющемся ATR, цель на среднюю + фиксированный перевод в безубыток; проверить на всех трёх символах и двух периодах одним набором параметров. Это ~9 прогонов и проверка, растёт ли PF согласованно.
  3. Сменить концепцию S2 на "возврат после ложного пробоя полосы" (вход по факту возврата внутрь полосы, а не по касанию), что убирает вход против движения на тренде.

Рекомендую пункт 1, а улучшения (2–3) отложить до сборки портфеля: сейчас в активе только S1 и S2, и обе не подтверждены — важнее понять, есть ли у нас вообще рабочая стратегия, до траты усилий на её донастройку.

Не будем спорить, скорей всего AI прав, поэтому временно отказываемся от стратегии S2 и переходим к этапу 7 — разработке S6 и интеграции полученных стратегий.

Хорошо, вариант 1.  И продолжай по плану этап 7.


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

Записал решение по S2 и начал Этап 7.

1. S2 закрыта (вариант 1)

В журнал добавлен раздел "S2. Правила стратегии (итоговая спецификация и причина отказа)": полные правила (z ≥ 2 по BB(20,2), σ от полос, ADX(14)<20, цель — средняя линия с минимумом 0.5×ATR, стоп 2×ATR, тайм-стоп 24 бара, риск 0.5%, Magic 20261106) и количественная причина отказа — таблица всех 9 прогонов и вывод, что знак результата переворачивается при смене периода на всех трёх инструментах. Вес S2 в портфеле — 0.

2. Этап 7 начат: чем заменить некоррелированную тройку для S6

Из трёх вариантов выбран "четвёртый коррелированный инструмент — торговая пара": синтетический спред внутри одного символа тестером не проверить, а пара из двух реальных ордеров проверяется полностью и соответствует вашему хеджинговому счёту. Кандидаты взяты из измерений Этапа 3: EURUSD/GBPUSD (|corr| 0.809), AUDUSD/NZDUSD (0.872), EURUSD/USDCHF (−0.829), EURJPY/GBPJPY (0.841), плюс EURGBP/EURCHF.

Создан скрининг-скрипт MQL5\Scripts\DevTools\SpreadScreening.mq5 (10 228 байт, только чтение данных, ничего не торгует). По каждой паре он считает:

  • корреляцию лог-доходностей на всей выборке и отдельно на двух половинах (проверка, что связь не развалилась со временем);
  • OLS-бету для хеджированного отношения;
  • лог-спред отношения, его AR(1)-персистентность и half-life возврата;
  • долю баров с |z| ≥ 2 и средний возврат спреда через 1/3/5/10/20 баров после события (в единицах стандартного отклонения);
  • издержки двух ног в тех же единицах и отношение cost_to_sd.

Критерий отбора пары для S6 (закладываю заранее, чтобы не подгонять после): устойчивая корреляция на обеих половинах, half-life 5–50 баров, cost_to_sd < 0.25, положительный возврат на горизонтах 5–20 баров.

Блокирующий момент: компилятора metaeditor5 в сессии так и нет ( compile_file недоступен), поэтому скрипт пока не собран. Прошу один раз нажать F7 в MetaEditor для Scripts\DevTools\SpreadScreening.mq5 — дальше я сам запущу его через график, прочитаю вывод из журнала экспертов и выберу пару.

Дальнейшие подэтапы Этапа 7 (жду согласования после скрининга):

  1. 7.2 Спецификация S6: вход по z-отклонению хеджированного спреда, выход по возврату к среднему, стоп по дальнейшему расширению спреда, лимит времени, ограничение на "полураспад" — и обязательное правило: не более одной открытой пары и контроль, что обе ноги открыты/закрыты синхронно.
  2. 7.3 Советник S6_RelativeValue.mq5: две ноги, расчёт объёма второй ноги от беты и tick value, суммарный риск на сделку ≤ 1% эквити, Magic на каждую ногу, защита от разрыва одной ноги.
  3. 7.4 Тесты: M15 и H1, 2025–2026, затем OOS 2023–2024 и полный период; критерий успеха — прибыль в обоих периодах и cost_to_sd в тесте не хуже измеренного.

Если F7 недоступен — скажите, и я подготовлю вариант "портфельная оболочка раньше S6": соберу мультисимвольный каркас с корреляционным слоем и лимитами экспозиции, куда S6 добавляется позже как модуль.

Переходим в MetaEditor и жмем F7

Скрипт скомпилирован, продолжай.

Тут внезапно связь с MetaEditor восстанавливается и AI продолжает 

Нашёл дефект в собственной метрике (сумма вместо среднего и учёт перекрывающихся баров) — исправляю скрипт и перезапускаю.

Этап 7 закрыт. S6 отклонена по заранее заданным критериям — обоснование количественное.

Сначала важное операционное: инструменты metaeditor5 снова доступны, поэтому я компилировал сам — SpreadScreening.mq5 собран 0 ошибок, 0 предупреждений (build 6296, AVX2), дальнейшая итерация больше не требует F7.

Что измерено (13 замеров: 5 пар × H4/H1, 4 пары × D1)

Пара ТФ corr (полная / старая / новая половина) β φ (AR1) half-life rev20
EURUSD/GBPUSD H4 0.803 / 0.809 / 0.797 0.780 0.9987 521 бар 0.31 sd
EURUSD/USDCHF H4 −0.746 / −0.675 / −0.812 −0.668 0.9952 146 бар 0.52 sd
EURJPY/GBPJPY H4 0.874 / 0.901 / 0.823 0.825 0.9987 536 бар 0.30 sd
AUDUSD/NZDUSD H4 0.872 / 0.890 / 0.854 0.859 1.0000 не стационарен 0.15 sd
EURGBP/EURCHF H4 0.118 / 0.158 / 0.073 0.099 0.9979 336 бар 0.37 sd
EURUSD/GBPUSD H1 0.839 / 0.849 / 0.827 0.769 1.0001 не стационарен 0.18 sd
EURUSD/USDCHF H1 −0.804 / −0.822 / −0.780 −0.650 0.9989 628 бар 0.29 sd
EURUSD/GBPUSD D1 0.711 / 0.656 / 0.807 0.590 0.9935 106 дней 0.66 sd
EURJPY/GBPJPY D1 0.773 / 0.690 / 0.873 0.674 0.9972 243 дня 0.35 sd
AUDUSD/NZDUSD D1 0.883 / 0.898 / 0.865 0.884 0.9989 604 дня 0.47 sd

Вывод

  • На H1 и H4 φ = 0.9985–1.0001: спред хеджированного отношения — практически случайное блуждание, half-life 146 баров и больше. Классическая z-score относительная стоимость на внутридневных ТФ статистической основы не имеет.
  • Издержки при этом не виноваты: cost_to_sd ≤ 0.003 — две ноги стоят ничтожно мало относительно разброса спреда. Ограничитель — отсутствие возврата, а не стоимость.
  • На D1 возврат появляется, но half-life 106–604 дня, то есть удержание неделями и месяцами, плюс корреляция нестабильна по половинам (0.656 против 0.807). Это другой продукт — позиционная пара, вне согласованного диапазона M5–H1.
  • Советник S6 не создавался осознанно: ни одна пара не прошла фильтр, писать его означало бы гарантированно тестировать заведомо нерабочую конструкцию.

Ошибки, найденные и исправленные по ходу

  1. В версии 1.00 метрика возврата считалась суммой без деления на число наблюдений и учитывала каждый бар эпизода, а не только новое пересечение порога — давала −13 sd (бессмыслица). Исправлено: усреднение по горизонтам + учёт только перехода "вне порога → внутрь".
  2. MathSign в MQL5 отсутствует ( undeclared identifier ), заменено явным условием.
  3. Проверка beta <= 0.05 отбрасывала обратно коррелированные пары (EURUSD/USDCHF), заменено на модуль β.
  4. Для D1 не было истории по USDCHF/EURJPY/EURGBP/EURCHF/NZDUSD ( CopyClose → −1) — подкачал дневные бары, замеры выполнились.
  5. Честно фиксирую инцидент: моя перезапись SpreadScreening.mq5 затёрла вашу ручную правку (ту самую замену MathSign ). Правка восстановлена в явном виде, разница нулевая по смыслу.

Журнал: Этап 7 записан полностью (18:27:00–18:45:54, 18 мин 54 с, таблица замеров, все пять ошибок, вывод), статус DONE. В сводке: завершённых этапов 7, компиляций 9, суммарное время 21 ч 22 мин 56 с.

Этап 8 — нужно ваше решение. Сейчас у нас ноль подтверждённых стратегий, и это главный факт. Варианты:

  1. 8A — портфельный каркас. Мультисимвольный EA: реестр стратегий-модулей, риск на сделку, лимит на символ, корреляционные кластеры (rolling), gross notional и % маржи, приоритеты при конфликте сигналов. Инженерная база под всё дальнейшее; S1/S2 подключаются с весом 0 до появления преимущества. Это то, что вы заказывали как продукт.
  2. 8B — сначала найти преимущество. Серия быстрых, заранее зафиксированных гипотез на H1/D1 по нашей тройке (сессионный пробой, дневной диапазон, моментум по закрытию дня), каждая — с обязательной проверкой OOS и без подбора периода. Только после этого — каркас.
  3. 8C — вернуть S6 в дневном горизонте (EURUSD/GBPUSD, half-life ~106 дней): честно предупреждаю, что это месяцы удержания и слабая устойчивость связи.

Рекомендую 8B → 8A: каркас, наполненный стратегиями без преимущества, даст красивую архитектуру и нулевую доходность, а статья от этого проиграет.

В этой статье не ставится цель написать прибыльную стратегию, поэтому просим просто собрать работающий вариант, даже если у нас нет торгового преимущества.

Возьми в работу S1,S2 и S6, как если бы они были прибыльными и продолжим создание мультисимвольного советника.

По журналу тестера видим, что терминал закачивает необходимую историю по трем символам и начинает тестирование собранного советника.



По окончании AI Assistant пишет отчет:

Готово. Мультисимвольный советник собран, компилируется и все три модуля реально торгуют в одном прогоне.

Изменено

  • MQL5/Include/Portfolio/PortfolioStrategies.mqh — добавлены объявление и реализация CStrategyPairValue::EnsureHandles() (ленивое создание m_hATRA / m_hATRB при INVALID_HANDLE ), Atr() повторяет попытку создания хендла, осиротевший блок { Print(); return false; } в Init заменён корректной проверкой с предупреждением.
  • MQL5/Include/Portfolio/PortfolioCore.mqh — новая функция MinLotIfZero(): возвращает минимальный лот символа, когда расчётный по риску лот округлился в ноль.
  • MQL5/Experts/Portfolio_MultiStrategy.mq5 — новый вход InpAllowMinLot (по умолчанию true ): нога S6 открывается минимальным лотом с записью в журнал вместо отказа; лимиты проверяются по фактическому риску через PositionRiskMoney(); удалён пустой блок if(PositionSelectByTicket(...)) {} в ProcessPair.
  • MQL5/Profiles/Tester/PORT_GBPJPY_H1_M1.ini — конфигурация с Model=1 (1 minute OHLC) для прогонов с S6.
  • MQL5/Profiles/Tester/PORT_all.set — набор параметров с включёнными S1/S2/S6.
  • MQL5/DEVELOPMENT_LOG.md — добавлена запись Этапа 8, обновлена сводка (8 этапов, 14 компиляций, 31 запуск тестера, ≈22 ч 08 мин).

Проверка

  • Компиляция Portfolio_MultiStrategy.mq5: 0 ошибок, 0 предупреждений.
  • Прогон GBPJPY H1, 2025.01.01–2026.10.01, депозит 3000 USD, плечо 1:100:
Конфигурация Модель Прибыль PF Сделок Просадка (balance)
S1 + S2 (S6 off) open prices +223.93 1.0834 432 13.18%
S1 + S2 (S6 off) 1 min OHLC +223.70 1.0833 432 13.19%
S1 + S2 + S6 1 min OHLC +205.69 1.0710 460 13.68%
  • В журнале тестера подтверждены 8 парных входов S6 (2025.10.29, 11.04, 11.13, 2026.01.26, 01.29, 03.09, 06.23, 07.15), магики 20263107 / 20263108, лот 0.01 на ногу, SL по 3×ATR D1.

Замечания

  • Устранены три технических блокера: запрос истории внешних символов в OnInit (error 5570642), несуществующий EnsureHandles() после незавершённой правки, нулевой лот S6 из-за стопа 3×ATR на дневном горизонте.
  • Режим Model=2 (open prices) не поддерживает чужие таймфреймы внешних символов — для S6 нужен Model=1 (или символ графика EURUSD). Это ограничение тестера, не кода.
  • Вклад S6 в этом выборке отрицательный (−18 USD, +28 ног). Это ожидаемо: модуль работает "по предположению", а скрининг Этапа 7 показывал отсутствие подтверждённого возврата спреда на H1–H4. Код реализует заданную логику, но не даёт гарантии прибыли; один бэктест доказательством не является.
  • Далее по плану жду согласования: (1) балансировка весов модулей и лимитов риска, (2) OOS-прогон 2023–2024 для портфеля, (3) решение по S6 (дневной горизонт против согласованных M5–H1).

AI задает много вопросов, которые могут затянуть создание прототипа.  Поэтому прошу его разобраться самостоятельно и дать объяснения по возникшим вопросам после их решения.

Проведи все необходимые действия и напиши мне отчет по этим 3-м вопросам, чтобы я понимал.

Одно из преимуществ разработки торговой стратегии вместе со встроенным AI в MetaTrader 5, это то, что можно наблюдать за ходом рассуждения модели. Данный процесс сам по себе является интересным и может принести новые знания и идеи для алготрейдера. 


Тем временем процесс идет и мы видим, как AI тестирует советника.


За 4 минут AI провел 15 одиночных тестирований на GBPJPY и выдал результат:

Отчёт по трём вопросам

Отчёт по результатам 10 новых прогонов тестера (полное окно 2023–2026, вне выборки 2023–2024, окно 2025–2026, варианты весов и лимитов, пофакторное разложение S1/S2). Код советника не менялся — компиляция не требовалась.

Что сделано

  • Созданы конфигурации: PORT_OOS_2023_2024.ini (2023.01.01–2024.12.31), PORT_FULL_M1.ini (2023.01.01–2026.10.01), обе — GBPJPY H1, Model=1 (1 minute OHLC), 3000 USD, 1:100.
  • Созданы наборы параметров: PORT_w035.set (0.35/0.35/0.35), PORT_mix.set (0.5/0.35/0.25), PORT_tight.set (кластер 1.0%, портфель 2.0%, gross 200%), PORT_w035_noS6.set, PORT_S1only.set, PORT_S2only.set.
  • Выполнено 10 прогонов; запись этапа внесена в MQL5/DEVELOPMENT_LOG.md (21 мин 56 с, 11:23:00–11:44:56 UTC+02:00).

1. Балансировка весов модулей и лимитов риска

Полное окно 2023.01.01–2026.10.01 (23 275 баров, 5 550 404 тика):

Конфигурация Прибыль, USD PF Сделок Просадка (balance) Sharpe
S1 0.35% отдельно +30.13 1.0112 575 14.28% 0.06
S2 0.35% отдельно +35.22 1.0252 367 5.02% 0.31
S1+S2 (0.35/0.35) +78.70 1.0192 942 14.84% 0.13
S1+S2+S6 (0.35/0.35/0.35) +90.77 1.0203 990 14.74% 0.14
S1 0.5 / S2 0.35 / S6 0.25 +17.64 1.0030 993 21.74% 0.02
0.5/0.5/0.5 (прежний базовый) +30.59 1.0047 993 22.80% 0.03
0.5/0.5/0.5, лимиты 1.0/2.0/200 +32.51 1.0051 985 22.69% 0.04
0.5/0.5/0.5 без S6 +18.52 1.0031 946 22.98% 0.02

Выводы по пункту 1:

  1. Лимиты риска не связывают. Ужесточение (кластер 1.5%→1.0%, портфель 3%→2%, gross 300%→200%) дало +32.51 против +30.59 — в пределах шума. Причина: фактические объёмы малы — margin level в прогонах 780–1170% при пороге 300%, так что ни маржинальный, ни экспозиционный лимит не достигаются.
  2. Единственное реально связывающее ограничение — минимальный лот 0.01. В журнале: Portfolio: S6 blocked on EURUSD: cluster cap 0.00 + 48.55 > 43.46 и Portfolio: lot is zero for GBPJPY risk=10.19. То есть на депозите 3000 USD заявленные проценты риска не исполняются: S6 получает фиксированные 1.6% на пару (вместо 0.35%), а S1 часть сигналов пропускает вовсе.
  3. Веса не определяют результат. Все варианты лежат в коридоре PF 1.003–1.026; разброс прибыли (+17.64 … +90.77 USD) меньше одного среднего убытка портфеля. Устойчиво воспроизводится только просадка: 0.35% даёт ~15% вместо ~23% — это масштабирование риска, а не улучшение стратегии.
  4. Пофакторно S2 выглядит лучше S1 (просадка 5.0% против 14.3% при близкой прибыли), но в проверке вне выборки S2 хуже по PF (0.9397 против 0.9706). Оснований давать модулям разные веса нет.

Предлагаемая конфигурация: равные 0.35% на модуль (S1, S2), S6 — выключить (см. п. 3). Лимиты оставить как аварийный потолок (кластер 1.5%, портфель 3%, gross 300%, margin 300%), но понимать, что при депозите 3000 USD они не работают: реальный ограничитель — минимальный лот.


2. Прогон вне выборки 2023–2024

Конфигурация 2023–2024 (OOS) PF Сделок Просадка 2025–2026 (IS) PF
S1 0.35% отдельно −44.26 0.9706 315 9.79% — —
S2 0.35% отдельно −47.62 0.9397 194 3.79% — —
S1+S2 (0.35/0.35) −92.48 0.9603 509 10.06% — —
S1+S2+S6 (0.35) −56.21 0.9771 529 9.21% +115.47 1.0570
0.5/0.5/0.5 (прежний) −133.77 0.9632 530 14.86% +205.69 1.0710
0.5/0.5/0.5 без S6 −178.49 0.9492 511 15.87% — —

Выводы по пункту 2:

  1. В 2023–2024 убыточны оба рабочих модуля по отдельности (−44.26 и −47.62 USD). Разложение не оставляет вариантов: это не "один плохой модуль", а отсутствие преимущества.
  2. Плюс полного окна (PF ≈ 1.005–1.02) целиком создан окном 2025–2026 — то есть тем периодом, на котором конфигурации подбирались. Это классическая картина подгонки: +115…+205 USD на подборе, минус на независимых данных, ноль в сумме.
  3. Портфель не готов к реальной торговле. PF 1.00–1.02 при 990 сделках — ниже уровня, необходимого для покрытия комиссии и проскальзывания (они пока не учитывались, спред учитывается историей), а просадка 15% при нулевой доходности. Прибыльность S1 и S2 "по предположению" не подтвердилась.

3. Решение по S6

Факты:

Критерий Значение Проблема
Горизонт возврата спреда D1: half-life 106–604 дня; H1/H4: φ = 0.9985–1.0001 (не стационарен) выходит за согласованные M5–H1
Фактический риск на пару 48.55 USD = 1.6% эквити (мин. лот 0.01, стоп 3×ATR D1) в 3–4 раза выше заданного веса; InpS6RiskPercent не работает
Кластерный лимит 1.5% → при эквити < ~3200 USD S6 блокируется вход отключается в просадке, т.е. именно тогда, когда нужен
Вклад в результат 2023–2024: +36…+45 USD, 2025–2026: −18 USD, 2023–2026: +12 USD знак и величина — в пределах шума

Предлагаемое решение: вывести S6 из рабочей конфигурации ( InpS6Enabled=false, вес 0), код модуля сохранить как экспериментальный. Обоснование: он нарушает согласованный диапазон таймфреймов, его вес не масштабируется на депозите 3000 USD (параметр риска фактически отключён), и его вклад статистически неотличим от нуля.

Условия возврата к S6:

  • депозит от ~10 000 USD (48.55 / 0.005 ≈ 9 700 USD) — тогда минимальный лот начинает соответствовать весу 0.5% и появляется смысл в параметре риска;
  • либо отдельное согласование дневного/недельного горизонта с удержанием позиции месяцами (это уже другая стратегия по характеру, не внутридневной портфель);
  • либо новая идея для H1: раз спред на H1 ведёт себя как случайное блуждание, "возврат к средней" на нём невозможен, но пробой спреда (ставка на продолжение расхождения) — проверяемая гипотеза. Это отдельный исследовательский этап, не текущая S6.

Что предлагаю дальше (нужно ваше решение)

  1. Зафиксировать рабочую конфигурацию: S1 0.35% (GBPJPY H1) + S2 0.35% (EURGBP H1), S6 выключить; оформить как "эталон" и занести в журнал.
  2. Признать текущий результат: портфельная оболочка работает (мультисимвольность, корреляционные кластеры, лимиты, хеджированные пары, минимальный лот), но подтверждённого преимущества у стратегий нет. Это честный итог, и его лучше зафиксировать, чем дорабатывать "для отчётности".
  3. Продолжить поиск преимущества (Этап 9) с жёстким правилом приёмки: конфигурация принимается только если положительна и в 2023–2024, и в 2025–2026. Кандидаты: (а) смена фильтра режима у S1 по волатильности, а не по ADX; (б) перенос S2 на инструмент с лучшим отношением спред/ATR (USDCAD: 0.9% против 3.5% у EURGBP); (в) пробой спреда пары как новая S6.
  4. Либо остановиться на инженерии: довести советник как каркас (лимиты по числу позиций на модуль, де-рискинг по эквити, контроль исполнения), без претензии на прибыльность.

Скажите, какой из пунктов брать — или что изменить в предложенной конфигурации.

Оговорки

  • Все прогоны — Model=1 (1 minute OHLC), приближённое моделирование; спред берётся из истории, комиссия и свопы не моделировались. Реальный PF будет ниже измеренного, поэтому 1.00–1.02 — это не "ноль", а минус.
  • Один бэктест не доказывает прибыльность; результаты выше показывают скорее отсутствие преимущества, чем его наличие.

Что показательно — AI не только прогоняет советника в тестере, но и дает критическую оценку самой стратегии. Немногие трейдеры могут так трезво и безжалостно относиться к своей стратегии. Это еще один большой плюс для AI-разработки торгового робота.

AI ждет нашего решения для продолжения работы. Но сначала мы немного почистим терминал — закроем все лишние графики.

Закрой все графики, которые остались после тестирования.



Теперь можно продолжать. 

По твоим оставшимся вопросам.  
1. Зафиксировать
2. Признать текущий результат
3. Не нужно больше искать преимущество
4. Довести советника как каркас без претензии на прибыльность.

Нам нужно получить результат — работающего советника.  Поэтому прекращаем поиск прибыльных вариантов.



Отчет по последнему этапу включает в себя и найденные в коде ошибки. AI сам их сделал, сам нашел и исправил.  Это говорит нам о том, что после завершения разработки необходимо в обязательном порядке открыть новый чат и сделать полную ревизию кода.  Наверняка будут найдены новые алгоритмические ошибки. В текущем чате лучше этого не делать, так как обычно контекст данного чата уже слишком большой и это затруднит работу для AI. 

Хорошее правило — результат работы одного агента всегда проверять другим агентом. В MetaTrader 5 для этого достаточно начать новый чат, в котором мы начинаем общение с AI с чистого листа.

Готово. Этап 9 закрыт, журнал обновлён.

Что зафиксировано

Эталонная конфигурация (создан MQL5/Profiles/Tester/PORT_frozen.set, 4 316 байт):

Модуль Инструмент ТФ Риск Статус
S1 Breakout GBPJPY H1 0.35% включён
S2 Mean Reversion EURGBP H1 0.35% включён
S6 Pair Value EURUSD/GBPUSD D1 — выключен

Лимиты: символ 2.00%, кластер 1.50%, портфель 3.00%, gross notional 300%, margin level ≥ 300%, де-рискинг при просадке 20%, перерасход минимального лота ≤ 3×.

Советник Portfolio_MultiStrategy.mq5 переведён в версию 1.10: в заголовке и в стартовых сообщениях прямо заявлено STATUS: RISK FRAMEWORK, NOT A PROFITABLE SYSTEM, с фактическими результатами модулей.

Устранённые дефекты риск-слоя

  1. Лимит на символ использовал не тот параметр — проверка опиралась на m_totalRiskPct (3%), теперь на m_symbolRiskPct (2%). Это была ошибка, из-за которой лимит на символ фактически не ограничивал.
  2. Безлимитное поднятие лота до минимума — MinLotIfZero() подставлял 0.01 без проверки денежного риска (S6 получала фиксированные ~1.6% вместо 0.35%). Заменено на LotFromRiskWithFloor(): минимальный лот допускается только если его риск ≤ 3× бюджета, иначе сетап пропускается с записью в журнал. Для S6 пара теперь пропускается, а не пересчитывается.
  3. Отсутствовал де-рискинг — добавлены UpdateEquityPeak(), EquityDrawdownPct() и проверка в начале CanOpen(): новые входы блокируются при просадке эквити выше 20%.
  4. Символы S6 попадали в universe при выключенной S6 — цикл SymbolSelect теперь ограничен (InpS6Enabled? 2: 0).
  5. Хрупкая арифметика по magic — добавлен StratIdFromMagic(); в OnDeinit добавлен отчёт риск-слоя.

Полученные числа

Прогон Прибыль PF Сделок Просадка (balance) Sharpe
Полное окно 2023–2026, PORT_frozen.set +76.15 USD 1.0186 947 484.53 (15.03%) 0.1292
Вне выборки 2023–2024, PORT_frozen.set −107.04 USD 0.9545 512 10.43% −0.3422

Для сравнения: прежняя конфигурация S1+S2 0.35/0.35 давала +78.70 / PF 1.0192 / 942 сделки и −92.48 / PF 0.9603 / 509 сделок. Новые предохранители результат не изменили (разница −2.55 USD на полном окне, −14.56 USD вне выборки — за счёт трёх сделок, разрешённых минимальным лотом).

Лимиты не связывают: margin level 1 140–1 588% при пороге 300%, де-рискинг 20% ни разу не сработал. Единственное реально связывающее ограничение — минимальный лот, и теперь он ограничен по перерасходу.

Расхождение снято

Строка S1=GBPJPY 0.50% в журнале относилась к другому прогону (13:38:50, набор PORT_tight с 0.50%), а не к эталонному. Прогон с PORT_frozen.set (13:39:16) печатает S1=GBPJPY 0.35%; повторный прогон подтвердил применение набора.

Журнал

MQL5/DEVELOPMENT_LOG.md: добавлена запись "Этап 9. Советник как каркас без претензии на прибыльность" (строка 282), обновлена сводка — этапов 9, время ≈ 22 ч 55 мин, компиляций 15, запусков тестера 45.

Done.

Changed:
- MQL5/DEVELOPMENT_LOG.md: запись Этапа 9, обновлённая сводка.

Validation:
- Compilation: 0 errors, 0 warnings (729 ms, AVX2 + FMA3).
- Прогоны: полное окно 2023–2026 (+76.15, PF 1.0186, 947 сделок) и вне выборки 2023–2024 (−107.04, PF 0.9545, 512 сделок).

Notes:
- Каркас корректен, но преимущества нет: оба окна показывают отсутствие подтверждённого edge, и вне выборки результат убыточен. Никаких обещаний прибыльности.
- Один прогон тестера — не доказательство прибыльности; цифры выше носят диагностический характер.

Что осталось за рамками: если нужно, могу подготовить финальный технический отчёт по всему журналу по запросу "Сформируй отчёт о разработке".

На этом задачу по созданию мультивалютного советника будем считать завершенной в первом приближении. Попросим AI-ассиcтента сделать отчет о проделанной работе и предложить направления дальнейшего развития для следующего чата.

Да, давай финальный отчет. Включи в него также предложения по развитию полученного результата. Что можно еще сделать для улучшения, какие стратегии можно рассмотреть и какие исследования провести на эту тему. 

Отчет готов, и его чтение само по себе увлекательно.  Он раскрывает такие детали, о которых мы обычно и не думаем при разработке стратегий.

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

Но в любом случае, мы получили несколько важных уроков:

  1. Разработка с AI очень эффективна по времени — даже ручные запуски тестирования стратегий заняло бы бы значительное время, не говоря уже о написании кода.
  2. Встроенный ассистент сам находит ошибки и предлагает варианты продвижения по проекту.
  3. AI является экспертом в огромном количестве областей, что позволяет нам расширить собственные горизонты в алготрейдинге.
  4. Правильная постановка задачи для агента позволяет вести разработку строго по плану и получить финальный отчет для дальнейшей работы.
Отчёт о разработке (финальный)

1. Паспорт проекта

Параметр Значение
Начало 2026-11-04 18:02:55 (UTC+02:00)
Окончание фиксации 2026-11-09 13:45:18 (UTC+02:00)
Счёт хеджинговый, депозит USD 3 000, плечо 1:100
Таймфреймы M5–H1 (по согласованию)
Инструменты EURGBP, USDCAD, GBPJPY (выбраны по минимальной корреляции)
Компиляций 15 (0 ошибок, 5 исправленных отказов)
Запусков тестера 45
Статус каркас, преимущество не подтверждено

2. Хронология этапов

№ Этап Начало Окончание Длительность
1 Создание журнала 04.11 18:02:55 04.11 18:03:28 0 мин 33 с
2 Выбор стратегий 04.11 18:27:18 05.11 15:09:32 20 ч 42 мин
3 Корреляция и выбор трёх пар 05.11 15:09:32 05.11 15:12:50 3 мин 18 с
4 S1 на GBPJPY 05.11 15:41:56 05.11 15:45:50 3 мин 54 с
5 S2: спецификация и EURGBP 05.11 17:06:53 05.11 17:07:49 0 мин 56 с
6 S2 на EURGBP (3 попытки) 06.11 17:59:20 06.11 18:22:19 ≈ 4 мин + простой
6a S2 на USDCAD и GBPJPY 06.11 18:21:00 06.11 18:22:19 1 мин 19 с
7 S6: скрининг пар 06.11 18:27:00 06.11 18:45:54 18 мин 54 с
8 Мультистратегийный советник 06.11 ≈18:52 06.11 19:05 ≥ 45 мин
8a Балансировка, OOS, решение по S6 09.11 11:23:00 09.11 11:44:56 21 мин 56 с
9 Каркас без претензии на прибыльность 09.11 ≈13:20 09.11 13:45:18 ≈ 25 мин

Суммарно ≈ 22 ч 45 мин измеренного времени (в сводке журнала — ≈ 22 ч 55 мин с округлением). Этап 2 включает длительный перерыв в ожидании ответа; Этапы 6–7 — простой в ожидании восстановления компилятора; Этап 8 — работу до обрыва сессии инструментов.

3. Что построено

Файл Роль
Experts/Portfolio_MultiStrategy.mq5 (v1.10) портфельный советник: 3 модуля, таймерный опрос, риск-слой
Include/Portfolio/PortfolioCore.mqh риск-слой: лоты, лимиты, корреляционные кластеры, де-рискинг
Include/Portfolio/PortfolioStrategies.mqh CStrategyBase, CStrategyBreakout, CStrategyMeanReversion, CStrategyPairValue
Experts/S1_TrendBreakout.mq5 автономная S1 (пробой канала Дончиана)
Experts/S2_MeanReversion.mq5 автономная S2 (z-score по BB)
Scripts/DevTools/CorrelationMatrix.mq5 матрица корреляций, рейтинг троек
Scripts/DevTools/RegimeStatistics.mq5 режимные метрики (ADX, ac1, VR, ER, ATR)
Scripts/DevTools/SpreadScreening.mq5 OLS-бета, AR(1) φ, half-life, возврат спреда
Profiles/Tester/PORT_frozen.set эталонная конфигурация

4. Результаты по стратегиям

Модуль Инструмент 2025–2026 2023–2024 (OOS) 2023–2026 Вердикт
S1 ADX 25 GBPJPY H1 — −288.62 (PF 0.844, ADX 30) −138.10 (PF 0.9659, 584 сделки, DD 24.66%) преимущества нет
S2 EURGBP H1 +88.79 (PF 1.0973) −43.96 (PF 0.9624) +52.10 (PF 1.0249, 367) знак меняется по периодам
S2 USDCAD H1 −67.65 (PF 0.9106) +306.31 (PF 1.3261) +249.30 (PF 1.1401, 278) то же
S2 GBPJPY H1 +107.37 (PF 1.1682) −51.44 (PF 0.9345) +58.51 (PF 1.0415, 257) то же
S2 M5/M15/M30 EURGBP −2328.85 / −694.27 / −150.33 — — издержки доминируют
S6 EURUSD/GBPUSD и др. — — — не создана: ни одна пара не прошла отбор
Портфель (эталон) GBPJPY H1 — −107.04 (PF 0.9545, 512) +76.15 (PF 1.0186, 947) каркас корректен, edge нет

5. Что установлено по существу

  1. Веса и лимиты не определяют результат. Все 8 вариантов полного окна укладываются в PF 1.003–1.026 при 985–993 сделках; разброс прибыли (+17.64…+90.77 USD) меньше одного среднего убытка портфеля.
  2. Прибыль полного окна создана окном 2025–2026. Оба рабочих модуля вне выборки убыточны (S1 −44.26, S2 −47.62), а в 2025–2026 прибыльны. Это признак подгонки, а не преимущества.
  3. S6 не имеет статистической основы на M5–H1. φ = 0.9985–1.0001, half-life 146 баров и более, местами нестационарность; возврат появляется только на D1 (half-life 106–604 дня), вне согласованного горизонта.
  4. Единственное связывающее ограничение — минимальный лот. Оно превращало S6 в фиксированный риск 1.6% и лишало S1 части входов. Лимиты 2% / 1.5% / 3% / 300% / margin 300% ни разу не сработали.
  5. Масштаб результата ничтожен. 0.08 USD ожидаемого выигрыша на сделку при 947 сделках; +76.15 USD на 3 000 USD за 3.75 года — это ≈2.5% всего, то есть <1% годовых при просадке 15%. Это ниже безрисковой ставки.

6. Устранённые дефекты каркаса

Дефект Что было Что стало
Лимит на символ использовался m_totalRiskPct (3%) m_symbolRiskPct (2%)
Минимальный лот подставлялся без проверки риска (1.6% у S6) LotFromRiskWithFloor(): допуск только при перерасходе ≤ 3×
S6 при нехватке лота лот поднимался до 0.01 пара пропускается
Де-рискинг отсутствовал InpMaxDrawdownPct=20.0 + EquityDrawdownPct()
Universe S6-символы попадали в список при выключенной S6 цикл ограничен InpS6Enabled? 2: 0
Magic арифметика по номеру StratIdFromMagic()
Отчётность нет Print в OnInit, g_risk.Report() в OnDeinit

7. Ограничения текущего результата

  • Издержки не учитываются (по согласованию): спред, комиссия, своп, проскальзывание. При 947 сделках это главный неизвестный фактор.
  • Один счёт, один инструмент теста (GBPJPY H1 как хост): портфельный эффект нескольких символов не проверен в реальном исполнении.
  • Нет walk-forward: in-sample и OOS назначены вручную, а не скользящим окном.
  • Нет статистической оценки переобучения: 45 прогонов на одном наборе данных — это множественное тестирование без поправки.
  • Управление позицией минимальное: вход/стоп/цель/тайм-стоп; нет частичного закрытия, трейлинга по волатильности, переоценки при смене режима.

8. Предложения по развитию

8.1 Инженерные (обязательны, без поиска прибыли)

  1. Учесть издержки. Включить реальный спред, комиссию и своп в тестер, прогнать эталон на every tick с реальными спредами. Если после этого +76.15 превращается в ноль или минус — это и есть ответ на вопрос о ценности каркаса.
  2. Стресс-тест издержек. Увеличить спред на 1 / 2 / 3 пункта и добавить execution delay 0 / 50 / 200 мс. Смотреть, при каком уровне издержек результат обнуляется.
  3. Длинная история. 10–15 лет, помесячные и годовые срезы, а не два окна. Это единственный способ отличить режим от артефакта.
  4. Метрики переобучения. Добавить deflated Sharpe, probability of backtest overfitting (PBO), White's Reality Check / SPA, bootstrap по сделкам и Monte Carlo на перестановках.
  5. Устойчивость к параметрам. Проверять не одно значение, а плато: канал 15/20/25/30, ADX 20/25/30/35, SL 1.5/2/2.5/3×ATR. Если пик узкий — это подгонка.
  6. Код и наблюдаемость. Логирование в файл, экспорт сделок в CSV, R-multiple distribution, turnover, отдельный диагностический режим, проверка partial fill и freeze level.
  7. Форвард. Демо-счёт 2–4 недели, сравнение с бэктестом по тем же метрикам. Без форварда результат — гипотеза.

8.2 Портфельная логика

  1. Risk parity вместо фиксированных весов: равный вклад в риск, а не равный процент. Сейчас 0.35/0.35 — это равные веса, а не равный риск.
  2. Корреляция по режимам. Считать кластеры не по всей выборке, а по кризисным окнам и по скользящим 120–250 барам; в стрессе корреляция уходит к 1.
  3. Volatility targeting. Нормировать риск на ATR и на текущую волатильность, а не на константу.
  4. Ограничение одновременных позиций и секторные лимиты по валютам (например, суммарная экспозиция на JPY).
  5. Иерархическая оптимизация (HRP) или max diversification — вместо ручного подбора весов.
  6. Разделить "риск-каркас" и "стратегии": каркас уже готов, стратегии — сменные модули.

8.3 Стратегии-кандидаты

Направление Идея Почему может дать другое поведение
Momentum / trend-following 12-1 momentum на D1/W1 по 8–12 парам, risk parity другой драйвер: следование за трендом, а не пробой канала
Carry своп-дифференциал, фильтр по волатильности доход от переноса, а не от цены
ORB (opening range breakout) пробой диапазона открытия сессии (London/NY) внутридневная волатильность с привязкой ко времени
Liquidity sweep / stop hunt ложный пробой экстремума + возврат рассчитан на поведение ликвидности, а не на среднюю
Time-of-day / calendar фильтры по часам, концу месяца, фиксингам сезонность и ребалансировка потоков
Event-driven торговля после релизов экономического календаря MT5 реакция на новость, а не на технический сигнал
Cointegration / stat arb 3+ пары, Engle-Granger / Johansen, Kalman-бета позиционный горизонт, но другой класс риска
Volatility squeeze пробой после сжатия ATR/Bollinger width вход по расширению волатильности

Практический вывод: S1 и S2 — это две реализации одной идеи (следование/возврат к средней на H1), и они обе провалили OOS. Для портфеля нужен другой драйвер, а не третий вариант того же. Наиболее реалистичные кандидаты в текущих условиях: momentum на D1 и carry — они не требуют внутридневного преимущества и меньше страдают от спреда.

8.4 Исследования

  1. Методология: walk-forward (anchored и rolling), PBO, deflated Sharpe, поправка на множественное тестирование.
  2. Данные: реальные тики, спред, комиссия, своп, проскальзывание; 10+ лет; проверка на 2019–2022 и 2015–2019.
  3. Поиск структуры: коинтеграция (ADF, KPSS, Engle-Granger, Johansen), Kalman-бета, HMM / Markov switching для режимов, Hurst, permutation tests.
  4. Портфельная математика: risk parity, HRP, max diversification, стресс-корреляция.
  5. Проверка гипотезы "S1/S2 работают в тренде": разбить сделки по режимам (ADX, ER, VR) и посмотреть, есть ли подмножество с устойчивым преимуществом в обоих окнах.
  6. Проверка гипотезы "издержки убивают": сравнить результаты с нулевым и реальным спредом на одних и тех же сделках.

8.5 Приоритетный порядок

  1. Издержки: реальный спред, комиссия, своп, every tick на эталоне.
  2. Длинная история + walk-forward, помесячные срезы.
  3. Метрики переобучения (deflated Sharpe, PBO, bootstrap).
  4. Risk parity / HRP в портфельном слое.
  5. Одна новая стратегия с другим драйвером (momentum или carry).
  6. Форвард на демо 2–4 недели.

9. Что делать не нужно

  • Не подбирать параметры под окно 2025–2026 — это уже дало PF 1.32 на in-sample и 0.84 на OOS.
  • Не повышать риск в попытке "вытянуть" результат: 0.35% уже не связывает, а лимиты не срабатывают.
  • Не добавлять мартингейл, сетку или усреднение — это не исправляет отсутствие edge.
  • Не продавать и не представлять как прибыльную систему: ни один модуль не дал прибыли в обоих периодах.
  • Не считать один бэктест доказательством.

10. Итог

Каркас готов и корректен: портфельный слой, риск-слой, три модуля, корреляционные ограничения, де-рискинг, эталонная конфигурация, воспроизводимые прогоны. Это честная инфраструктура, а не стратегия. Прибыльность не подтверждена: полное окно +76.15 USD (PF 1.0186) и OOS −107.04 USD (PF 0.9545) — это статистический шум, а не преимущество.

Дальше имеет смысл не искать "ещё один параметр", а проверить издержки и перейти к стратегиям с другим драйвером (momentum, carry). Если после учёта реального спреда результат эталона обнуляется — каркас остаётся полезным как инфраструктура, а не как торговая система.

Notes:
- Отчёт построен по журналу MQL5/DEVELOPMENT_LOG.md; изменений в код не вносилось.
- Ни один из модулей не дал прибыли в обоих периодах; приведённые числа не являются доказательством прибыльности.
- Приоритет №1 для следующего этапа — учёт реальных издержек; без него любые выводы о преимуществе остаются неполными.


Заключение

В ходе работы мы прошли путь от постановки задачи до мультисимвольного советника Portfolio_MultiStrategy.mq5. Отдельные модули S1 и S2 были объединены общим риск-слоем; экспериментальный модуль S6 также проверялся в составе советника, но в итоговой конфигурации отключён. В качестве исходной точки сохранены набор параметров PORT_frozen.set и журнал DEVELOPMENT_LOG.md.

Разработка показала, что встроенный AI Assistant может ускорить создание исследовательского прототипа: он помогал писать и изменять код, запускать тесты, анализировать результаты и находить дефекты. При этом проверка понадобилась и самому помощнику: в процессе работы исправлялись ошибки в статистических расчётах и риск-логике. Поэтому успешная компиляция и запуск в тестере — необходимые, но недостаточные условия корректности программы.

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

Чтобы повторить пройденный путь, можно воспользоваться следующей краткой инструкцией:

  1. Поставьте задачу и согласуйте порядок работы. Укажите цель проекта, тип счёта, инструменты, таймфреймы и ограничения. Попросите помощника сначала предложить план и не переходить к реализации без согласования.
  2. Организуйте журнал разработки. Сохраняйте в DEVELOPMENT_LOG.md принятые решения, изменения файлов, ошибки и фактические результаты проверок. Отдельно учитывайте время работы и ожидания.
  3. Выберите и формализуйте стратегии. Зафиксируйте точные правила входа, выхода и расчёта объёма. Используйте статистические исследования как проверку гипотез, а не как доказательство будущей прибыли.
  4. Разработайте модули по отдельности. Скомпилируйте каждый советник, проверьте его торговую логику на разных таймфреймах и сравните результаты на раздельных исторических периодах.
  5. Соберите портфельный советник. Подключите модули к общему слою управления позициями, корреляциями, экспозицией и риском. Проверьте фактический риск с учётом минимального лота.
  6. Зафиксируйте воспроизводимую конфигурацию. Сохраните исходный код, параметры в файлах.set, настройки тестирования и отчёты. Явно укажите, какие модули включены и какие ограничения действительно проверены.
  7. Проведите независимую ревизию. В новом чате передайте помощнику код и журнал, запросите аудит и отдельно протестируйте сценарии срабатывания защит. Затем переходите к проверкам на реальных тиках, с торговыми издержками и на демо-счёте.

Итог проекта — исследовательский каркас, а не готовая прибыльная система. Его ценность заключается в воспроизводимом процессе разработки и возможности подключать новые торговые идеи, сохраняя общий контроль риска. Главное — на каждом этапе отделять то, что реализовано, от того, что действительно проверено.




Объем выполненной работы

Когда создаешь проект с AI помощником, часто за кулисами остается большой объем работы, проделанной  нейросетью. Сделаем еще один запрос, финальный, чтобы увидеть, что осталось за пределами чата.

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

Готово. Таблица собрана по фактическим листингам каталогов (не по памяти), поэтому размеры и состав точные.

Сводка

Группа Каталог Файлов Объём
Исходный код Experts\, Include\Portfolio\, Scripts\DevTools\ 8 124 723 B
Артефакты компиляции.ex5 там же 6 236 770 B
Конфигурации тестера Profiles\Tester\ 62 116 195 B
Документация MQL5\ 1 73 061 B
Всего 77 550 749 B

1. Исходный код

Файл Путь Размер Назначение
Portfolio_MultiStrategy.mq5 Experts\ 23 056 B Головной мультисимвольный советник v1.10: три модуля в одном портфеле, таймер корреляций, распределение риска, лимиты на символ/кластер/портфель, де-рискинг по просадке. В шапке зафиксировано: "risk framework, not a profitable system".
PortfolioCore.mqh Include\Portfolio\ 23 658 B Риск-слой CPortfolioRisk: корреляционные кластеры по H1, лимит на символ, суммарный открытый риск, gross notional, минимальный margin level, де-рискинг по просадке эквити; расчёт лота LotFromRisk(), LotFromRiskWithFloor() с ограничением перерасхода, LotRiskMoney().
PortfolioStrategies.mqh Include\Portfolio\ 26 519 B Слой стратегий: CStrategyBase, CStrategyBreakout (S1), CStrategyMeanReversion (S2), CStrategyPairValue (S6, две ноги, ленивое создание хендлов iATR).
S1_TrendBreakout.mq5 Experts\ 15 426 B Автономный стенд S1: пробой канала 20, фильтр ADX ≥ 25, SL 2×ATR, выход по каналу 10. Проверялся на GBPJPY.
S2_MeanReversion.mq5 Experts\ 11 262 B Автономный стенд S2: полосы Боллинджера + z-score 2.0, фильтр ADX ≤ 20, SL 2×ATR, лимит 24 бара в сделке. Проверялся на EURGBP, затем USDCAD и GBPJPY.
CorrelationMatrix.mq5 Scripts\DevTools\ 6 935 B Матрица корреляций Пирсона по лог-доходностям и рейтинг троек по минимуму max|corr|. Этим скриптом выбрана тройка EURGBP / USDCAD / GBPJPY.
RegimeStatistics.mq5 Scripts\DevTools\ 7 010 B Режимные метрики: ADX, автокорреляция 1-го порядка, variance ratio 2/5/10, efficiency ratio, ATR, спред. Обосновал EURGBP для S2.
SpreadScreening.mq5 Scripts\DevTools\ 10 857 B Скрининг пар для S6: OLS-бета, AR(1) φ, half-life, возврат спреда после новых пересечений порога, cost_to_sd. Дал количественный отказ от S6 на M5–H1.

2. Артефакты компиляции

Файл Размер Что это
Portfolio_MultiStrategy.ex5 83 232 B Сборка головного советника (build 6308, AVX2).
S1_TrendBreakout.ex5 39 646 B Сборка S1.
S2_MeanReversion.ex5 45 014 B Сборка S2.
CorrelationMatrix.ex5 22 638 B Сборка скрипта корреляций.
RegimeStatistics.ex5 20 740 B Сборка скрипта режимов.
SpreadScreening.ex5 25 500 B Сборка скрипта скрининга.

3. Конфигурации портфельного советника

Файл Размер Назначение
PORT_frozen.set 4 316 B Эталон: S1 0.35 % GBPJPY, S2 0.35 % EURGBP, S6 off; лимиты symbol 2 % / cluster 1.5 % / total 3 % / gross 300 % / margin 300 % / drawdown 20 %, overshoot 3.0×.
PORT_w035.set 3 988 B Равные веса 0.35 / 0.35 / 0.35 (S1, S2, S6).
PORT_mix.set 3 986 B Смешанные веса: 0.5 / 0.35 / 0.25.
PORT_tight.set 3 982 B Ужесточённые лимиты: риски 0.5 %, кластер 1.0 %, портфель 2.0 %, gross 200 %.
PORT_w035_noS6.set 3 988 B Веса 0.35 / 0.35 без S6.
PORT_S1only.set 3 988 B Только S1 0.35 % — пофакторное разложение.
PORT_S2only.set 3 988 B Только S2 0.35 % — пофакторное разложение.
PORT_all.set 3 902 B Все три модуля включены.
PORT_noS6.set 3 904 B Все модули, кроме S6 — базовая линия.
PORT_GBPJPY_H1.ini 249 B Исходный прогон: Model=2, GBPJPY H1, 2025.01.01–2026.10.01, 3 000 USD, 1:100.
PORT_GBPJPY_H1_M1.ini 248 B То же окно, Model=1 — обязательное условие для S6 (нужна история внешних символов на старшем ТФ).
PORT_FULL_M1.ini 248 B Полное окно 2023.01.01–2026.10.01, Model=1.
PORT_OOS_2023_2024.ini 248 B Окно вне выборки 2023.01.01–2024.12.31, Model=1.
Portfolio_MultiStrategy.GBPJPY.H1.*.ini (4 файла) 4 240–4 568 B Снимки полной конфигурации, которые тестер сохраняет сам при завершении прогона (окна 2023–2024, 2023–2026, 2025–2026; модели 100/200).
Portfolio_MultiStrategy.set 4 132 B Набор "последний использованный", автосохранение тестера. Побочный артефакт, не эталон.

4. Конфигурации S1

Файл Размер Назначение
S1_GBPJPY_H1.ini 518 B Базовый прогон H1, 2025–2026.
S1_GBPJPY_M5.ini, _M15.ini, _M30.ini 518–520 B Подбор таймфрейма на том же окне.
S1_GBPJPY_H1_FULL.ini 518 B Полное окно 2023–2026, Model=2.
S1_GBPJPY_H1_FULL_M1.ini 518 B Полное окно, Model=1 — контроль модели исполнения.
S1_GBPJPY_H1_OOS.ini 518 B Окно вне выборки 2023–2024.
S1_TrendBreakout.set 1 748 B Итоговый набор параметров S1.
S1_H1_channelexit.set 1 926 B Вариант с выходом по каналу 10.
S1_H1_noema_adx20/25/30/35.set (4 файла) 1 918 B Сетка по порогу ADX без EMA-фильтра.
S1_TrendBreakout.GBPJPY.<H1\|M5\|M15\|M30>.<окно>.<100\|200>.ini (7 файлов) 2 080–2 180 B Автоснимки конфигураций прогонов S1.

5. Конфигурации S2

Файл Размер Назначение
S2_EURGBP_M5/M15/M30/H1.ini (4) 242–243 B Подбор таймфрейма на EURGBP, 2025–2026.
S2_EURGBP_H1_FULL.ini, _H1_OOS.ini 242 B EURGBP H1: полное окно и окно вне выборки.
S2_USDCAD_H1.ini, _H1_FULL.ini, _H1_OOS.ini 242 B Перенос S2 на второй инструмент.
S2_GBPJPY_H1.ini, _H1_FULL.ini, _H1_OOS.ini 242 B Перенос S2 на третий инструмент.
S2_MeanReversion.<EURGBP\|USDCAD\|GBPJPY>.<H1\|M5\|M15\|M30>.<окно>.200.ini (12 файлов) 2 040–2 044 B Автоснимки конфигураций прогонов S2.

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

Файл Путь Размер Назначение
DEVELOPMENT_LOG.md MQL5\ 73 061 B Журнал разработки: 9 этапов, время, продолжительность, созданные и изменённые файлы, ошибки и исправления, результаты прогонов. Первичный источник статьи.


Прикрепленные файлы |
DEVELOPMENT_LOG.md (71.35 KB)
PortfolioRates.mqh (4.84 KB)
PortfolioRisk.mqh (18.72 KB)
PortfolioTypes.mqh (3.99 KB)
Машинное обучение онлайн для фильтрации торговых сигналов в MQL5 (Часть 1): Фильтр, обучающийся на результатах закрытых сделок Машинное обучение онлайн для фильтрации торговых сигналов в MQL5 (Часть 1): Фильтр, обучающийся на результатах закрытых сделок
В этой статье на чистом MQL5 реализован фильтр торговых сигналов на основе логистической регрессии с онлайн-обучением, интегрированный в советник (EA) на основе пересечения экспоненциальных скользящих средних (EMA) с контуром обратной связи по закрытым сделкам. В статье подробно описаны общий класс, признаки, обновление методом стохастического градиентного спуска (SGD), сохранение состояния модели и отображение вероятности без возможности изменения модели. Эксперименты на синтетических данных охватывают оценку разделения при разных начальных значениях генератора случайных чисел, калибровку вероятностей, абляционный анализ признаков, сравнение с базовыми моделями в условиях смены режима и перебор значений гиперпараметров. Вы получите скрипты для воспроизводимых экспериментов и протокол пошаговой проверки со сдвигом временных окон, чтобы проверить фильтр на выбранном вами торговом инструменте.
Создание фреймворка для модульного тестирования на этапе компиляции в MQL5 с использованием утверждений препроцессора Создание фреймворка для модульного тестирования на этапе компиляции в MQL5 с использованием утверждений препроцессора
В MQL5 отсутствуют встроенные средства модульного тестирования, поэтому ошибки в служебных функциях расчёта размера лота, стоимости пункта и нормализации часто попадают в рабочий код. В этой статье представлен фреймворк без внешних зависимостей, построенный на макросах утверждений препроцессора, наборах тестов на основе интерфейсов и центральном средстве запуска тестов с модулем форматирования результатов. Он работает как скрипт в обработчике OnStart, выполняет детерминированные тесты и выводит сводку об успешных и неуспешных тестах на вкладку "Эксперты", позволяя выявить дефекты округления, обработки граничных значений и ошибок до развёртывания.
Ценовые каналы в MQL5 без предположений о форме распределения: Квантильная регрессия методом итеративно перевзвешенных наименьших квадратов (IRLS) Ценовые каналы в MQL5 без предположений о форме распределения: Квантильная регрессия методом итеративно перевзвешенных наименьших квадратов (IRLS)
Мы строим скользящий ценовой канал по условным квантильным прямым уровней 0.1, 0.5 и 0.9, оцениваемым методом итеративно перевзвешенных наименьших квадратов (IRLS) с квантильной функцией потерь (pinball loss); реализация включает класс для повторного использования и два индикатора MetaTrader 5. Мы проверяем охват внутри выборки, анализируем пересечение квантильных прямых и сравниваем ширину канала со средним истинным диапазоном (ATR), шириной полос Боллинджера и шириной регрессионного канала на одинаковых горизонтах. Проверки в тестере стратегий показывают, что границы канала носят описательный характер, тогда как нормированная ширина служит признаком волатильности и рыночного режима.
Создание типобезопасной шины событий в MQL5: Снижение связности компонентов советника без глобальных переменных Создание типобезопасной шины событий в MQL5: Снижение связности компонентов советника без глобальных переменных
Типизированная шина событий на основе шаблона публикации и подписки в MQL5 заменяет глобальные переменные и прямые перекрестные ссылки. Благодаря абстрактному интерфейсу слушателя и таблице подписок, индексируемой значениями перечисления, генератор сигналов, менеджер ордеров и монитор просадки взаимодействуют только через шину, без общего состояния. В статье анализируются накладные расходы на диспетчеризацию, проверка указателей и риски рекурсивной публикации, что поможет вам разрабатывать советники с низкой связностью, удобные для тестирования.