GapHunter EA — Торговый советник по гэпам для MT5
Описание
GapHunter EA — это автоматизированная торговая система для MetaTrader 5, специализирующаяся на торговле ценовыми гэпами на открытии рынка. Советник сравнивает цену закрытия предыдущего дня (D1 Close) с текущей ценой открытия сессии, и при обнаружении гэпа достаточного размера немедленно открывает позицию в направлении перекрытия гэпа (то есть ожидая возврата цены к уровню предыдущего закрытия).
Перекрытие гэпов — статистически подтверждённое рыночное явление: по данным исследований за 797 недель (2010–2025), гэпы выходного дня на основных форекс-парах перекрываются в 65–80% случаев, зачастую в течение первых нескольких часов торговой сессии.
Ключевой принцип: советник НЕ ждёт закрытия бара для определения гэпа. Обнаружение происходит на первом же тике с допустимым спредом после открытия сессии — это обеспечивает максимально быстрый вход.
Основные возможности
- Мгновенное обнаружение гэпа — сравнение prevDayClose с текущим Bid/Ask на первом тике, без ожидания закрытия бара
- Автоматическое определение сессии — читает торговые часы символа напрямую из спецификации MT5 через SymbolInfoSessionTrade , ручных настроек времени не требуется
- Виртуальный безубыток (VBE) — перевод в безубыток хранится только в памяти, обходя ограничения брокера по стоп-уровням на малых расстояниях
- Частичное закрытие — закрывает часть позиции при достижении заданного % пути до TP, фиксируя прибыль при сохранении открытой позиции
- 4 режима Take Profit — перекрытие гэпа, фиксированные пункты, ATR, авто-уровень
- 3 режима Stop Loss — без стопа, фиксированные пункты, ATR
- Фильтр дня недели — все дни, только понедельник (гэп выходных), все кроме понедельника
- Режим реинвеста — автоматическое масштабирование лота при росте свободной маржи
- Авто-лот по % риска — рассчитывает лот исходя из расстояния до SL и риска в % от баланса
- Проверка маржи — всегда проверяет доступную свободную маржу перед открытием, при нехватке пишет в лог и отменяет сделку
- Универсальное определение filling mode — автоматически выбирает FOK, IOC или RETURN по спецификации брокера
- Восстановление состояния без файлов — всё состояние хранится в памяти; после любого перезапуска (потеря связи, смена ТФ, перекомпиляция) советник восстанавливает контекст из данных терминала
- Принудительное закрытие по расписанию — закрывает позицию в заданное серверное время
- Одна сделка за сессию — гэп проверяется ровно один раз за сессию, повторных входов нет
Входные параметры
Set Info
| Параметр | По умолчанию | Описание |
| SetInfo | "" | Произвольное описание текущего набора настроек. Только информационная строка — никакого влияния на логику торговли. Удобно для идентификации конфигураций на скриншотах и в отчётах. |
Gap Settings (Параметры гэпа)
| Параметр | По умолчанию | Описание |
| MinGapPoints | 100 | Минимальный размер гэпа в пунктах для открытия сделки. Гэпы меньше этого значения игнорируются как рыночный шум. |
| MaxSpreadPoints | 20 | Максимально допустимый спред в пунктах в момент входа. Если спред шире — советник ждёт следующего тика. Это единственная «пауза» в логике — никаких таймерных задержек. |
| GapWindowMinutes | 120 | Сколько минут после открытия сессии советник ещё будет рассматривать вход. Если спред остаётся широким дольше этого окна — сессия пропускается. |
| DayFilter | DAY_ALL | DAY_ALL — торговать гэпы в любой день. DAY_MONDAY_ONLY — только понедельник (гэп выходного дня; статистически наиболее высокий fill rate). DAY_SKIP_MONDAY — внутринедельные гэпы, понедельник пропускается. |
Take Profit / Stop Loss
| Параметр | По умолчанию | Описание |
| TPMode | TP_GAP_FILL | TP_GAP_FILL — TP-ордер на уровне prevDayClose + ручная проверка каждый тик как страховка. TP_FIXED_POINTS — фиксированное расстояние в пунктах. TP_ATR_RR — ATR × ATR_TP_Multiplier . TP_AUTO_LEVEL — ближайший свинг хай/лоу на AtrTimeframe ; при отсутствии уровня фолбэк на gap fill. |
| SLMode | SL_ATR | SL_NONE — без стоп-лосса (использовать совместно с VBE для защиты). SL_FIXED_POINTS — фиксированное расстояние. SL_ATR — ATR × ATR_SL_Multiplier . |
| TP_Points | 150 | Расстояние до TP в пунктах. Используется только при TPMode = TP_FIXED_POINTS . |
| SL_Points | 75 | Расстояние до SL в пунктах. Используется только при SLMode = SL_FIXED_POINTS . |
| AtrTimeframe | PERIOD_D1 | Таймфрейм для расчёта ATR и поиска авто-уровней. |
| ATR_Period | 14 | Период индикатора ATR. |
| ATR_TP_Multiplier | 2.0 | ATR умножается на этот коэффициент для получения расстояния до TP. |
| ATR_SL_Multiplier | 1.0 | ATR умножается на этот коэффициент для получения расстояния до SL. |
| AutoLevel_LookbackBars | 100 | Количество баров для поиска ближайшего свинг хай/лоу при режиме авто-TP. |
| AutoLevel_MinDistPts | 20 | Минимальное расстояние в пунктах от текущей цены до найденного уровня. Уровни ближе игнорируются. |
Partial Close (Частичное закрытие)
| Параметр | По умолчанию | Описание |
| UsePartialClose | true | Включить или выключить частичное закрытие. |
| PC_TriggerPct | 50.0 | При достижении этого % пути от входа до TP срабатывает частичное закрытие. Пример: вход 1.1000, TP 1.1100 → триггер на 50% = 1.1050. |
| PC_VolumePct | 50.0 | Процент от текущего объёма позиции для закрытия на уровне триггера. Пример: позиция 0.02 лота, 50% → закрыть 0.01, оставить 0.01. Остаток продолжает работу с VBE и основным TP. Срабатывает ровно один раз за сделку. |
Virtual Breakeven (Виртуальный безубыток)
| Параметр | По умолчанию | Описание |
| UseVirtualBE | true | Включить или выключить виртуальный безубыток. |
| VBE_ActivationPct | 50.0 | Процент пути от входа до TP, при достижении которого устанавливается уровень VBE. Может совпадать с PC_TriggerPct — частичное закрытие отработает первым, затем активируется VBE для остатка. |
| VBE_CompensationPoints | 5.0 | Пункты, прибавляемые (BUY) или вычитаемые (SELL) из цены входа для покрытия затрат на спред и комиссию. Установите: спред в пунктах + (комиссия за лот × 2) в пунктах. Пример: спред 2 пт + комиссия 1.5 пт × 2 = 5 пунктов. |
Как работает VBE:
- Физически SL не переносится. Советник хранит уровень безубытка в памяти.
- BUY: уровень VBE = цена входа (Ask) + VBE_CompensationPoints × point — мониторинг по Bid
- SELL: уровень VBE = цена входа (Bid) − VBE_CompensationPoints × point — мониторинг по Ask
- Если цена возвращается к уровню VBE — советник закрывает позицию рыночным ордером.
- После любого перезапуска советника VBE переинициализируется: советник ждёт повторного достижения порога активации, что безопаснее чем активировать VBE немедленно без знания текущего контекста.
Money Management (Управление капиталом)
| Параметр | По умолчанию | Описание |
| LotSize | 0.01 | Фиксированный размер лота. Используется при UseAutoLot = false . Также является базовым лотом для масштабирования реинвеста. |
| UseAutoLot | false | Автоматический расчёт лота по % риска и расстоянию до SL. Требует SLMode ≠ SL_NONE . |
| RiskPercent | 1.0 | Риск на сделку в % от баланса счёта. Используется только при UseAutoLot = true . |
| UseReinvest | false | Режим реинвеста. Умножает лот на floor(СвободнаяМаржа / StartDeposit) . |
| StartDeposit | 1000.0 | Опорный размер свободной маржи. При удвоении свободной маржи лот удваивается. Множитель всегда ≥ 1 — лот не уменьшается ниже базового при просадке. Совместим с обоими режимами расчёта лота. |
Session Close (Закрытие)
| Параметр | По умолчанию | Описание |
| ForceCloseHour | 22 | Час серверного времени для принудительного закрытия позиции. |
| ForceCloseMinute | 0 | Минута серверного времени для принудительного закрытия. |
System (Система)
| Параметр | По умолчанию | Описание |
| MagicNumber | 77701 | Уникальный идентификатор позиций советника. Используйте разные значения при запуске нескольких копий. Также включается в комментарий к ордеру: "GapHunter v2.5 #77701" . |
| SlippagePoints | 10 | Максимально допустимое отклонение цены исполнения от запрошенной (проскальзывание) при открытии рыночного ордера. При торговле гэпами на открытии сессии (расширенный спред, пониженная ликвидность) рекомендуется 15–30 пунктов для основных пар. |
Принцип работы — пошагово
- Открытие сессии — SymbolInfoSessionTrade определяет начало новой брокерской сессии для текущего символа и дня.
- Фильтр дня — если DayFilter исключает текущий день, сессия пропускается сразу.
- Проверка спреда — на первом тике со Спред ≤ MaxSpreadPoints советник переходит к следующему шагу. Никакого таймерного ожидания.
- Обнаружение гэпа — prevDayClose = D1 Close[1] сравнивается с текущим Bid (гэп вверх) или Ask (гэп вниз). Если гэп ≥ MinGapPoints — сделка открывается немедленно. Если гэпа нет — сессия помечается завершённой, повторных попыток нет.
- Управление позицией — советник мониторит открытую позицию на каждом тике:
- Частичное закрытие срабатывает на PC_TriggerPct % пути
- VBE активируется на VBE_ActivationPct % и закрывает при возврате цены к уровню БУ
- Перекрытие гэпа (TP_GAP_FILL): ручное закрытие когда Bid/Ask достигает prevDayClose
- Принудительное закрытие — в ForceCloseHour:ForceCloseMinute все собственные позиции закрываются
- Новая сессия — состояние сбрасывается автоматически при открытии следующей сессии
Примеры настройки
Пример 1 — Консервативный (только понедельник, перекрытие гэпа, ATR SL, защита VBE)
DayFilter = DAY_MONDAY_ONLY MinGapPoints = 150 MaxSpreadPoints = 15 TPMode = TP_GAP_FILL SLMode = SL_ATR ATR_Period = 14 ATR_SL_Multiplier = 1.0 UseVirtualBE = true VBE_ActivationPct = 50 VBE_CompensationPoints = 5 UsePartialClose = true PC_TriggerPct = 50 PC_VolumePct = 50 LotSize = 0.01 ForceCloseHour = 22
Подходит для: EURUSD, GBPUSD, USDCHF в понедельник утром.
Пример 2 — Сбалансированный (все дни, ATR TP и SL, частичное закрытие)
DayFilter = DAY_ALL
MinGapPoints = 100
TPMode = TP_ATR_RR
ATR_TP_Multiplier = 2.0
SLMode = SL_ATR
ATR_SL_Multiplier = 1.0
UsePartialClose = true
PC_TriggerPct = 50
PC_VolumePct = 50
UseVirtualBE = true
VBE_ActivationPct = 60
UseAutoLot = true
RiskPercent = 1.0
Пример 3 — Реинвест (растущий счёт)
LotSize = 0.01 UseReinvest = true StartDeposit = 500.0 // Свободная маржа $500 -> лот 0.01, $1000 -> лот 0.02, $1500 -> лот 0.03 и т.д.
Важные замечания
- Советник рассчитан на работу одного экземпляра на одном графике. Для каждого инструмента используйте отдельный график.
- Прикрепляйте советник к любому таймфрейму — для определения гэпа он всегда использует D1, независимо от ТФ графика.
- После любого перезапуска (потеря связи, перекомпиляция, смена ТФ) советник автоматически восстанавливает своё состояние из открытых позиций терминала. Никакой записи в файлы.
- Комментарий к ордеру имеет формат "GapHunter v2.5 #<MagicNumber>" — позиции легко идентифицировать в истории и отчётах.
- Перед запуском убедитесь, что торговые часы символа настроены брокером корректно в спецификации MT5 — советник читает их автоматически.
Рекомендуемые инструменты (Форекс)
| Приоритет | Символы | Причина |
| ⭐⭐⭐⭐⭐ | EURUSD, GBPUSD, USDCHF | Наивысший fill rate (~75–80%), узкий спред |
| ⭐⭐⭐⭐ | USDJPY, AUDUSD | Хороший fill rate, умеренная волатильность |
| ⭐⭐⭐ | USDCAD, NZDUSD, EURJPY | Приемлемый fill rate, более широкие гэпы |
| ⭐⭐ | GBPJPY, XAUUSD | Крупные гэпы, но менее предсказуемое перекрытие |