GridTrailer_Full_TP_v23.ex5 (20 Kb)
GridTrailer_Full_TP_v23.mq5 (20 Kb)
ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ ТОРГОВОГО СОВЕТНИКА MT5
«GridTrailer с динамическим входом и серийным TP»
Версия 1.0 | Протокол внутреннего двоения
1. ПРЕДМЕТ И ЦЕЛЬ (Артикуляция интенции)
1.1. Предмет
Разработка эксперта (Expert Advisor) для MetaTrader 5, реализующего стратегию сеточного усреднения с динамическим трейлингом отложенных ордеров и денежным Take Profit для серий позиций.
1.2. Цель
Создание обитаемой торговой системы, которая:
Фиксирует прибыль сериями, а не отдельными позициями
Адаптируется к ограничениям API брокера (тип заполнения, частота модификаций)
Имеет явные предохранители от катастрофического риска
Поддерживает осмысленную оптимизацию через Custom-критерий
1.3. ⚠️ АПОРИЯ ЦЕЛИ (Обязательно к прочтению)
Данная стратегия относится к классу неограниченных сеточных систем с усреднением. Математически невозможно создать такую систему, которая была бы одновременно «стабильно прибыльной» и «безопасной при любом рынке». Прибыль в этой стратегии покупается ценой вероятности полного слива депозита. ТЗ ниже артикулирует управление этим риском, а не его устранение. Если исполнитель или заказчик ожидает «гарантированной прибыли без просадок» — это конфабуляция, и данное ТЗ не для них.
2. ФУНКЦИОНАЛЬНЫЕ ТРЕБОВАНИЯ (Онтологический уровень)
2.1. Логика открытия позиций
Требование
Описание
Дефицит/Напряжение
BUY-серия
Первый Buy Limit ставится ниже текущей цены на ModifyStep пунктов. При уходе цены вниз на StepPoints — новый ордер. Максимум MaxOrders ордеров.
Зазор между «хочу ловить каждое движение» и «API запрещает спам модификаций». Решается через дискретный шаг.
SELL-серия
Зеркально. Первый Sell Limit выше цены. Новые ордера при движении вверх.
Аналогично. Раздельный учёт BUY/SELL обязателен.
Множитель лота
NextLot = BaseLot × LotMult^N, где N — номер ордера в серии.
При LotMult > 1.0 риск растёт экспоненциально. Это этический выбор, а не технический параметр.
Ограничение лота
Жёсткая проверка SYMBOL_VOLUME_MAX перед каждым открытием.
Без этого код может отправить недопустимый объём и получить ошибку, оставляя серию неполной.
2.2. Динамический трейлинг отложенных ордеров
Требование
Описание
Дефицит/Напряжение
Движение за ценой
Ближайший невыполненный ордер модифицируется вслед за ценой с шагом ModifyStep.
Ордер нельзя «тащить» плавно. Только дискретная модификация через OrderModify().
Защита API
Минимальная пауза между модификациями: ModifyPauseSec (рекомендуемое ≥ 5 сек).
Без паузы → ошибка 146 / бан аккаунта. Напряжение между скоростью реакции и стабильностью соединения.
Проверка Stops Level
Перед установкой/модификацией проверять SYMBOL_TRADE_STOPS_LEVEL.
Брокеры имеют минимальные дистанции. Игнорирование = гарантированные ошибки.
2.3. Закрытие серий по TP
Требование
Описание
Дефицит/Напряжение
Денежный TP
Серия закрывается, когда сумма POSITION_PROFIT + POSITION_SWAP всех позиций серии ≥ SeriesTPMoney.
POSITION_PROFIT в MT5 уже нетто (комиссия включена). Добавление комиссии = двойной учёт.
Атомарность
Закрытие всех позиций серии как единого действия. При ошибке закрытия хотя бы одной позиции — прерывание цикла.
Частичное закрытие создаёт «позиции-сироты» без контекста усреднения.
Адаптивное заполнение
Тип заполнения (IOC/FOK/RETURN) определяется динамически через SYMBOL_FILLING_MODE.
Жёсткое задание типа = ошибка 10030 на неподдерживаемых символах. Код должен спрашивать брокера, а не предполагать.
Приоритет
Проверка TP выполняется ДО логики открытия новых ордеров.
Фиксация прибыли имеет онтологический приоритет над накоплением риска.
2.4. Предохранители (Этический уровень)
Требование
Описание
Почему обязательно
Max Orders
Жёсткий лимит количества ордеров в одну сторону.
Без лимита мартингейл = бесконечная рекурсия → слив.
Max Drawdown %
При превышении просадки — остановка торговли + Alert.
Аварийная кнопка. Не гарантирует спасение, но даёт шанс.
Проверка баланса
Перед каждым открытием проверять достаточность свободной маржи.
Предотвращение ошибок «Not enough money» в середине серии.
Валидация параметров
В OnInit() проверять MaxOrders > 0, BaseLot ≥ SYMBOL_VOLUME_MIN.
Конфабуляция работоспособности при некорректных input'ах недопустима.
3. НЕФУНКЦИОНАЛЬНЫЕ ТРЕБОВАНИЯ
3.1. Совместимость
MT5 build 4000+ (проверить ENUM_STATISTICS при использовании OnTester)
Поддержка Netting и Hedging режимов (через проверку ACCOUNT_MARGIN_MODE)
Корректная работа в тестере («Каждый тик на основе реальных тиков»)
3.2. Оптимизация
Наличие функции OnTester() для критерия «Custom max»
Формула Custom-критерия должна быть документирована в коде с указанием источника верификации констант
Все input-параметры должны иметь осмысленные диапазоны для оптимизации
3.3. Наблюдаемость
Журнал должен содержать: версию EA, определённый тип заполнения, факт активации OnTester
Каждое закрытие серии: логирование нетто-прибыли, целевого TP, типа заполнения
Ошибки: полный retcode + comment + контекст (ticket, fillType)
4. ⚠️ ЗОНЫ АПОФАТИКИ (Что ТЗ НЕ гарантирует)
Что часто подразумевается
Что реально есть
«Советник будет прибыльным»
Советник реализует механику. Прибыльность зависит от рынка, параметров и удачи.
«TP защитит от убытков»
TP фиксирует прибыль. Убытки ограничиваются только MaxDD и MaxOrders.
«Работает на любом брокере»
Работает на брокерах, поддерживающих стандартные типы заполнения и отложенные ордера. Экзотические условия требуют адаптации.
«Оптимизация найдёт лучшие параметры»
Оптимизация найдёт параметры, максимизирующие выбранный критерий на исторических данных. Это не гарантия будущего.
«Код безопасен»
Код содержит предохранители. Безопасность — свойство конфигурации и управления капиталом, а не кода.
5. КРИТЕРИИ ПРИЁМКИ
№
Критерий
Метод проверки
1
Компиляция без ошибок и предупреждений
MetaEditor
2
Корректная инициализация (лог версии, filling, OnTester)
Запуск в тестере
3
Открытие/модификация ордеров без ошибок 10030/146
Бэктест 3+ месяца
4
Закрытие серий по TP с корректным нетто-расчётом
Визуализация + журнал
5
Срабатывание MaxDD-предохранителя
Искусственное создание просадки
6
Оптимизация по Custom max проходит без ошибок
Запуск оптимизации
7
Отсутствие частичных закрытий при CloseAllOrNone=true
Анализ журнала
8
Документация в коде соответствует реализации
Code review
6. ЭТИЧЕСКАЯ ДЕКЛАРАЦИЯ
Исполнитель и Заказчик признают, что данное ТЗ описывает инструмент управления риском, а не инструмент генерации прибыли. Ответственность за выбор параметров, управление капиталом и принятие решений несёт исключительно Заказчик. Код является медиатором между интенцией и рынком, но не заменяет понимание природы сеточных стратегий.
АРТИКУЛЯЦИЯ СТАТУСА ЭТОГО ТЗ
Это ТЗ является популярным по форме (сеточник с усреднением — один из самых запрашиваемых классов советников) и честным по содержанию (все скрытые дефициты артикулированы явно).
Для заказчика: Это ТЗ защищает вас от получения кода, который «работает, но сливает». Каждый пункт в разделе «Дефицит/Напряжение» — это вопрос, который вы должны задать исполнителю до начала работы.
Для исполнителя: Это ТЗ защищает вас от претензий «советник не приносит миллионы». Раздел «Зоны апофатики» — это юридический и этический щит. Вы реализуете механику, а не обещание.
Для обоих: Это ТЗ — не контракт на прибыль. Это контракт на честность. Если эта честность неприемлема — популярное ТЗ вам не нужно. Вам нужна конфабуляция, и её лучше не писать.
⚠️ ЛЕВОПОЛУШАРНАЯ РЕДУКЦИЯ ОТСУТСТВУЕТ. Это ТЗ не обещает результата. Оно артикулирует условия, при которых результат может быть достигнут, и риски, при которых он не будет. Разница между обещанием и артикуляцией = разница между продажей иллюзии и созданием обитаемого инструмента.
Комментарии (1)
26 igrun Автор Сообщений: 1937 - igrun
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий