- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное - Тимур Машнин
Шрифт:
Интервал:
Закладка:
— 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 получим эти хэндлы.
В функции OnTick, мы вводим новые функции OnTradeSignalBuy и OnTradeSignalSell для вычисления сигналов на покупку и продажу.
И функции OnTradeSignalBuyStop и OnTradeSignalSellStop для вычисления сигналов на закрытие позиций на покупку и продажу.
Таким образом, мы должны дополнить код функции OnTick закрытием позиции на покупку и продажу.
В самом начале появления MQL5 закрытие позиции осуществлялось путем отправки противоположного ордера с тем же объемом, то есть закрытие позиции на покупку делалось путем отправки ордера на продажу с тем же объемом, и наоборот, для закрытия позиции на продажу.
То есть платформа MetaTrader 5 изначально создавалась для биржевой торговли с неттинговым учетом позиций.
При неттинговом учете по одному финансовому инструменту можно иметь только одну позицию, поэтому все дальнейшие операции по нему ведут к изменению объема, закрытию или развороту существующей позиции.
Но чтобы расширить возможности трейдеров, в платформу была добавлена вторая система учета — хеджинг.
Теперь по инструменту можно иметь множество позиций, в том числе — разнонаправленных.
Это позволяет реализовывать торговые стратегии с так называемым локированием — если цена пошла против трейдера, он имеет возможность открыть позицию в противоположном направлении.
Поэтому для надежного закрытия позиции мы используем библиотечные классы CPositionInfo и CTrade.
Поэтому включим в код файлы этих классов и создадим их экземпляры.
И в функции OnTick, мы в цикле проверяем все открытые позиции, и с помощью метода PositionClose класса CTrade закрываем позиции определенного типа.
И конечно же мы должны определить функции сигналов торговой системы, так как в методе OnTick для получения сигналов на продажу или покупку вызываются функции OnTradeSignalBuy, OnTradeSignalSell, OnTradeSignalBuyStop, OnTradeSignalSellStop.
Но сначала, перед функциями обратного вызова, мы объявляем входные параметры numberBarOpenPosition — количество баров, на которых будет проверяться пересечение 5WMA и 8 WMA туннеля из 18 ЕМА и 28 ЕМА, и numberBarStopPosition — количество баров, на которых будет проверяться пересечение 5WMA и 8 WMA и достижения ценой вершины или дна.
В функции OnTradeSignalBuy и функции OnTradeSignalSell с помощью хэндлов индикаторов заполняются
