Проверить максимальный разрешенный объем ордера.
double maxVol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция?
Ситуация: есть позиция sell 7 лотов , есть профит положительный, пытаемся закрыть, выполняется код
MqlTradeRequest MtRequest={0};
MqlTradeResult MtResult={0};
MtRequest.action= TRADE_ACTION_DEAL;
MtRequest.magic = 888;
MtRequest.symbol = symbol;
MtRequest.volume = vol;
MtRequest.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
MtRequest.deviation=3;
MtRequest.type=ORDER_TYPE_BUY;
MtRequest.type_filling=ORDER_FILLING_FOK;
if(!OrderSend(MtRequest,MtResult))
{
return(false);
}
и получаем ошибку 2012.01.12 01:55:00 failed instant buy 7.00 EURUSD at 1.27108 [Invalid volume]
Как быть ?
Такой команды в MQL5 функциях нет. Все торговые операции выполняются одной функцией: OrderSend() с предварительным заполнением структуры MqlTrade Request. Программист должен сам контролировать на валидность все заполняемые параметры. Либо за него это сделает выполняемая по умолчанию терминалом и сервером функция OrderCheck() с указанием кода ошибки, при неверно заданных параметрах.
Но можно закрыть позицию одной командой, если воспользоваться стандартным классом CTrade. Метод этого класса PositionClose()
#include <Trade\Trade.mqh> CTrade trade; ..... // Закрытие позиции: trade.PositionClose(symbol); .....
сделает за Вас всю необходимую работу: разобьёт позицию на допустимые объёмы в сделке и закроет её по частям.
Вообще, стандартные классы сильно облегчают жизнь программисту, избавляя его от излишней головной боли и экономя его время.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция?
Ситуация: есть позиция sell 7 лотов , есть профит положительный, пытаемся закрыть, выполняется код
MqlTradeRequest MtRequest={0};
MqlTradeResult MtResult={0};
MtRequest.action= TRADE_ACTION_DEAL;
MtRequest.magic = 888;
MtRequest.symbol = symbol;
MtRequest.volume = vol;
MtRequest.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
MtRequest.deviation=3;
MtRequest.type=ORDER_TYPE_BUY;
MtRequest.type_filling=ORDER_FILLING_FOK;
if(!OrderSend(MtRequest,MtResult))
{
return(false);
}
и получаем ошибку 2012.01.12 01:55:00 failed instant buy 7.00 EURUSD at 1.27108 [Invalid volume]
Как быть ?