Приветствую читателей моего блога!
Эта часть - последняя из серии “Как робот может помочь трейдеру”. Но перед тем, как идти дальше, краткий обзор предыдущих серий :)
- Подключились к серверу, оценили состояние счета.
- Посмотрели какие там у нас позиции открыты на текущий момент, if any.
- Изучили рыночную ситуацию и приняли торговое решение.
Пора действовать - воплощать решение в жизнь.
Отправка торговых приказов (ордеров) для входа в рынок.
Ручное действие
|
Возможность его автоматизировать
|
Войти в позицию по рынку (рыночный ордер)
|
Функция OrderSend. Именно с ее помощью мы входим в рынок.
|
Отправить отложенный ордер
|
И это действие реализуется функцией OrderSend, разница лишь в значении вида торговой операции, который вы задаете при вызове этой функции.
|
Управление открытыми позициями и отложенными ордерами.
Ручное действие
|
Возможность его автоматизировать
|
Изменить параметры отложенного ордера
|
Функция OrderModify.
Пока ордер не исполнился, можно поменять ему некоторые параметры, например, цену открытия. А вот объем ордера поменять нельзя, для этого нужно сначала удалить старый ордер, а потом открыть новый с новым объемом.
|
Установить ограничение на прибыль и/или убыток текущей позиции
|
В этом нам также поможет функция OrderModify.
Но тут на мой взгляд есть некоторая терминологическая путаница, которую стоит обсудить, чтобы лучше понимать биржевые механизмы.
В отношении отложенного ордера (см. выше) еще понятно, что значит “изменить ордер” (modify order). Ведь отложенный ордер - это наш план действий, а думающий трейдер всегда оставляет за собой право передумать и изменить или вовсе отменить ордер.
А вот как понимать “изменить ордер” в отношении уже существующей позиции - загадка. Ее открывающий приказ уже выполнен, так сказать, “поздняк метаться”. Было бы корректнее говорить про PositionModify, но, во-первых, такой функции в MQL не существует, во-вторых, даже это не совсем терминологически корректно.
Для установки ограничений на прибыль и убыток функция OrderModify устанавливает для текущей открытой позиции два ценовых уровня - TakeProfit (TP) и StopLoss (SL) соответственно.
Тем самым мы просим брокера автоматически закрыть текущую позицию в любом из двух случаев (что раньше наступит):
Ничего не напоминает? Таки да, очень похоже на принцип работы отложенных ордеров - 1) Устанавливаем ценовой уровень 2) Цена его достигает 3) Автоматически выполняется некоторое действие.
Так вот, получается, что наши TP и SL - по сути есть два отложенных ордера на соответствующих ценовых уровнях, их действие - закрытие текущей позиции, то есть совершение обратной торговой операции.
На том же рынке NYSE, который можно считать … ну что ли более классическим, именно так и есть. Сначала вы открываете позицию, а потом, при желании конечно же, присобачиваете к ней “отложенники” - SL и/или TP. Никаких “модификаций исходного ордера”.
А что же на Форексе? Финансовый смысл абсолютно тот же самый, но операция называется “модификация ордера”. Остается ответить только: “А вот так!” и развести руками. На Форексе принято SL и TP считать параметрами исходного ордера. Видимо так было придумано для упрощения - вместо трех ордеров один. Упрощение на мой взгляд сомнительное, ну да ладно, привыкнем.
|
Отменить (удалить) отложенный ордер
|
Функция OrderDelete. С “отложкой” опять все более менее понятно, а что там с открытой позицией?
|
Закрыть текущую позицию
|
Функция OrderClose.
И опять вопрос - какой, к лешему, ордер нас заставляют закрывать? Как вообще можно закрыть ордер (приказ)? Приказ можно отдать, исполнить, отклонить, изменить, отменить. Но как его родимого закрыть? Факт есть факт - OrderClose и концы в воду.
Резюмируя терминологические казусы, можно сказать, что на Форекс понятия “ордер” и “позиция” отождествляются.
|
Работа с историей ордеров и сделок (позиций).
Ручное действие
|
Возможность его автоматизировать
|
Просмотреть историю действий с отложенными ордерами и историю сделок
|
В предыдущих частях этой серии статей мы уже упоминали функцию OrderSelect. Она может работать как с текущими ордерами и позициями, так и с их историей.
Вместе с ней упомянем еще функцию OrdersHistoryTotal. Она позволяет узнать глубину истории ордеров и позиций, которую в данный момент времени отображает ваш форекс-терминал.
Именно “в данный момент” и именно “ваш терминал” - важный “подводный камень”.
Дело в том, что пользователь терминала Metatrader может установить произвольный период времени, за который терминал будет отображать историю. Делается это на закладке “История счета” окна “Терминал”. Вот именно за этот период функция OrdersHistoryTotal вам и посчитает количество ордеров и только к ним вы сможете обратиться через функцию OrderSelect.
По незнанию легко попасть в ситуацию, когда ваш робот не сможет увидеть ни один исторический ордер или сделку, хотя при этом вы будете уверены, что они есть.
|
Заключение по вопросу “Как робот может помочь трейдеру?”
Вот и пробежались мы обзорно по основным функциям языка программирования MQL. Что можно сказать по итогу? Как можно ответить на поставленный вопрос?
Как мы убедились, все базовые торговые функции робот успешно выполняет сам. А если ваша торговая стратегия вся может быть описана набором логических конструкций ЕСЛИ-ТО (пример, “Если быстрая скользящая средняя пересекает медленную скользящую среднюю снизу вверх, то входим в длинную позицию.”), то робот может вас заменить полностью, высвободив ваше драгоценное время.
В будущих статьях планирую рассмотреть сквозной пример автоматизации простой торговой стратегии. Как раз, наверно, скользящие средние и возьмем.
До встречи!
С уважением,
Игорь Шепелев
Комментариев нет:
Отправить комментарий