# DEVELOPMENT_LOG

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

---

## Сводка

- **Название проекта:** Разработка торговой системы (советник MQL5) — рабочее название уточняется
- **Дата начала разработки:** 2026-11-04 18:02:55 (UTC+02:00)
- **Текущий статус:** Этап 9 завершён: советник переведён в статус «риск-каркас, без претензии на прибыльность»; эталонная конфигурация — S1 0.35% GBPJPY H1, S2 0.35% EURGBP H1, S6 выключена; устранены дефекты риск-слоя (лимит на символ 2%, ограничение перерасхода минимального лота 3×, де-рискинг при просадке 20%); проверено полным окном 2023–2026 (+76.15 USD, PF 1.0186, 947 сделок, просадка 15.03%) и вне выборки 2023–2024 (−107.04 USD, PF 0.9545, 512 сделок); подтверждённого преимущества нет. Контекст Этапа 8 — подраздел «Балансировка весов, прогон OOS 2023–2024 и решение по S6»: мультисимвольный мультистратегийный советник собран и компилируется без ошибок; выполнены 10 прогонов (полное окно 2023–2026, вне выборки 2023–2024, окно 2025–2026, варианты весов 0.35 и смешанные, ужесточённые лимиты, пофакторное разложение S1/S2). Итог: веса и лимиты не определяют результат, вне выборки оба рабочих модуля убыточны, S6 не масштабируется по риску и выходит за согласованный горизонт. Решение пользователя принято: состав портфеля зафиксирован, поиск преимущества прекращён, советник доведён как каркас.
- **Завершённых этапов:** 9
- **Суммарное измеренное время:** ≈ 22 ч 55 мин (Этап 2 включает перерыв в ожидании ответа пользователя; Этапы 6–7 включают простой в ожидании восстановления компилятора; Этап 8 учтён по измеренному интервалу 18:52–19:05 и включает работу до обрыва сессии инструментов) 
- **Компиляций:** 15 (в Этапе 9 — 1 успешная, 0 ошибок и 0 предупреждений; в Этапе 8 — 3 успешных и 2 отказа: `Portfolio_MultiStrategy.mq5` после создания, после правки ленивых хендлов S6 и после правки минимального лота; все успешные — 0 ошибок, 0 предупреждений) 
- **Ошибок компиляции:** 5 (все в Этапе 8, исправлены)
- **Запусков тестера:** 45 (в Этапе 9 — 4: полное окно 2023–2026 дважды, вне выборки 2023–2024, повторная проверка полного окна)

---

## Журнал этапов

### Этап 1. Создание журнала разработки и фиксация начала проекта

- Начало: 2026-11-04 18:02:55 (UTC+02:00)
- Окончание: 2026-11-04 18:03:28 (UTC+02:00)
- Продолжительность: 0 мин 33 с (полное прошедшее время; активное время отдельно не измерялось)
- Цель: Создать файл `MQL5/DEVELOPMENT_LOG.md` и зафиксировать официальное начало проекта для последующего написания технической статьи.
- Запрос пользователя: Ввести постоянное журналирование всех существенных действий над проектом, создать файл журнала, зафиксировать время начала.
- Действия:
  - Выполнена обязательная проверка окружения (pre-flight) для серверов MetaEditor 5 и MetaTrader 5.
  - Получено фактическое локальное время из системного источника.
  - Проверено отсутствие существующего файла журнала в `MQL5/`.
  - Создан файл `DEVELOPMENT_LOG.md` со сводкой и шаблоном структуры этапов.
- Изменённые файлы: `MQL5/DEVELOPMENT_LOG.md` (создан)
- Ошибки и исправления: Не обнаружено.
- Проверка: Файл создан на диске по пути `D:\ProgramFiles\CFI MEtaTrader 5\MQL5\DEVELOPMENT_LOG.md`.
- Результат: Журнал создан, начало проекта зафиксировано, структура готова к заполнению.
- Статус: DONE

---

### Этап 2. Обсуждение требований: выбор торговых стратегий

- Начало: 2026-11-04 18:27:18 (UTC+02:00)
- Окончание: 2026-11-05 15:09:32 (UTC+02:00)
- Продолжительность: 20 ч 42 мин 14 с (полное прошедшее время; включает длительный перерыв в ожидании ответа пользователя; активное время отдельно не измерялось)
- Цель: Сформировать набор торговых стратегий на разных идеях и разных состояниях рынка для мультистратегийного мультисимвольного советника с учётом корреляции, распределения риска и лимита общей экспозиции портфеля.
- Запрос пользователя: Предложить несколько систем на разных идеях, чтобы сигналы возникали в разных состояниях рынка; желательна возможность противоположных позиций по одному инструменту.
- Действия:
  - Зафиксированы ключевые требования к архитектуре: мультистратегийность, мультисимвольность, корреляционный контроль, распределение риска, автоматический лимит общей экспозиции.
  - Подготовлен набор стратегий-кандидатов по режимам рынка с описанием логики, входов/выходов и совместимости между собой.
- Изменённые файлы: `MQL5/DEVELOPMENT_LOG.md` (добавлена запись этапа)
- Ошибки и исправления: —
- Проверка: —
- Результат: Пользователь утвердил вводные: хеджинговый счёт; 3 валютные пары с минимальной корреляцией (подбор поручён ассистенту); таймфреймы M5–H1; поэтапная разработка — сначала каждая стратегия отдельно на одном инструменте, затем интеграция; ограничения по спреду/проскальзыванию пока не учитываются; депозит USD 3000. Утверждён базовый набор: S1 (трендовый пробой), S2 (возврат к средней), S6 (относительная стоимость).
- Статус: DONE

---

### Этап 3. Корреляционный анализ и выбор трёх инструментов

- Начало: 2026-11-05 15:09:32 (UTC+02:00)
- Окончание: 2026-11-05 15:12:50 (UTC+02:00)
- Продолжительность: 3 мин 18 с (полное прошедшее время; включает ожидание загрузки истории терминалом)
- Цель: На основе фактических исторических данных выбрать три валютные пары с минимальной взаимной корреляцией для дальнейшей разработки стратегий.
- Запрос пользователя: Выбрать 3 валютные пары с минимальной корреляцией.
- Действия:
  - Проверен список доступных у брокера символов (Market Watch и скрытые символы).
  - Подготовлен диагностический MQL5-скрипт для расчёта матрицы корреляций логарифмических доходностей и ранжирования троек инструментов.
  - Скрипт скомпилирован и выполнен на D1/500 по 12 символам; получены матрица корреляций и рейтинг троек.
  - Проверены текущие спреды кандидатов: EURGBP, USDCAD, EURCHF, NZDUSD, EURUSD — 1–2 пункта; USDJPY — 1 пункт; GBPJPY — 7 пунктов (0.7 пипса).
  - Тройка выбрана с учётом не только корреляции, но и ликвидности и волатильности инструментов.
- Изменённые файлы: `MQL5/Scripts/DevTools/CorrelationMatrix.mq5` (создан)
- Ошибки и исправления: Первый запуск выполнен с параметром `InpTimeframe=0`, что соответствует `PERIOD_CURRENT` (H1 графика) — расчёт шёл по 500 часовым барам (~1 месяц) вместо дневных. Ошибка выявлена по строке `CORR_PERIOD;PERIOD_CURRENT`. Исправление: повторный запуск с `InpTimeframe=16408` (`PERIOD_D1`). Второй запуск подвисал на 5–6 с на символах, отсутствовавших в Market Watch (загрузка истории); символы добавлены в Market Watch, расчёт завершён.
- Проверка: Компиляция `CorrelationMatrix.mq5` — 0 ошибок, 0 предупреждений. Скрипт выполнен на графике EURUSD,H1, результат прочитан из журнала экспертов: 12 символов, 500 дневных баров, период 2024-12-03…2026-11-05.
- Результат: Выбраны EURGBP, USDCAD, GBPJPY. Взаимные |corr| на D1/500: EURGBP–USDCAD 0.064, GBPJPY–USDCAD 0.026, EURGBP–GBPJPY 0.375 (максимум в тройке). На H1/500 (~1 мес.) те же пары: 0.001, 0.154, 0.151. Для сравнения: EURUSD–GBPUSD 0.809, AUDUSD–NZDUSD 0.872. Абсолютный статистический минимум — NZDUSD/EURGBP/EURCHF (max 0.040) — отклонён как набор однотипно низковолатильных инструментов, не покрывающий трендовый режим.
- Статус: DONE

---

### Этап 4. Реализация стратегии S1 на одном инструменте (GBPJPY)

- Начало: 2026-11-05 15:41:56 (UTC+02:00)
- Окончание: 2026-11-05 15:45:50 (UTC+02:00)
- Продолжительность: 3 мин 54 с (полное прошедшее время; включает компиляцию и 14 прогонов тестера)
- Цель: Реализовать S1 (трендовый пробой канала Дончиана с ATR-стопами) отдельным советником на GBPJPY, подобрать рабочий таймфрейм в диапазоне M5–H1 и зафиксировать правила стратегии.
- Запрос пользователя: Продолжить работу; по завершении этапа сформулировать правила S1.
- Действия:
  - Зафиксирована спецификация S1 v1: пробой канала Дончиана, фильтры ADX и EMA, стопы и цели от ATR, риск на сделку в процентах от эквити.
  - Создан советник `S1_TrendBreakout.mq5`: пробой канала Дончиана, ADX-фильтр, расчёт лота от риска, SL/TP от ATR, опциональный трейлинг, опциональный выход по противоположному каналу, проверки режима торговли, стоп-левела и объёмов.
  - Серия прогонов тестера на M5, M15, M30, H1 для выбора таймфрейма.
  - Структурная итерация: фиксированный TP заменён выходом по противоположному каналу; протестировано отключение EMA-фильтра и пороги ADX 20/25/30/35.
  - Проверка вне выборки на 2023–2024 и полный прогон 2023–2026 на двух моделях тиков.
  - Дефолтные параметры советника приведены в соответствие с исследованной конфигурацией.
- Изменённые файлы: `MQL5/Experts/S1_TrendBreakout.mq5` (создан)
- Ошибки и исправления: (1) Первая версия S1 с фиксированным TP 3×ATR, фильтром EMA200 и ADX 20 убыточна на всех ТФ (M5 −2790, M15 −1872, M30 −968, H1 −335 при депозите 3000). (2) Гипотеза о «срезании» прибыли фиксированным TP проверена заменой TP на выход по противоположному каналу Дончиана (10) — H1 улучшился до −233. (3) Фильтр EMA200 признан вредным: при его отключении H1 дал −43 (PF 0.98). (4) Повышение ADX до 30 дало +434 (PF 1.32) на 2025–2026, но на данных вне выборки 2023–2024 та же конфигурация дала −289 (PF 0.84) — признак подгонки под период. (5) Технические ограничения инструментов: многострочный поиск в `replace_text_in_file` не работает из-за CRLF, параллельные правки одного файла дают гонку записи — правки выполнялись построчно и последовательно.
- Проверка: Компиляция `S1_TrendBreakout.mq5` — 4 раза, во всех случаях 0 ошибок, 0 предупреждений. Прогоны тестера (GBPJPY, депозит 3000 USD, плечо 1:100): M5/M15/M30/H1 с дефолтами; H1 с выходом по каналу; H1 без EMA при ADX 20/25/30/35; M30 при ADX 30; H1 2023–2024 (вне выборки) при ADX 30; H1 2023–2026 при ADX 25 на модели `open prices` и `m1 ohlc` (результаты совпали: −138.10 и −138.91). Финальная проверка дефолтов совпала с последним прогоном (−138.10).
- Результат: Рабочий таймфрейм — H1 (единственный, где метрики существенно лучше остальных: PF 0.97 против 0.75–0.80 на M5–M30). Итоговая конфигурация: канал 20, ADX(14) ≥ 25, без EMA-фильтра, SL 2×ATR, без TP, выход по противоположному каналу 10. Результат на 2023–2026: −138.10 USD (−4.6%), PF 0.9659, просадка 24.7%, 584 сделки, восстановление отрицательное. Вывод: у S1 в текущем виде нет подтверждённого статистического преимущества на GBPJPY; конфигурация с PF 1.32 не прошла проверку вне выборки. Стратегия зафиксирована как компонент портфеля, но не готова к реальной торговле.
- Статус: DONE

---

### Этап 5. Спецификация S2 (возврат к средней) и обоснование выбора EURGBP

- Начало: 2026-11-05 17:06:53 (UTC+02:00)
- Окончание: 2026-11-05 17:07:49 (UTC+02:00)
- Продолжительность: 0 мин 56 с (полное прошедшее время; включает компиляцию и прогон диагностического скрипта)
- Цель: Сформулировать торговую идею S2 и количественно обосновать выбор EURGBP как инструмента для контртрендовой стратегии.
- Запрос пользователя: Сделать обзор стратегии S2 и обосновать выбор EURGBP.
- Действия:
  - Подготовлен диагностический скрипт для измерения режима рынка (ADX, автокорреляция доходностей, variance ratio, efficiency ratio, ATR).
  - Скрипт скомпилирован и выполнен по четырём символам на H1/10000 баров.
  - Сформулирована спецификация S2: z-score отклонения от средней, фильтр отсутствия тренда, цель на возврат к средней, стоп по ATR, ограничение времени удержания.
  - Сравнены EURGBP, GBPJPY, USDCAD и EURUSD по режимным метрикам; выбор EURGBP обоснован количественно.
- Изменённые файлы: `MQL5/Scripts/DevTools/RegimeStatistics.mq5` (создан)
- Ошибки и исправления: Первый запуск скрипта через `chart_add_script` отклонён: значения входного параметра содержали запятые, а сам список параметров разделяется запятыми. Исправление: список символов переведён на разделитель `;`, скрипт перекомпилирован и запущен без переопределения параметров.
- Проверка: Компиляция `RegimeStatistics.mq5` — 0 ошибок, 0 предупреждений. Скрипт выполнен на H1, 10000 баров, 4 символа; результат прочитан из журнала экспертов.
- Результат: Измерены режимные метрики на H1/10000 баров. EURGBP: ADX средний 29.13, доля баров с ADX<20 — 23.3%, автокорреляция доходностей −0.0295, VR2 0.971, VR5 0.931, VR10 0.911, efficiency ratio 0.3073, ATR 56.8 пункта (0.0682% цены), спред 2 пункта. GBPJPY: 29.76 / 19.3% / −0.0300 / 0.970 / 0.947 / 0.923 / 0.3201 / 258.4 / 0.1214% / 6. USDCAD: 30.37 / 17.2% / −0.0435 / 0.957 / 0.916 / 0.918 / 0.3224 / 115.8 / 0.0829% / 1. EURUSD: 29.96 / 19.5% / −0.0126 / 0.988 / 0.958 / 0.963 / 0.3272 / 121.7 / 0.1085% / 1. EURGBP лидирует по доле боковика, минимальному efficiency ratio и минимальному VR10, то есть наиболее пригоден для контртрендовой логики; ценой является худшее отношение спреда к ATR (3.5% против 0.9% у USDCAD).
- Статус: DONE

---

### Этап 6. Реализация стратегии S2 на EURGBP

- Начало: 2026-11-06 17:59:20 (UTC+02:00)
- Окончание: —
- Продолжительность: —
- Цель: Реализовать S2 (возврат к средней по z-score) отдельным советником на EURGBP и проверить на разных таймфреймах.
- Запрос пользователя: Создать советника по стратегии S2 и проверить на разных таймфреймах.
- Действия:
  - Создан исходник советника `S2_MeanReversion.mq5`: z-score по полосам Боллинджера, фильтр ADX, цель на среднюю, стоп по ATR, ограничение времени удержания, минимальная дистанция цели от спреда.
  - Выполнена попытка компиляции.
- Изменённые файлы: `MQL5/Experts/S2_MeanReversion.mq5` (создан)
- Ошибки и исправления: Блокирующая проблема окружения. MCP-сервер metaeditor5 в текущей сессии не предоставляет инструменты: `metaeditor5__get_workspace_info` и `metaeditor5__compile_file` возвращают «tool is not available». Делегированный субагент с расширением metaeditor5 также не получил этих инструментов. Компиляция, а значит и прогоны тестера, невозможны до восстановления доступа.
- Проверка: Исходник подтверждён на диске (`MQL5/Experts/S2_MeanReversion.mq5`, 11 262 байта). Файл `.ex5` отсутствует.
- Результат (попытка 1): Исходник готов; компиляция и бэктесты не выполнены.

#### Этап 6. Повторная попытка компиляции (запрос «Попробуй снова»)

- Начало: 2026-11-06 18:02:00 (UTC+02:00)
- Окончание: 2026-11-06 18:04:11 (UTC+02:00)
- Продолжительность: 2 мин 11 с (полное прошедшее время; ожидание ответов инструментов)
- Цель: Повторить попытку компиляции `S2_MeanReversion.mq5` и, при успехе, запустить бэктесты на M5/M15/M30/H1.
- Действия:
  - Повторная проверка окружения через MetaTrader MCP (`get_workspace_info`): компилятор MQL5 build 6296 заявлен как доступный (`can_compile_file: true`), права на запись в `MQL5` подтверждены.
  - Проверен список расширений: `metaeditor5` числится включённым, но его инструменты в текущей сессии не зарегистрированы.
  - Выполнен поиск скомпилированного файла `S2_MeanReversion.ex5` в `MQL5/Experts` и в списке доступных программ терминала (фильтр `S2`, тип expert).
  - Пока компилятор недоступен, подготовлены конфигурации тестера для немедленного запуска прогонов после компиляции.
- Изменённые файлы:
  - `MQL5/Profiles/Tester/S2_EURGBP_M5.ini` (создан)
  - `MQL5/Profiles/Tester/S2_EURGBP_M15.ini` (создан)
  - `MQL5/Profiles/Tester/S2_EURGBP_M30.ini` (создан)
  - `MQL5/Profiles/Tester/S2_EURGBP_H1.ini` (создан)
  - `MQL5/Profiles/Tester/S2_EURGBP_H1_OOS.ini` (создан)
  - `MQL5/Profiles/Tester/S2_EURGBP_H1_FULL.ini` (создан)
- Ошибки и исправления: Ошибка не устранена. `metaeditor5__get_workspace_info` и `metaeditor5__compile_file` в сессии отсутствуют, попытка через делегированного субагента также не дала доступа к компилятору. Обходных путей не применялось: сборка вне MetaEditor через внешние процессы запрещена правилами и не выполнялась. Рекомендация: перезапустить MCP-сервер metaeditor5 (или связку MetaEditor + MCP) либо скомпилировать файл вручную (F7 в MetaEditor) — после этого запуск тестов возможен без дополнительной подготовки.
- Проверка: `.ex5` в `MQL5/Experts` отсутствует, в списке программ терминала советник S2 не появился. Шесть конфигураций тестера созданы на диске (242–243 байта каждая), формат совпадает с конфигурациями S1: депозит 3000 USD, плечо 1:100, модель «open prices», период 2025.01.01–2026.10.01, out-of-sample 2023.01.01–2024.12.31.
- Результат: Компиляция повторно не выполнена по причине недоступности компилятора в текущей сессии. Подготовлена инфраструктура тестирования S2 (6 конфигураций), дальнейшие шаги разблокируются одной компиляцией.
- Статус: SUPERSEDED (попытка 2 закрыта; фактический результат — в подразделе ниже)

#### Этап 6. Компиляция и прогоны тестера (завершение)

- Начало: 2026-11-06 18:08:00 (UTC+02:00)
- Окончание: 2026-11-06 18:09:13 (UTC+02:00)
- Продолжительность: 1 мин 13 с (полное прошедшее время, 5 прогонов тестера)
- Цель: Убедиться в появлении скомпилированного советника после перезапуска MetaEditor/MCP и выполнить запланированные прогоны на M5/M15/M30/H1 плюс проверку out-of-sample.
- Запрос пользователя: «Проверь сейчас — я перезапустил».
- Действия:
  - Повторная проверка каталога `MQL5/Experts`: обнаружен `S2_MeanReversion.ex5` (45 014 байт, время сборки 2026-11-06 18:07:40), то есть компиляция состоялась после перезапуска MetaEditor.
  - Метаданные советника прочитаны из `.ex5`: версия 1.00, compiler build 6296, 19 параметров (15 входных, 4 группы); значения по умолчанию соответствуют спецификации (z-entry 2.0, ADX max 20.0, SL 2×ATR, тайм-стоп 24 бара).
  - Выполнено 5 прогонов тестера по заранее подготовленным конфигурациям: депозит 3000 USD, плечо 1:100, модель «open prices», риск 0.5% на сделку, параметры по умолчанию.
- Изменённые файлы: исходный код не изменялся; использованы `MQL5/Profiles/Tester/S2_EURGBP_M5.ini`, `S2_EURGBP_M15.ini`, `S2_EURGBP_M30.ini`, `S2_EURGBP_H1.ini`, `S2_EURGBP_H1_OOS.ini`, `S2_EURGBP_H1_FULL.ini`.
- Ошибки и исправления: Блокировка окружения устранена перезапуском MetaEditor/MCP. Текст вывода компилятора в сессии по-прежнему недоступен (инструменты metaeditor5 не зарегистрированы), поэтому успешность сборки подтверждена косвенно: `.ex5` создан, терминал читает его метаданные и запускает советник в тестере. Предупреждения компилятора не проверены.
- Проверка: Результаты прогонов EURGBP (риск 0.5% на сделку, параметры по умолчанию):

| ТФ | Период | Сделок | Прибыль, USD | Profit Factor | Просадка по балансу |
|---|---|---|---|---|---|
| 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% |

- Результат: Единственный положительный результат — H1: +88.79 USD (+2.96%), PF 1.0973, 170 сделок, просадка 7.10%. На out-of-sample 2023–2024 та же конфигурация убыточна (−43.96 USD, PF 0.9624), объединённый прогон 2023–2026 даёт практически нулевой итог (+52.10 USD, PF 1.0249, 367 сделок). На M5/M15/M30 убыток монотонно растёт с уменьшением таймфрейма (PF 0.42 / 0.70 / 0.91): издержки и частота сделок уничтожают преимущество. Вывод: преимущество S2 статистически не подтверждено; ключевой ограничитель — отношение спреда к ATR (3.5% на EURGBP, худшее в тройке по данным Этапа 5), из-за чего цели меньше 0.5 ATR недопустимы, а на низких таймфреймах цель сопоставима со спредом. Подгонка параметров не выполнялась.
- Статус: DONE


---

#### Этап 6. Расширенная проверка S2 на USDCAD и GBPJPY

- Начало: 2026-11-06 18:21:00 (UTC+02:00)
- Окончание: 2026-11-06 18:22:19 (UTC+02:00)
- Продолжительность: 1 мин 19 с (полное прошедшее время, 6 прогонов тестера)
- Цель: Отделить «плохую идею» от «плохого инструмента»: проверить ту же логику S2 с теми же параметрами по умолчанию на двух других инструментах тройки (USDCAD, GBPJPY) на H1, включая out-of-sample.
- Запрос пользователя: «Да, проверь на 2-х остальных символах USDCAD и GBPJPY».
- Действия:
  - Созданы 6 конфигураций тестера: `S2_USDCAD_H1.ini`, `S2_USDCAD_H1_OOS.ini`, `S2_USDCAD_H1_FULL.ini`, `S2_GBPJPY_H1.ini`, `S2_GBPJPY_H1_OOS.ini`, `S2_GBPJPY_H1_FULL.ini` (депозит 3000 USD, плечо 1:100, модель «open prices», риск 0.5%, параметры советника по умолчанию — без подгонки).
  - Выполнено 6 прогонов: по каждому символу in-sample (2025.01.01–2026.10.01), out-of-sample (2023.01.01–2024.12.31) и полный период (2023.01.01–2026.10.01).
- Изменённые файлы: `MQL5/Profiles/Tester/S2_USDCAD_H1*.ini`, `S2_GBPJPY_H1*.ini` (созданы). Исходный код советника не изменялся.
- Ошибки и исправления: Ошибок не возникло; все прогоны завершились штатно, отчёты получены.
- Проверка: Результаты по трём инструментам, H1, одинаковые параметры:

| Символ | 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 — плюс в недавнем периоде и минус в OOS, GBPJPY — то же самое, USDCAD — наоборот (минус в недавнем, сильный плюс в OOS, PF 1.3261). Знак результата переворачивается при смене периода у всех трёх инструментов, то есть положительные итоги на полном периоде (+52.10 / +249.30 / +58.51, PF 1.02–1.14 при 257–367 сделках) статистически неотличимы от нуля и определяются конкретным окном данных. Гипотеза «идея рабочая, инструмент плохой» не подтвердилась; ключевым фактором остаётся период, а не символ. Вывод: S2 в текущем виде не включается в портфель как самостоятельная стратегия; параметры не подбирались, подгонка не выполнялась.
- Статус: DONE

---

### S2. Правила стратегии (итоговая спецификация и причина отказа)

Зафиксировано по решению пользователя («вариант 1»): S2 закрывается как самостоятельная стратегия с весом 0 в будущем портфеле.

- Инструмент и таймфрейм: EURGBP, H1 (обоснование — Этап 5, режимные метрики: максимальная доля ADX<20, минимальные efficiency ratio и VR10).
- Вход long: z = (Close[1] − BB_mid[1]) / σ ≤ −2.0; вход short: z ≥ +2.0. Здесь σ = (BB_upper[1] − BB_mid[1]) / 2.0, полосы Боллинджера BB(20, 2.0) по Close.
- Фильтр режима: ADX(14)[1] < 20.0 — входы только при отсутствии тренда.
- Цель: средняя линия BB на баре входа; при этом дистанция цели не меньше max(0.5×ATR(14), SYMBOL_TRADE_STOPS_LEVEL) — защита от целей, сопоставимых со спредом.
- Стоп: 2.0×ATR(14) от цены входа, нормализация по tick size.
- Ограничение времени удержания: принудительное закрытие через 24 бара.
- Риск: 0.5% эквити на сделку, лот рассчитывается от расстояния до стопа и округляется вниз до volume step; Magic 20261106; отклонение 20 пунктов.
- Исполнение: сигнал по закрытому бару, не более одного входа за бар, проверки режима торговли, стоп- и фриз-левелов.
- Причина отказа (результаты Этапа 6):

| Проверка | Результат | PF |
|---|---|---|
| EURGBP H1 2025–2026 | +88.79 USD | 1.0973 |
| EURGBP H1 2023–2024 (OOS) | −43.96 USD | 0.9624 |
| EURGBP H1 2023–2026 | +52.10 USD | 1.0249 |
| USDCAD H1 2025–2026 / OOS / полный | −67.65 / +306.31 / +249.30 | 0.9106 / 1.3261 / 1.1401 |
| GBPJPY H1 2025–2026 / OOS / полный | +107.37 / −51.44 / +58.51 | 1.1682 / 0.9345 / 1.0415 |
| EURGBP M5 / M15 / M30 (2025–2026) | −2328.85 / −694.27 / −150.33 | 0.4196 / 0.7010 / 0.9119 |

Знак прибыли меняется при смене периода на всех трёх инструментах; ни один инструмент не даёт прибыли в обоих периодах. Полные прогоны (PF 1.02–1.14 при 257–367 сделках) статистически неотличимы от нуля. На M5–M30 преимущество отсутствует вовсе, что подтверждает доминирование издержек над ожидаемым возвратом. Параметры не подгонялись; попыток «подобрать период» не предпринималось.

---

### Этап 7. S6: относительная стоимость — решение проблемы некоррелированной тройки

- Начало: 2026-11-06 18:27:00 (UTC+02:00)
- Окончание: 2026-11-06 18:45:54 (UTC+02:00)
- Продолжительность: 18 мин 54 с (полное прошедшее время; включает компиляцию, 4 запуска скрипта и подкачку истории)
- Цель: Определить, на каких инструментах может работать S6 (относительная стоимость / возврат спреда), поскольку выбранная тройка EURGBP–USDCAD–GBPJPY намеренно некоррелирована и для S6 не подходит; затем подготовить спецификацию и советник.
- Запрос пользователя: «Хорошо, вариант 1. И продолжай по плану Этап 7»; затем «Скрипт скомпилирован, продолжай».
- Действия:
  - Закрыта S2 (вариант 1: вес 0 в портфеле; правила и причина отказа зафиксированы выше в разделе «S2. Правила стратегии»).
  - Для S6 выбран вариант «добавить коррелированную пару как отдельный инструмент портфеля» вместо синтетического спреда внутри одного символа: пара даёт реальные два ордера на хеджинговом счёте и проверяема тестером.
  - Создан диагностический скрипт `SpreadScreening.mq5`: для каждой пары считает корреляцию лог-доходностей (полная выборка и две половины — проверка стабильности связи), OLS-бету, лог-спред хеджированного отношения, AR(1)-персистентность и half-life, долю баров вне порога |z|≥2, средний возврат спреда через 1/3/5/10/20 баров после события, издержки двух ног в лог-терминах и их отношение к стандартному отклонению спреда.
  - Кандидаты для скрининга: EURUSD/GBPUSD (корреляция 0.809 по Этапу 3), AUDUSD/NZDUSD (0.872), EURUSD/USDCHF (−0.829), EURJPY/GBPJPY (0.841), EURGBP/EURCHF.
  - Скрипт скомпилирован (0 ошибок, 0 предупреждений) и выполнен на H4 (5000 баров), H1 (5000 баров) и D1 (2000 баров) по кандидатам EURUSD/GBPUSD, AUDUSD/NZDUSD, EURUSD/USDCHF, EURJPY/GBPJPY, EURGBP/EURCHF; дневная история для части символов предварительно подкачана запросом баров D1.
- Изменённые файлы: `MQL5/Scripts/DevTools/SpreadScreening.mq5` (создан, версия 1.10 после исправлений), `MQL5/Scripts/DevTools/SpreadScreening.ex5` (собран).
- Ошибки и исправления: (1) В версии 1.00 метрика возврата считалась как сумма без деления на число наблюдений и учитывала каждый бар эпизода, а не только новое пересечение порога — значения `rev10`/`rev20` достигали −13 sd и были бессмысленны. Исправление: введены счётчики по каждому горизонту, усреднение и учёт только новых пересечений порога. (2) Использована функция `MathSign`, которой нет в MQL5: `undeclared identifier 'MathSign'`; заменено на явное условие `((z > 0.0) ? -1.0 : 1.0)`. (3) Проверка `beta <= 0.05` отвергала обратно коррелированные пары; заменено на проверку модуля бета. (4) Для D1 отсутствовала история по USDCHF, EURJPY, EURGBP, EURCHF, NZDUSD — `CopyClose` возвращал −1; после подкачки дневных баров замеры выполнились. (5) Технический инцидент: перезапись `SpreadScreening.mq5` версией 1.10 затёрла ручную правку пользователя (та же замена `MathSign`), из-за чего проверка синтаксиса снова дала ошибку; правка восстановлена и зафиксирована в коде.
- Проверка: Компиляция `SpreadScreening.mq5` — 0 ошибок, 0 предупреждений (compiler build 6296, AVX2). Результаты замеров:

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

Издержки двух ног пренебрежимы относительно разброса спреда (`cost_to_sd` ≤ 0.003): ограничителем является не стоимость, а отсутствие возврата.
- Результат: Ни одна пара не прошла заранее заданные критерии отбора (устойчивая корреляция на обеих половинах, half-life 5–50 баров, `cost_to_sd` < 0.25). На H1 и H4 коэффициент AR(1) составил 0.9985–1.0001: спред хеджированного отношения ведёт себя как случайное блуждание, half-life — от 146 баров до «не стационарен». На D1 возврат появляется (half-life 106–604 дня, средний возврат 0.29–0.66 sd за 20 дней), но это требует удержания позиции неделями и месяцами и выходит за согласованный проектный диапазон M5–H1; устойчивость связи на дневных данных также низкая (EURUSD/GBPUSD: 0.656 в старой половине против 0.807 в новой). Вывод: S6 в форме z-score относительной стоимости на внутридневных таймфреймах статистической основы не имеет, советник S6 не создавался, поскольку отборочный фильтр не прошла ни одна пара. Дальнейшая судьба S6 (замена идеи или перенос в дневной горизонт) вынесена на согласование.
- Статус: DONE

---

### Этап 9. Советник как каркас без претензии на прибыльность

- Начало: 2026-11-09 ≈13:20 (UTC+02:00) — точное время первого действия не зафиксировано (сессия инструментов была прервана, контекст восстановлен); первая зафиксированная правка файла — `Include/Portfolio/PortfolioCore.mqh`, 13:34:43
- Окончание: 2026-11-09 13:45:18 (UTC+02:00)
- Продолжительность: ≈ 25 мин (оценочно, по интервалу 13:20–13:45:18; 4 прогона тестера, 1 компиляция)
- Цель: по решению пользователя зафиксировать рабочую конфигурацию, признать текущий результат, прекратить поиск преимущества и довести советник до состояния каркаса без претензии на прибыльность.
- Запрос пользователя: «По твоим оставшимся вопросам. 1. Зафиксировать. 2. Признать текущий результат. 3. Не нужно больше искать преимущество. 4. Довести советника как каркас без претензии на прибыльность.»
- Действия:
  - `Experts/Portfolio_MultiStrategy.mq5` переведён в версию 1.10. В заголовок файла добавлен статус `STATUS: RISK FRAMEWORK, NOT A PROFITABLE SYSTEM` с фактическими результатами модулей (S1 −138.10 USD на GBPJPY 2023–2026; S2 −43.96 USD вне выборки; S6 без внутридневного возврата спреда, AR(1) 0.9985–1.0001 на H1/H4) и прямым указанием, что прибыльность не гарантируется.
  - Дефолты зафиксированы: `InpS1Enabled=true`, `InpS1Symbols=GBPJPY`, `InpS1RiskPercent=0.35`; `InpS2Enabled=true`, `InpS2Symbols=EURGBP`, `InpS2RiskPercent=0.35`; `InpS6Enabled=false`, `InpS6RiskPercent=0.35`.
  - Добавлены новые входы: `InpMaxRiskOvershoot=3.0` (максимальный перерасход бюджета минимальным лотом), `InpSymbolRiskPct=2.0` (лимит открытого риска на символ), `InpMaxDrawdownPct=20.0` (де-рискинг при просадке эквити).
  - В `Include/Portfolio/PortfolioCore.mqh` добавлены `LotRiskMoney()` (денежный риск лота по дистанции стопа) и `LotFromRiskWithFloor()` — расчёт лота от риска с допуском минимального лота только при перерасходе не более `maxOvershoot`, иначе сетап отклоняется. Поля `m_symbolRiskPct`, `m_maxDrawdownPct`, `m_equityPeak`; методы `UpdateEquityPeak()`, `EquityDrawdownPct()`; проверка просадки в начале `CanOpen()`; лимит на символ теперь использует `m_symbolRiskPct` вместо `m_totalRiskPct`; `Init()` расширен параметрами `symbolRiskPct` и `maxDrawdownPct`.
  - В советнике добавлены `StratIdFromMagic()` (вместо арифметики по magic) и `OvershootLimit()`; расчёт лота в `TryEnter()` и `ProcessPair()` переведён на `LotFromRiskWithFloor()` с явным пропуском сетапа и записью в журнал, если минимальный лот превышает бюджет более чем в 3 раза.
  - Убрано поднятие лота S6 до минимума: пара пропускается, а не пересчитывается. Символы S6 больше не попадают в universe при выключенной S6 (`for(int i = 0; i < (InpS6Enabled ? 2 : 0); i++)`).
  - Добавлены стартовые сообщения `Print` о режиме FRAMEWORK, о лимитах и о результатах модулей, а также отчёт риск-слоя `g_risk.Report()` в `OnDeinit`.
  - Создан эталонный набор параметров `Profiles/Tester/PORT_frozen.set` (4316 байт) из новых дефолтов EA.
- Изменённые файлы: `MQL5/Experts/Portfolio_MultiStrategy.mq5` (версия 1.10), `MQL5/Include/Portfolio/PortfolioCore.mqh` (риск-слой), `MQL5/Profiles/Tester/PORT_frozen.set` (создан), `MQL5/DEVELOPMENT_LOG.md`
- Ошибки и исправления:
  1. `replace_text_in_file` с многострочным поиском не срабатывает (CRLF): `changed: false, replacements: 0`. Правки выполнялись построчно, по одному однострочному анкеру.
  2. Вызов с идентичными `search` и `replace` отклонён инструментом (`search and replace text are identical`) — замены переформулированы.
  3. Попытка заменить блок комментариев заголовка целиком (5 строк) вернула `changed: false` — заменено построчно.
  4. После правок в `ProcessPair()` остались пустые строки и лишние закрывающие скобки — блок очищен 6 однострочными заменами.
  5. В `OnInit` остался осиротевший фрагмент строки `Print` (`"out of sample;"),` и `"standalone backtests showed no confirmed edge.");`) — исправлено двумя заменами до одной корректной строки.
  6. Прогон без `inputs_path` подхватил последний использованный `.set` (`PORT_S2only.set`) и дал ровно +35.22 USD / 367 сделок — потребовалось сгенерировать `PORT_frozen.set` и повторить прогон.
  7. `tester_run_backtest` с `wait=true` возвращает `timed_out: true`, хотя прогон продолжается; ожидание завершено отдельным `tester_wait`.
  8. Расхождение в журнале тестера снято: строка `S1=GBPJPY 0.50%` (13:38:50) относилась к предыдущему прогону с набором `PORT_tight` (0.50%), а не к эталонному; прогон с `PORT_frozen.set` (13:39:16) печатает `S1=GBPJPY 0.35%`. Набор применяется корректно, повторный прогон это подтвердил.
- Проверка:
  - Компиляция `Portfolio_MultiStrategy.mq5`: `Compilation succeeded: 0 errors, 0 warnings found` (733 ms, `AVX2 + FMA3`), `.ex5` 82 616 байт.
  - Стартовые строки в журнале тестера подтверждены: `Portfolio: started in FRAMEWORK mode (no confirmed edge). S1=GBPJPY 0.35% S2=EURGBP 0.35% S6 EURUSD/GBPUSD PERIOD_D1 z_entry=2.00 z_exit=0.30`, `Portfolio: limits symbol=2.00% cluster=1.50% total=3.00% gross=300% margin>=300% drawdown stop=20.0% floor-lot overshoot<=3.0x`, предупреждение об отсутствии подтверждённого преимущества; `OnDeinit` — `Portfolio: stopped, reason=1 | risk: open=0.00 (0.0%), gross=0 (0%), margin=0%`.
  - Полное окно 2023.01.01–2026.10.01 (Model=1, 23 275 баров, 5 550 404 тика) с `PORT_frozen.set`: прибыль +76.15 USD, gross profit 4 177.67, gross loss 4 101.52, PF 1.0186, 947 сделок (1 894 сделки, 409 прибыльных / 538 убыточных), просадка по балансу 484.53 (15.03%), по эквити 15.62%, expected payoff 0.08, recovery factor 0.1503, Sharpe 0.1292, margin level 1 140.73%.
  - Вне выборки 2023.01.01–2024.12.31 (Model=1, 12 407 баров, 2 955 749 тиков) с `PORT_frozen.set`: прибыль −107.04 USD, PF 0.9545, 512 сделок (1 024 сделки, 215 прибыльных / 297 убыточных), просадка по балансу 10.43%, по эквити 11.02%, expected payoff −0.21, Sharpe −0.3422, margin level 1 587.94%.
- Результат:
  - Новые предохранители не изменили результат: полное окно +76.15 USD против прежних +78.70 USD (S1+S2 0.35/0.35 без новых лимитов), PF 1.0186 против 1.0192, 947 сделок против 942. Вне выборки −107.04 USD против −92.48 USD (ухудшение на 14.56 USD за счёт трёх дополнительных сделок, разрешённых минимальным лотом).
  - Лимиты не связывают: лимит на символ 2% и де-рискинг 20% ни разу не сработали; margin level 1 140–1 588% при пороге 300%. Единственное связывающее ограничение — минимальный лот, и теперь он ограничен по перерасходу, а не поднимается молча.
  - Каркас зафиксирован: рабочая конфигурация — S1 0.35% GBPJPY H1, S2 0.35% EURGBP H1, S6 выключена; дефекты риск-слоя (лимит на символ, безлимитное поднятие лота, отсутствие де-рискинга) устранены; подтверждённого преимущества нет, и это заявлено в коде, в стартовых сообщениях и в отчёте.
- Статус: DONE (каркас зафиксирован; прибыльность не подтверждена и не обещается)

---

## Шаблон записи этапа (для последующих записей)

### Этап 8. Мультисимвольный мультистратегийный советник (S1 + S2 + S6 по предположению)

- Начало: 2026-11-06 (точное время первого действия не зафиксировано — сессия инструментов была прервана; первое подтверждённое событие этапа зафиксировано компиляцией и прогоном тестера в 18:52)
- Окончание: 2026-11-06 19:05 (UTC+02:00)
- Продолжительность: не менее 45 мин измеренного активного времени (интервал 18:52–19:05 плюс работа до обрыва сессии)
- Цель: построить портфельную оболочку, приняв S1, S2 и S6 за прибыльные по предположению, и собрать все три модуля в одном советнике с общим риск-слоем, корреляционными ограничениями и лимитом экспозиции.
- Запрос пользователя: «Возьми в разработку S1, S2 и S6, как если бы они были прибыльными, и продолжи создание мультисимвольного советника».
- Действия:
  - Создан риск-слой и портфельные утилиты `Include/Portfolio/PortfolioCore.mqh`: `ENUM_STRAT_ID` (`STRAT_S1=0`, `STRAT_S2=1`, `STRAT_S6=2`), нормализация цены/лота, `LotFromRisk`, `PositionRiskMoney`, `MinStopDistance`, `TradingAllowed`, `SymbolTradeable`, `IsNewBar`, класс `CPortfolioRisk` (rolling-корреляция H1 по 120 барам, кластеры при |corr| ≥ 0.60, лимиты: символ, кластер 1.5%, портфель 3%, gross notional 300% эквити, минимальный margin level 300%).
  - Создан слой стратегий `Include/Portfolio/PortfolioStrategies.mqh`: `CStrategyBase`, `CStrategyBreakout` (S1: канал 20, выход по каналу 10, ADX ≥ 25, SL 2×ATR), `CStrategyMeanReversion` (S2: BB(20,2), z ≥ 2, ADX < 20, цель = средняя, SL 2×ATR, тайм-стоп 24 бара), `CStrategyPairValue` (S6: спред ln A − β ln B, β-окно 200, z-окно 60, z-entry 2.0, z-exit 0.3, z-stop 3.5, SL 3×ATR на ногу, тайм-стоп 40 баров, D1).
  - Создан советник `Experts/Portfolio_MultiStrategy.mq5`: входы по группам (Portfolio, S1 Breakout, S2 Mean Reversion, S6 Pair Value, Portfolio limits), нумерация магиков `InpMagicBase + strategy_id*1000 + symbol_slot`, опрос по таймеру `InpPollSeconds`, обработка модулей и парных ног с проверкой orphan-ноги.
  - Созданы конфигурации тестера: `Profiles/Tester/PORT_GBPJPY_H1.ini` (Model=2, open prices), `PORT_GBPJPY_H1_M1.ini` (Model=1, 1 min OHLC), наборы параметров `PORT_noS6.set`, `PORT_all.set`.
  - Проведена серия прогонов тестера и диагностика по журналам тестера.
- Изменённые файлы: `MQL5/Include/Portfolio/PortfolioCore.mqh` (создан), `MQL5/Include/Portfolio/PortfolioStrategies.mqh` (создан, затем дважды правился), `MQL5/Experts/Portfolio_MultiStrategy.mq5` (создан, затем правился), `MQL5/Profiles/Tester/*.ini`, `MQL5/Profiles/Tester/*.set`, `MQL5/DEVELOPMENT_LOG.md`
- Ошибки и исправления:
  1. Компиляция №1: `5 errors, 5 warnings` — `SYMBOL_TRADE_DISABLED` (не существует) → `SYMBOL_TRADE_MODE_DISABLED`; `double base = SymbolInfoDouble(..., SYMBOL_CURRENCY_BASE)` → `string base = SymbolInfoString(...)`; `ArrayInitialize` для динамических массивов `string`/`datetime` не поддерживается MQL5 → вызовы удалены.
  2. Компиляция №2: `2 errors, 4 warnings` — остались `ArrayInitialize`; неявные преобразования `double`↔`string` в `volumeNotional()` → локальные переменные приведены к `string`.
  3. Компиляция №3: успешно, 0 ошибок, 0 предупреждений.
  4. Прогон тестера с включённой S6 упал без результата: `generated_bars: 0`, `error_id: 5570642`, `error_text: "EURUSD,H1"`. Причина: `g_risk.UpdateCorrelation(true)` в `OnInit` запрашивал `CopyClose` по символам S6 до синхронизации истории внешних символов. Решение: корреляционная матрица заполняется лениво в `OnTimer`.
  5. Незавершённая правка `CStrategyPairValue::Init`: вместо создания хендлов `iATR` был вставлен вызов несуществующего `EnsureHandles()`, рядом остался осиротевший блок `{ Print(...); return false; }` — файл не компилировался. Решение: добавлено объявление и реализация `EnsureHandles()` (ленивое создание `m_hATRA`/`m_hATRB` при `INVALID_HANDLE`), `Atr()` повторяет попытку создания хендла, осиротевший блок превращён в корректную проверку с предупреждением в журнал.
  6. S6 выдавала сигналы, но не открывала сделки: в журнале `S6 legs rejected, lot A=0.0 lot B=0.0`. Причина: при риске 0.5% эквити и стопе 3×ATR дневного масштаба расчётный лот EURUSD/GBPUSD округлялся вниз до нуля (минимум 0.01). Решение: добавлена функция `MinLotIfZero()` и вход `InpAllowMinLot` (по умолчанию `true`) — нога открывается минимальным лотом с записью в журнал, а лимиты проверяются по фактическому риску через `PositionRiskMoney()`.
  7. Прогон с S6 в режиме `Model=2` (open prices) прервался: `EURUSD,H1: wrong timeframe request in Open Prices testing mode`, `rates base receive error`. Причина: в режиме open prices тестер не отдаёт историю внешних символов на других таймфреймах (S6 работает на D1). Решение: создана конфигурация `PORT_GBPJPY_H1_M1.ini` с `Model=1` (1 minute OHLC); прогон выполнен успешно.
- Результаты прогонов (GBPJPY H1, 2025.01.01–2026.10.01, депозит 3000 USD, плечо 1:100):

| Конфигурация | Модель | Прибыль, USD | PF | Сделок | Просадка (balance) |
|---|---|---|---|---|---|
| S1 + S2 (S6 выключена) | open prices | +223.93 | 1.0834 | 432 | 414.20 (13.18%) |
| S1 + S2 (S6 выключена) | 1 min OHLC | +223.70 | 1.0833 | 432 | 414.43 (13.19%) |
| S1 + S2 + S6 | 1 min OHLC | +205.69 | 1.0710 | 460 | 429.47 (13.68%) |

- Проверка: компиляция `Portfolio_MultiStrategy.mq5` — 0 ошибок, 0 предупреждений; прогон с включённой S6 выполнен полностью (10844 бара, 2588917 тиков), в журнале зафиксированы 8 парных входов S6 (2025.10.29, 2025.11.04, 2025.11.13, 2026.01.26, 2026.01.29, 2026.03.09, 2026.06.23, 2026.07.15) с магиками 20263107/20263108 и минимальным лотом 0.01 на ногу.
- Результат: портфельная оболочка работает end-to-end: три модуля сосуществуют на одном счёте, риск-слой считает корреляционные кластеры, суммарный риск, gross notional и margin level; S6 впервые реально открывает хеджированные пары в тестере. Вклад S6 в этом прогоне отрицательный (−18.01 USD к прибыли, +28 ног), что согласуется с ранее зафиксированным отсутствием подтверждённого преимущества на внутридневных горизонтах и является ожидаемым при работе «по предположению».
- Статус: DONE (оболочка собрана); модули приняты как прибыльные по предположению, а не по подтверждённой статистике.

---

#### Этап 8. Балансировка весов, прогон OOS 2023–2024 и решение по S6

- Начало: 2026-11-09 11:23:00 (UTC+02:00)
- Окончание: 2026-11-09 11:44:56 (UTC+02:00)
- Продолжительность: 21 мин 56 с (полное прошедшее время, 10 прогонов тестера)
- Цель: Ответить на три вопроса — как сбалансировать веса модулей и лимиты риска, что показывает проверка вне выборки 2023–2024, и что делать с S6 (дневной горизонт против согласованных M5–H1).
- Запрос пользователя: «Проведи все необходимые действия и напиши мне отчет по этим 3-м вопросам, чтобы я понимал».
- Действия:
  - Созданы конфигурация вне выборки `Profiles/Tester/PORT_OOS_2023_2024.ini` (Model=1, 2023.01.01–2024.12.31) и конфигурация полного окна `Profiles/Tester/PORT_FULL_M1.ini` (Model=1, 2023.01.01–2026.10.01); обе — GBPJPY H1, депозит 3000 USD, плечо 1:100.
  - Созданы наборы параметров для балансировки: `PORT_w035.set` (0.35/0.35/0.35), `PORT_mix.set` (S1 0.5 / S2 0.35 / S6 0.25), `PORT_tight.set` (риски 0.5, кластер 1.0%, портфель 2.0%, gross notional 200%), `PORT_w035_noS6.set`, а также `PORT_S1only.set` и `PORT_S2only.set` для пофакторного разложения.
  - Выполнено 10 прогонов тестера: OOS 2023–2024 (с S6, без S6, только S1, только S2, веса 0.35 с S6 и без S6), полное окно 2023–2026 (веса 0.35 с S6 и без S6, смешанные веса, ужесточённые лимиты, только S1, только S2), окно 2025–2026 при весах 0.35.
  - Из журнала тестера проверена работа риск-слоя: зафиксированы блокировки `Portfolio: S6 blocked on EURUSD: cluster cap` и пропуски сигналов `Portfolio: lot is zero for GBPJPY`.
- Изменённые файлы: `MQL5/Profiles/Tester/PORT_OOS_2023_2024.ini`, `PORT_FULL_M1.ini`, `PORT_w035.set`, `PORT_mix.set`, `PORT_tight.set`, `PORT_w035_noS6.set`, `PORT_S1only.set`, `PORT_S2only.set` (созданы), `MQL5/DEVELOPMENT_LOG.md`.
- Ошибки и исправления:
  1. `tester_run_backtest` с `wait=true` возвращает `timed_out: true`, хотя прогон продолжается в фоне; ожидание завершения выполняется отдельным вызовом `tester_wait` (10 с на полное окно — около 3 мин). Обход не потребовался, режим работы инструмента учтён.
  2. Обнаружен дефект моделирования риска: минимальный лот 0.01 на ногу S6 при стопе 3×ATR D1 даёт фактический риск 48.55 USD (1.6% эквити), что при просадке эквити превышает кластерный лимит 1.5% (`43.46` при эквити 2897 USD) — S6 блокируется, то есть параметр `InpS6RiskPercent` на депозите 3000 USD не управляет риском S6 вовсе.
  3. Побочное следствие того же ограничения: S1 периодически пропускает сигналы с записью `lot is zero for GBPJPY risk=10.19` — расчётный лот от риска 0.35% меньше минимального; подстановка минимального лота реализована только для парных ног S6.
- Проверка: Все 10 прогонов завершены штатно, отчёты получены. Полное окно 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 |

Окно вне выборки 2023.01.01–2024.12.31 (12 407 баров, 2 955 749 тиков, те же условия):

| Конфигурация | Прибыль, USD | PF | Сделок | Просадка (balance) | Sharpe |
|---|---|---|---|---|---|
| S1 0.35% отдельно | −44.26 | 0.9706 | 315 | 9.79% | −0.16 |
| S2 0.35% отдельно | −47.62 | 0.9397 | 194 | 3.79% | −0.77 |
| S1+S2 (0.35/0.35) | −92.48 | 0.9603 | 509 | 10.06% | −0.30 |
| S1+S2+S6 (0.35/0.35/0.35) | −56.21 | 0.9771 | 529 | 9.21% | −0.17 |
| 0.5/0.5/0.5 (базовый) | −133.77 | 0.9632 | 530 | 14.86% | −0.28 |
| 0.5/0.5/0.5 без S6 | −178.49 | 0.9492 | 511 | 15.87% | −0.40 |

Окно 2025.01.01–2026.10.01 (10 844 бара): веса 0.35 — +115.47 USD, PF 1.0570, 458 сделок, просадка 9.99%; веса 0.5 (базовый) — +205.69 USD, PF 1.0710, 460 сделок, просадка 13.68%.

- Результат: (1) Веса и лимиты не являются тем, что определяет результат: все варианты укладываются в диапазон PF 1.003–1.026 при 985–993 сделках, а разброс прибыли (+17.64 … +90.77 USD) меньше одного среднего убытка портфеля. Ужесточение лимитов (кластер 1.0%, портфель 2.0%, gross 200%) не изменило результат (+32.51 против +30.59) — лимиты не связывают, потому что фактические объёмы малы: margin level 780–1170% при пороге 300%, gross notional не достигает 300% эквити. Единственное связывающее ограничение — минимальный лот: он превращает S6 в фиксированный риск 1.6% вместо заданных 0.35–0.5%, а S1 иногда полностью лишает возможности войти. (2) Вне выборки 2023–2024 убыточны оба рабочих модуля (S1 −44.26, S2 −47.62 USD, PF 0.97 и 0.94), то есть прибыль полного окна целиком создана окном 2025–2026: прибыльность S1 и S2 «по предположению» не подтверждается. (3) S6 меняет знак по периодам: +36…+45 USD в 2023–2024, −18 USD в 2025–2026, +12 USD в полном окне; на депозите 3000 USD его вес не масштабируется (всегда минимальный лот 0.01 на ногу), а горизонт (half-life 106–604 дня) выходит за согласованные M5–H1.
- Статус: DONE (анализ и отчёт выданы; решение по составу портфеля остаётся за пользователем)

---

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

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