Для установки отложенного ордера на покупку или продажу (TRADE_ACTION_PENDING), требуется указание 11 полей структуры MqlTradeRequest: action, symbol, volume, price, stoplimit, sl, tp, type, type_filling, type_time, expiration.
При этом поле type может принимать следующие значения.
— ORDER_TYPE_BUY_LIMIT — отложенный ордер на покупку, при этом текущие цены выше цены ордера.
— ORDER_TYPE_SELL_LIMIT — отложенный ордер на продажу, при этом текущие цены ниже цены ордера.
— ORDER_TYPE_BUY_STOP — отложенный ордер на покупку, при этом текущие цены ниже цены ордера.
— ORDER_TYPE_SELL_STOP — отложенный ордер на продажу, при этом текущие цены выше цены ордера.
— ORDER_TYPE_BUY_STOP_LIMIT — отложенное выставление отложенного ордера типа Buy Limit для торговле на откате, при этом текущие цены ниже цены ордера.
— ORDER_TYPE_SELL_STOP_LIMIT — отложенное выставление отложенного ордера типа Sell Limit для торговли на откате, при этом текущие цены выше цены ордера.
Для изменения параметров отложенного ордера (TRADE_ACTION_MODIFY), требуется указание 7 полей структуры MqlTradeRequest: action, order, price, sl, tp, type_time, expiration.
При этом значение поля order берется из структуры MqlTradeResult результата выставления ордера.
Для удаления отложенного ордера (TRADE_ACTION_REMOVE), требуется указание 2 полей структуры MqlTradeRequest: action и order.
Пример создания эксперта
В качестве основы советника возьмем следующий код.
В этом коде, мы сначала определяем объем торговли в лотах, максимально допустимый спред брокера, при котором мы согласны торговать, и значения стоплосса и тейкпрофита для нашей торговли, которые потом можно оптимизировать.
Также мы определяем флаг flagStopLoss, для того чтобы прекратить торговлю, если поймаем стоплосс.
И здесь общие проверки функции OnInit выделены в отдельную функцию OnCheckTradeInit, а общие проверки функции OnTick выделены в отдельную функцию OnCheckTradeTick.
В функции OnCheckTradeInit мы спрашиваем трейдера разрешение на запуск эксперта на реальном счете, а затем проверяем соединение к серверу, не запрещена ли торговля на стороне сервера, и не запретил ли брокер автоматическую торговлю.
Соответственно в функции OnInit, мы просто вызываем нашу функцию OnCheckTradeInit.
В функции OnCheckTradeTick, общих проверок функции OnTick, мы проверяем соединение к серверу, включена ли кнопка авто-торговли в клиентском терминале, включено ли разрешение на торговлю с помощью эксперта в общих свойствах самого эксперта, и наступление события Margin Call.
Далее мы проверяем наступление события Stop Out и достаточно ли свободных средств на счете для открытия позиции.
И затем, мы осуществляем контроль над спредом брокера, проверяем ограничения на торговые операции по символу, установленные брокером, и проверяем, достаточно ли баров в истории для расчета советника.
Соответственно в функции OnTick, мы сначала вызываем функцию OnCheckTradeTick для осуществления всех проверок.
Затем мы ограничиваем работу эксперта по появлению нового бара на графике символа, а не при каждом тике.
Для этого мы используем статическую переменную last_time, в которую записываем время появления последнего бара.
Далее мы ограничиваем дневную торговлю при получении стоплосса.
Этот шаг конечно же является необязательным и зависит от стратегии трейдера.
Мы приводим его исключительно для демонстрации работы функции OnTrade.
Затем мы проверяем наличие открытой позиции, чтобы не пытаться открыть ее заново, используя флаги BuyOpened и SellOpened.
И получаем цены символа для вычисления сигналов торговой системы.
Цены записываем в структуру MqlRates.
И советник будет отправлять ордера на покупку и продажу при установке флагов TradeSignalBuy и TradeSignalSell в значение true.
Установку значений флагов TradeSignalBuy и TradeSignalSell должна осуществлять торговая система.
Далее, при получении сигналов от торговой системы, мы отправляем ордера на покупку или продажу.
И наконец, в функции OnTrade мы обрабатываем событие стоплосса и устанавливаем флаг flagStopLoss в значение true.
В качестве торговой системы возьмем «Метод Сидуса».
Здесь берется временной интервал — Н1 — часы.
И экспоненциальные скользящие средние (Exponential Moving Average): 18 ЕМА и 28 ЕМА;
А также Weighted Moving Average — 5WMA и 8 WMA.
И торговые сигналы на вход в рынок по Методу Сидуса:
Открытие позиции на покупку: 5WMA и 8WMA скользящие средние пересекают туннель из 18ЕМА и 28ЕМА снизу вверх.
Открытие позиции на продажу: 5WMA и 8 WMA скользящие средние пересекают туннель из 18 ЕМА и 28 ЕМА сверху вниз.
Торговые сигналы на выход из рынка по Методу Сидуса:
На покупку: цена на графике достигла вершины и 5 WMA как бы «ныряет» под 8 WMA скользящую среднюю. Следует закрыть открытую торговую позицию.
На продажу: цена на графике достигла дна и скользящая средняя 5 WMA как бы «прыгает» над 8WMA. Следует закрыть торговую позицию.
Теперь дополним код советника, реализацией Метода Сидуса.
Объявим хэндля используемых индикаторов и их буферы.
И в функции OnInit получим эти хэндлы.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии