Торговая функция "OrderCalcMargin"

 

В описании параметров написано:

Параметры

action

[in]  Тип ордера, может принимать значения из перечисления ENUM_ORDER_TYPE.


Функция принимает значения только ORDER_TYPE_BUY или ORDER_TYPE_SELL, с остальными значениями из  ENUM_ORDER_TYPE не работает.

Мой советник работает с отложенными ордерами, поэтому потрачено очень много времени на обнаружение данной ошибки.

Прошу разработчиков доработать функцию "OrderCalcMargin" или исправить описание параметров в документации.

Документация по MQL5: Торговые функции / OrderCalcMargin
Документация по MQL5: Торговые функции / OrderCalcMargin
  • www.mql5.com
Вычисляет размер маржи, необходимой для указанного типа ордера на текущем счете и при текущем рыночном окружении без учета текущих отложенных...
 

Запустил пример из справки.  Получил вывод.

Уточните, что вы имеете в виду

2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Buy order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Sell order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Buy Limit order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Sell Limit order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Buy Stop order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Sell Stop order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Buy Stop Limit order at price 1.09013 on EURUSD symbol: 218.03 USD
2025.03.17 15:28:34.358 OrderCalcMargin (EURUSD,M15)    Margin required for 1.00 Sell Stop Limit order at price 1.09013 on EURUSD symbol: 218.03 USD
 

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

В примере из справки значения из перечисления ENUM_ORDER_TYPE меняет функция:

//+------------------------------------------------------------------+ 
//| Возвращает тип ордера Buy или Sell по типу ордера                | 
//+------------------------------------------------------------------+ 
ENUM_ORDER_TYPE MarketOrderByOrderType(ENUM_ORDER_TYPE type) 
  { 
   switch(type) 
     { 
      case ORDER_TYPE_BUY  : case ORDER_TYPE_BUY_LIMIT  : case ORDER_TYPE_BUY_STOP  : case ORDER_TYPE_BUY_STOP_LIMIT  : 
        return(ORDER_TYPE_BUY); 
      case ORDER_TYPE_SELL : case ORDER_TYPE_SELL_LIMIT : case ORDER_TYPE_SELL_STOP : case ORDER_TYPE_SELL_STOP_LIMIT : 
        return(ORDER_TYPE_SELL); 
     } 
   return(WRONG_VALUE); 
  } 

В описании параметров написано:

Параметры

action

[in]  Тип ордера, может принимать значения из перечисления ENUM_ORDER_TYPE.

Это описание вводит в заблуждение, что можно передавать любое значение  из перечисления ENUM_ORDER_TYPE.

В описание надо добавить, что тип ордера надо приводить к значению ORDER_TYPE_BUY или ORDER_TYPE_SELL, с остальными значениями из  ENUM_ORDER_TYPE  функция "OrderCalcMargin" не работает.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с...