Функция открытия ордера.
{
MqlTradeRequest request;
MqlTradeResult result;
request.action = TRADE_ACTION_DEAL;
request.magic = magic;
request.symbol = sy.name;
request.volume = lots;
request.price = sy.ask;
request.sl = stopLoss>0 ? request.price-stopLoss*sy.point : 0;
request.tp = takeProfit>0 ? request.price+stopLoss*sy.point+sy.spread : 0;
request.deviation = slippage;
request.type = ORDER_TYPE_BUY;
request.type_filling = ORDER_FILLING_IOC;
request.type_time = ORDER_TIME_GTC;
request.comment = orderComment;
request.stoplimit = 0;
if(needFix) fix(request);
bool success = OrderSend(request, result);
commentRequest(request);
commentResult(result);
return success;
}
Вызываю с такими параметрами:
Как минимум, структуры перед заполнением очень желательно обнулить. И разобраться-бы с количеством полей необходимых для заполнения. А уже потом можно разбираться с правильностью параметров.
Эти попытки на форексе?
Как минимум, структуры перед заполнением очень желательно обнулить. И разобраться-бы с количеством полей необходимых для заполнения. А уже потом можно разбираться с правильностью параметров.
Да, на форексе. Обнуление не помогает. Конечно же перепробовал все простые варианты прежде чем писать на форуме.
10013 | TRADE_RETCODE_INVALID | Неправильный запрос |
разбирайтесь с параметром request.type_filling = ORDER_FILLING_IOC;
разбирайтесь с параметром request.type_filling = ORDER_FILLING_IOC;
Все перепробовал, ничего не помогает.
Что-то совсем не понятное.
Весь день бился над открытием ордеров ничего не работало.
Сейчас советник просто стоял на графике я его не трогал, не дорабатывал.
Вдруг все само собой стало работать, так как и должно было работать с самого начала...
Да, на форексе. Обнуление не помогает. Конечно же перепробовал все простые варианты прежде чем писать на форуме.
И на второе моё предложение надо было отреагировать. По документации сколько полей структуры должно быть заполнено? Какие обязательны, а какие заполняются по желанию?
И только потом последуй совету
10013 | TRADE_RETCODE_INVALID | Неправильный запрос |
разбирайтесь с параметром request.type_filling = ORDER_FILLING_IOC;
Проблема тут:
При закомментировании этих строк ошибки нет.
Определённо поле request.type_time - лишнее.
Структура торгового запроса (MqlTradeRequest):
Для отправки приказов на совершение торговых операций необходимо использовать функцию OrderSend(). Для каждой торговой операции необходимо указывать обязательные поля и можно заполнять опциональные поля. Всего предусмотрено семь вариантов отправки торгового запроса:
Request Execution
Торговый ордер на открытие позиции в режиме Request Execution (режим торговли по запросу текущих цен). Требуется указание 9 полей:
- action
- symbol
- volume
- price
- sl
- tp
- deviation
- type
- type_filling
Можно также задать значения полей magic и comment.
Instant Execution
Торговый ордер на открытие позиции в режиме Instant Execution (режим торговли по потоковым ценам). Требуется указание 9 полей:
- action
- symbol
- volume
- price
- sl
- tp
- deviation
- type
- type_filling
Можно также задать значения полей magic и comment.
Market Execution
Торговый ордер на открытие позиции в режиме Market Execution (режим исполнения торговых приказов по рынку). Требуется указание 5 полей:
- action
- symbol
- volume
- type
- type_filling
Можно также задать значения полей magic и comment.
Exchange Execution
Торговый ордер на открытие позиции в режиме Exchange Execution (биржевой режим исполнения торговых приказов). Требуется указание 5 полей:
- action
- symbol
- volume
- type
- type_filling
Можно также задать значения полей magic и comment.
А лучше, рекомендую, используйте стандартную библиотеку - торговый клас CTrade. Вот как это бы выглядело, при чём с распечаткой ошибок, если они есть:
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Прошу помочь разобраться.
Пишу советник. При попытке открыть ордер возникает ошибка 10013. Формулировка просто потрясающая: Не правильный запрос.
И черт его разберет что там в запросе не правильного. Все вроде верно.