Запустил пример из справки. Получил вывод.
Уточните, что вы имеете в виду
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" не работает.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В описании параметров написано:
Параметры
action
[in] Тип ордера, может принимать значения из перечисления ENUM_ORDER_TYPE.
Функция принимает значения только ORDER_TYPE_BUY или ORDER_TYPE_SELL, с остальными значениями из ENUM_ORDER_TYPE не работает.
Мой советник работает с отложенными ордерами, поэтому потрачено очень много времени на обнаружение данной ошибки.
Прошу разработчиков доработать функцию "OrderCalcMargin" или исправить описание параметров в документации.