Читаем Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное полностью

Ограничить вычисления советника в функции OnTick по появлению нового бара на графике также можно двумя способами, с помощью свойства SERIES_LASTBAR_DATE функции SeriesInfoInteger или с помощью функции CopyTime.



То есть здесь мы проводим вычисления в функции OnTick только при появлении нового бара на графике символа, пропуская все промежуточные тики.

Делаем мы это, получая время открытия последнего бара и используя статическую локальную переменную для сравнения.

Если вы, предположим, хотите, после того как поймали StopLoss, прекратить на сегодня торговлю советником, вам нужно правильно обработать это StopLoss событие.



Как известно, функция OnTrade вызывается при открытии или закрытии позиции, установке, модификации или удалении отложенного ордера, отмене отложенного ордера при нехватке средств либо по истечении срока действия, срабатывании отложенного ордера, модификации открытой позиции.

Поэтому в функции OnTrade нужно выделить только события совершения сделок, а затем из сделок выделить событие закрытия позиции по StopLoss:

Здесь функция HistorySelect запрашивает историю сделок и ордеров за все время, затем с помощью функции HistoryDealsTotal мы получаем индекс последней сделки и сравниваем его со статической переменной, хранящей индекс предыдущей сделки. Таким образом, мы выделяем только события совершения сделок.

С помощью функции HistoryDealGetTicket получаем тикет последней сделки и, используя свойство DEAL_COMMENT функции HistoryDealGetString, получаем комментарий к сделке.

Если комментарий содержит sl, тогда это была сделка закрытия позиции по StopLoss.

flagStopLoss это глобальная переменная, которую мы теперь можем использовать в функции OnTick.



Здесь эксперт прекращает вычисления, если получен StopLoss и не наступил новый дневной бар.

Это флаги flagStopLoss и IsNewBarD1 соответственно.



Так как для каждого финансового инструмента (символа) возможна только одна открытая позиция, в функции OnTick нужно организовать проверку наличия открытой позиции, чтобы не пытаться открыть ее заново, при ее фиксированном объеме.

Здесь функция PositionSelect копирует данные об открытой позиции символа в программное окружение. Затем, с помощью свойства POSITION_TYPE функции PositionGetInteger, выясняется, является ли открытая позиция позицией на продажу или покупку.

Позиции — это наличие купленных или проданных контрактов по финансовому инструменту.

Длинная позиция (Long) образуется в результате покупок в ожидании повышения цены, короткая позиция (Short) — результат продажи актива в расчете на снижение цены в будущем.

На одном счете по каждому финансовому инструменту может существовать только одна позиция.

По каждому символу в любой момент времени может быть только одна открытая позиция — длинная или короткая.

Объем позиции может увеличиваться в результате новой торговой операции в том же направлении.

То есть объем длинной позиции будет увеличен после новой покупки (операции Buy) и уменьшится после продажи (операции Sell).

Позиция считается закрытой, если в результате торговой операции объем обязательств стал равен нулю.

Такая операция называется закрытием позиции.

После выполнения различных проверок в функции OnTick следуют вычисления сигналов торговой системы эксперта.



Как правило, для вычисления сигналов торговой системы требуются исторические данные символа.

Сделать это можно с помощью функции CopyRates и структуры MqlRates, содержащей исторические цены бара символа.

Здесь в массив структуры MqlRates копируются данные последних трех баров, а затем меняется порядок доступа к массиву.

Наконец, после вычислений сигналов торговой системы эксперта можно открывать или закрывать позиции.



Но перед совершением сделки было бы неплохо проверить корректность объема, с которым мы собираемся выйти на рынок.

Сделать это можно, используя свойства SYMBOL_VOLUME_MIN и SYMBOL_VOLUME_MAX.



Открытие и закрытие позиции, изменение объема открытой позиции, изменение значения Stop Loss и Take Profit у открытой позиции, установка, модификация и удаление отложенных ордеров, все это может быть сделано с помощью функции OrderSend.

Тип торговой операции, которую будет пытаться выполнить функция OrderSend, определяется структурой MqlTradeRequest.



Первый параметр action структуры MqlTradeRequest определяет тип торговой операции функции OrderSend с помощью перечисления ENUM_TRADE_REQUEST_ACTIONS.

Это может быть немедленное совершение сделки на покупку или продажу (TRADE_ACTION_DEAL), изменение значений Stop Loss и Take Profit у открытой позиции (TRADE_ACTION_SLTP), установка отложенного ордера на покупку или продажу (TRADE_ACTION_PENDING), изменение параметров отложенного ордера (TRADE_ACTION_MODIFY), удаление отложенного ордера (TRADE_ACTION_REMOVE).

Если вы хотите совершить немедленную сделку на покупку или продажу, в этом случае тип исполнения ордера для данного финансового инструмента или символа определяется брокером.

Перейти на страницу:

Похожие книги

Самоучитель UML
Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы. Цель книги – помочь программистам освоить новую методологию разработки корпоративных программных приложений для последующего применения полученных знаний с использованием соответствующих CASE-инструментов.

Александр Васильевич Леоненков , Александр Леоненков

Зарубежная компьютерная, околокомпьютерная литература / Программирование / Прочая компьютерная литература / Книги по IT
Компьютер для тех, кому за…
Компьютер для тех, кому за…

В наш век высоких технологий без компьютера не обходится практически ни один человек. Но что делать, если вам уже за…, а компьютер вы так и не освоили? Не стоит отчаиваться! Эта книга была написана специально для тех, кто по каким-то причинам не смог освоить его раньше. Легким и доступным языком в книге изложены основные принципы работы на компьютере. Вы узнаете, как создать документ в текстовом редакторе, выстроить таблицы и диаграммы в экселе, освоите графический редактор, который позволит вам рисовать и редактировать фото и рисунки, научитесь самостоятельно подключать принтер и печать, общаться с родными и друзьями по скайпу и ICQ, узнаете, какие бывают игры, как выбрать игру для себя, и многое-многое другое.Никогда не поздно осваивать что-то новое! А уж тем более — компьютер. Он откроет вам целый мир безграничных возможностей. Не упустите свой шанс узнать что-то новое и интересное — дайте компьютеру прочно войти в вашу жизнь. Ведь пользоваться им так же просто, как и обычным телефоном, только в тысячу раз интереснее!

Оксана Грибова

Зарубежная компьютерная, околокомпьютерная литература / Интернет / Программное обеспечение / Прочая компьютерная литература / Книги по IT
Omert@. Руководство по компьютерной безопасности и защите информации для Больших Боссов
Omert@. Руководство по компьютерной безопасности и защите информации для Больших Боссов

Увы, друг мой, защита твоей информации - или хотя бы четкое понимание того, что это такое и как подобная защита должна строиться - это Твое Личное Дело! Не Cosa Nostra (хотя твои проблемы могут стать и Нашим Делом тоже), а Cosa Roba - Твое Дело!  Я знаю, что ты солидный человек, который привык платить, чтобы за него решали проблемы. Однако есть проблемы, которые за тебя никто не решит, - даже за очень большие деньги. Например, заниматься любовью со своей женой должен ты сам. Но кто тебе сказал, что защита твоей информации - это менее интимное дело, и его можно поручить постороннему?  Первая книга по безопасности для Менеджеров, а не для ботаников-компьютерщиков, информации от широко неизвестного благодаря своей репутации эксперта международного класса. Только благодаря ей Большой Босс сможет понять, каким образом он сможет чувствовать себя хотя бы в относительной безопасности!  Ты должен сам знать, что такое безопасность информации! Ни один нанятый специалист не решит это за тебя!  Если ты нанимаешь студента-компьютерщика за двести баксов в месяц и совершенно серьезно считаешь его специалистом по информационной безопасности, - не понятно, как ты вообще смог стать менеджером подобного уровня.

Алекс Экслер , Карл Шкафиц

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT