Как устанавливать/модифицировать торговые уровни и не получить ошибку?

Как устанавливать/модифицировать торговые уровни и не получить ошибку?Продолжая работу над экспертом из предыдущей статьи "Изучение свойств позиции в тестере MetaTrader 5", на этот раз внедрим в него ещё целый ряд полезных функций, а также усовершенствуем и оптимизируем те, которые уже есть.

Очень часто на форуме-(ах) по программированию на MQL можно увидеть вопросы от новичков, касающиеся ошибок при установке/модификации торговых уровней (Stop Loss, Take Profit, отложенные ордера). Думаю уже многие знакомы с сообщением в журнале, в котором в конце строки содержится [Invalid stops]. Создадим функции, в которых нормализуются и проверяются значения для торговых уровней на корректность перед открытием/модификацией позиции.

На этот раз эксперт будет снабжён внешними параметрами, которые можно будет оптимизировать в тестере MetaTrader 5. Это уже будет немножко похоже на простую торговую систему. До настоящей торговой системы конечно ещё довольно далеко. Не всё сразу, очень много всего ещё нужно сделать.

Оптимизацию кода в уже имеющихся функциях рассмотрим по ходу статьи. Информационную панель со свойствами позиции пока оставим, так как ещё нужно рассмотреть некоторые свойства позиции, которые не получить стандартными идентификаторами. Нужно обращаться к истории сделок. Но это тема будет раскрыта в одной из следующих, после этой, статей.

Изучение свойств позиции в тестере MetaTrader 5

Изучение свойств позиции в тестере MetaTrader 5В этой статье будем модифицировать эксперта, которого сделали в предыдущей статье "Свойства позиции на пользовательской информационной панели". Рассмотрим ряд вопросов, таких как:

  •    - Отслеживание события новый бар на текущем символе.
  •    - Получение данных баров.
  •    - Подключение торгового класса стандартной библиотеки.
  •    - Создание функции определяющую торговые сигналы.
  •    - Создание функции осуществляющую торговые операции.
  •    - Рассмотрим функцию OnTrade(), которая определяет торговое событие.

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


Свойства позиции на пользовательской информационной панели

Свойства позиции на пользовательской информационной панелиСегодня создадим простого эксперта, который будет показывать свойства позиции на текущем символе во время ручной торговли на пользовательской информационной панели. Данные будут обновляться на каждом тике, что уже намного удобнее, чем постоянно запускать вручную скрипт, который описывался в предыдущей статье "Как получить свойства позиции?". Кстати, в том скрипте я обнаружил одну недоработку. Она заключается в том, что, когда выбирается вариант для получения свойств всех открытых позиций, то, если открытых позиций не обнаружено, программа не сообщает об этом. Я исправил этот недочёт и обновил файл с исходником в конце статьи.

Начнем с графических объектов. Для создания информационной панели нам понадобятся объекты для фона, заголовка, названий свойств позиции и их значений. Для фона и заголовка нужен прямоугольник, который не перемещается вместе с ценой. В качестве такого прямоугольника можно использовать графический объект Прямоугольная метка или Поле ввода. А для названий свойств объектов и их значений будем использовать Текстовые метки.

Прежде чем начать писать код можно сначала подготовить макет для информационной панели. Удобство в том, что все свойства можно быстро изменять в окне настроек и настроить внешний вид для информационной панели.