Обсуждение статьи "Паттерн "Строитель" в MQL5: Формирование ордеров с помощью цепочек вызовов методов"

Опубликована статья Паттерн "Строитель" в MQL5: Формирование ордеров с помощью цепочек вызовов методов:

При ручном заполнении структуры MqlTradeRequest правила согласованности полей остаются непроверенными, что приводит к скрытым ошибкам конфигурации, проявляющимся во время выполнения. COrderBuilder с плавным интерфейсом (Fluent Interface) для MQL5 поддерживает цепочку вызовов методов с использованием указателей, проверку каждого поля и проверку расположения SL/TP с учетом направления сделки и ограничений брокера по уровню стопов. Метод Send() выполняет четыре этапа: проверку установки всех необходимых флагов, проверку согласованности полей, OrderCheck(), а затем OrderSend(), благодаря чему ошибки конфигурации выявляются на ранней стадии, а код отправки ордеров остается понятным и пригодным для повторного использования.

Каждая отправка ордера в MQL5 начинается с заполнения структуры MqlTradeRequest. Структура содержит двадцать одно поле для задания типа операции, торгового символа, объема, цены, уровней стопов, срока действия, режима исполнения заявки и идентификаторов. На практике большинство полей взаимозависимы. Рыночный ордер не должен содержать отметку времени истечения срока действия. Для лимитного ордера необходимо указать допустимую цену, отличную от текущей рыночной. Стоп-лосс, установленный выше цены входа в длинную позицию, будет отклонен брокером или, на серверах с менее строгими правилами, скорректирован таким образом, что позиция может закрыться сразу после открытия.

Стандартный подход к заполнению этой структуры предполагает последовательное прямое присвоение значений полям, при этом на уровне языка не обеспечивается логическая согласованность полей. Компилятор проверяет типы, но не семантику. Если разработчик задаст request.sl = entry_price + 500 * _Point для ордера на покупку, код останется синтаксически корректным, но при выполнении возникнет ошибка. При этом возвращается ошибка, которая может остаться без внимания. В худшем случае нормализация на стороне сервера может привести к возникновению незащищенной позиции в зависимости от правил брокера.


Автор: Ushana Kevin Iorkumbul