Советник предоставляет несколько внешних параметров, которые пользователь может изменять для управления его поведением:
| Параметр | Тип | Описание |
| MagicNumber | int | Уникальный идентификатор для сделок советника. |
| InitialLot | double | Размер начального лота для первой сделки в серии. |
| AllowBuy | bool | Флаг, разрешающий советнику открывать сделки на покупку (начальную и по Мартингейлу). |
| AllowSell | bool | Флаг, разрешающий советнику открывать сделки на продажу (начальную и по Мартингейлу). |
| TakeProfit | int | Фиксированный тейк-профит в пунктах/пипсах, используемый при выставлении отложенных ордеров (но не для рыночного исполнения). |
| FindHighLowBackBars | int | Количество предыдущих баров, на которые нужно оглянуться, чтобы определить наивысший максимум и наименьший минимум для первоначального размещения отложенного ордера. |
| ResetAfterBars | int | Количество баров, после которого первоначальные отложенные ордера будут удалены и заново оценены (если позиция не открыта). |
| Параметр | Тип | Описание |
| ReverseMartingale | bool | Если значение равно true, то последующие сделки по Мартингейлу будут совершаться в направлении, противоположном последней сделке в серии (обычно это является анти-Мартингейлом или хеджированием, но в случае false код открывается в том же направлении). Текущая логика предполагает открытие в том же направлении, если значение ReverseMartingale равно false. |
| LotMultiplier | double | Коэффициент, на который умножается размер лота для следующей сделки в убыточной серии (например, 2 .0 означает удвоение лота). |
| SecureProfitMartingaleTarget | double | Общая плавающая прибыль (в валюте счета), при которой вся серия открытых сделок будет закрыта. |
| DistanceMartingalePips | int | Расстояние (в пунктах), на которое цена должна отойти от цены открытия последней сделки, прежде чем будет открыта новая сделка по Мартингейлу. |
| MaxTradesInSeries | int | Максимальное количество сделок, разрешенных в одной серии Мартингейла. |
| Параметр | Тип | Описание |
| AllowMonday... AllowFriday | bool | Флаги, разрешающие или запрещающие торговлю в определенные дни недели. |
| ForbiddenDates | строка | Список дат (формат YYYY.MM.DD), в которые торговля запрещена, разделенный запятыми. |
Устанавливает MagicNumber, режим маржи и отклонение советника. Он сбрасывает переменные состояния Мартингейла ( s_currentLot , s_totalTradesInSeries и т. д.) к их начальным значениям, подготавливая к новому старту.
Простая функция для очистки, печатающая сообщение, когда советник останавливается или удаляется.
Эти функции проверяют текущий день и дату на соответствие заданным пользователем параметрам ( AllowMonday to AllowFriday и ForbiddenDates ), чтобы определить, разрешена ли торговля.
Эта функция обрабатывает открытие новых рыночных позиций (покупка или продажа).
Она проверяет и нормализует размер лота в соответствии с минимальным, максимальным и шаговым размером, установленным брокером.
Она проверяет наличие достаточной свободной маржи с помощью функции CheckMargin().
Выполняется сделка без фиксированного тейк-профита или стоп-лосса (tp_calculated - 0).
Обновляются глобальные переменные состояния Мартингейла: s_currentLot , s_lastOpenPrice , s_seriesType , и s_totalTradesInSeries .
Перебирает все открытые в данный момент позиции и закрывает все, которые были открыты этим советником (при совпадении с MagicNumber).
Эта функция размещает ордера Buy Limit или Sell Limit:
Она проверяет размер лота и достаточность маржи.
Она проверяет цену входа на соответствие минимальному расстоянию брокера ( SYMBOL_TRADE_STOPS_LEVEL ).
Рассчитывает фиксированный тейк-профит ( tp ) на основе входного параметра TakeProfit.
Отправляет торговый запрос. Примечание: Функция UpdateHighLowAndOrders вызывает эту функцию для размещения первоначальных лимитных ордеров на покупку и лимитных ордеров на продажу.
Это механизм первоначального входа, когда не открыто ни одной позиции:
Он просматривает FindHighLowBackBars, чтобы найти Highest High и Lowest Low.
Вычисляется priceSellLimit (Highest High + 1 тик) и priceBuyLimit (Lowest Low - 1 тик).
Проверяется, существуют ли уже ордера Buy Limit и Sell Limit с MagicNumber советника.
Он размещает первоначальный ордер Sell Limit чуть выше недавнего самого высокого максимума и ордер Buy Limit чуть ниже недавнего самого низкого минимума, каждый из которых использует InitialLot.
Ядро логики исполнения советника:
Проверка времени: Предотвращает избыточные вычисления на одном и том же тике.
Проверка фильтра: Если торговля не разрешена по дню/дате, удаляет все отложенные ордера.
Проверка цели прибыли (серийный выход): Если eaHasOpenPositions равен true И totalFloatingProfit равен ≥ SecureProfitMartingaleTarget, то вызывается CloseAllPositions() и сбрасываются все переменные состояния Мартингейла для начала новой серии.
Первоначальное размещение ордеров: Если !eaHasOpenPositions И торговля разрешена, он сбрасывает статус Мартингейла и проверяет, сформировался ли новый бар.
Если новый бар сформирован, проверяется, является ли значение barsCount равным ≥ ResetAfterBars . Если да, то он удаляет отложенные ордера и вызывает UpdateHighLowAndOrders() для размещения новых начальных ордеров. Если нет, он просто вызывает UpdateHighLowAndOrders().
Логика шага Мартингейла: Если eaHasOpenPositions равно true И s_totalTradesInSeries равно $< MaxTradesInSeries`:
Проверяется, не является ли TotalFloatingProfit отрицательным И не сдвинулась ли цена относительно последней открытой сделки по крайней мере на DistanceMartingalePips .
Если оба условия выполнены, он рассчитывает следующий лот путем умножения s_currentLot на LotMultiplier .
Определяется направление ордераToOpen (либо в том же направлении, что и серия, либо в обратном, на основе ReverseMartingale).
Он вызывает OpenTradeLogic(), чтобы открыть новую, умноженную позицию, продолжая серию Мартингейла.
Советник "Babi Ngepet" реализует рискованную, но потенциально высокодоходную стратегию Мартингейла в сочетании с начальным входом на прорыве/развороте диапазона:
Начальный вход: Советник устанавливает начальный лимит на покупку (ниже недавнего минимума) и лимит на продажу (выше недавнего максимума). Это предполагает первоначальное предположение о поведении в диапазоне - советник совершает покупку, когда цена падает до минимума, и продажу, когда цена поднимается до максимума.
Управление торговлей: Если одна из первоначальных сделок срабатывает и позиция переходит в суммарный убыток (отрицательная плавающая прибыль), а цена продолжает двигаться против открытых позиций на определенное расстояние, советник открывает новую позицию в том же направлении с большим размером лота (Мартингейл).
Стратегия выхода: Серия сделок продолжает увеличивать размер лота до тех пор, пока суммарная плавающая прибыль всех сделок серии не достигнет SecureProfitMartingaleTarget, после чего все позиции закрываются, и советник перезапускается для новой серии.
Предупреждение: Стратегия Мартингейла известна высокими просадками и высоким риском потери капитала, поскольку размер лота увеличивается после каждого проигрышного шага.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/64444
AIS Extremum
Индикатор позволяет оценивать вероятность того, что цена достигла своего максимума или минимума.
Trap News MT5
Сценарий для новостей-ловушек с высокой степенью воздействия
Breakout Strategy with Prop Firm Helper Functions
Это обновление "Простой, но эффективной стратегии прорыва". В этом коде я добавил несколько вспомогательных функций для решения задач проп-фирм.
Click on the market chart to create a price alert
Это первая новинка для MetaTrader 5. Теперь вы можете щелкнуть на графике, чтобы создать ценовые оповещения.