Посмотрите в документации коды возвратов торгового сервера - https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes:
Все приказы на совершение торговых операций отправляются в виде структуры торгового запроса MqlTradeRequest с помощью функции OrderSend(). Результат выполнения этой функции помещается в структуру MqlTradeResult, поле retcode которой содержит код возврата торгового сервера.
Код |
Идентификатор |
Описание |
10004 |
TRADE_RETCODE_REQUOTE |
Реквота |
10006 |
TRADE_RETCODE_REJECT |
Запрос отвергнут |
10007 |
TRADE_RETCODE_CANCEL |
Запрос отменен трейдером |
10008 |
TRADE_RETCODE_PLACED |
Ордер размещен |
10009 |
TRADE_RETCODE_DONE |
Заявка выполнена |
10010 |
TRADE_RETCODE_DONE_PARTIAL |
Заявка выполнена частично |
10011 |
TRADE_RETCODE_ERROR |
Ошибка обработки запроса |
10012 |
TRADE_RETCODE_TIMEOUT |
Запрос отменен по истечению времени |
10013 |
TRADE_RETCODE_INVALID |
Неправильный запрос |
10014 |
TRADE_RETCODE_INVALID_VOLUME |
Неправильный объем в запросе |
10015 |
TRADE_RETCODE_INVALID_PRICE |
Неправильная цена в запросе |
10016 |
TRADE_RETCODE_INVALID_STOPS |
Неправильные стопы в запросе |
10017 |
TRADE_RETCODE_TRADE_DISABLED |
Торговля запрещена |

- www.mql5.com
Возникает две ошибок с кодом 10017 и 10027. Как их можно исправить. Автотрейдинг включен советник может торговать. Данная валюта и счет может торговать.
Код
//+------------------------------------------------------------------+ //| WesTexBot.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include<Trade\SymbolInfo.mqh> #include<Trade\Trade.mqh> #include <Trade\AccountInfo.mqh> input int Magic = 77777; input double Lots = 0.1; input int Deviation=10; input int CountPipsForSetLimit = 20; input int TPReal = 100; input int SLReal = 200; input int TPVirt = 100; input int SLVirt = 200; input int Tral = 50; input int BrakePoint = 50; enum eTypeLimit { Buy_Limit = ORDER_TYPE_BUY_LIMIT, Sell_Limit = ORDER_TYPE_SELL_LIMIT }; input eTypeLimit TypeLimit = Buy_Limit; input ENUM_ORDER_TYPE_FILLING TypeOrder = ORDER_FILLING_RETURN; //--- объект для проведения торговых операций CTrade trade; int OnInit() { //--- объект для работы со счетом CAccountInfo account; ENUM_ACCOUNT_TRADE_MODE account_type=account.TradeMode(); //--- если счет оказался реальным, прекращаем работу эксперта немедленно! //--- выведем тип счета Print("Тип счета: ",EnumToString(account_type)); //--- выясним, можно ли вообще торговать на данном счете if(account.TradeAllowed()) Print("Торговля на данном счете разрешена"); else Print("Торговля на счете запрещена: возможно, вход был совершен по инвест-паролю"); //--- выясним, разрешено ли торговать на счете с помощью эксперта if(account.TradeExpert()) Print("Автоматическая торговля на счете разрешена"); else Print("Запрещена автоматическая торговля с помощью экспертов и скриптов"); //--- допустимое количество ордеров задано или нет //--- объект для получения свойств символа CSymbolInfo symbol_info; //--- зададим имя символа, для которого будем получать информацию symbol_info.Name(_Symbol); //--- получим текущие котировки и выведем symbol_info.RefreshRates(); //Print(symbol_info.Name()," (",symbol_info.Description(),")"," Bid=",symbol_info.Bid()," Ask=",symbol_info.Ask()); //--- получим значения минимальных отступов для торговых операций Print("StopsLevel=",symbol_info.StopsLevel()," pips, FreezeLevel=", symbol_info.FreezeLevel()," pips"); //--- получим количество знаков после запятой и размер пункта Print("Digits=",symbol_info.Digits(), ", Point=",DoubleToString(symbol_info.Point(),symbol_info.Digits())); //--- информация о спреде Print("SpreadFloat=",symbol_info.SpreadFloat(),", Spread(текущий)=", symbol_info.Spread()," pips"); //--- размер контрактов Print("Размер стандартного контракта: ",symbol_info.ContractSize(), " (",symbol_info.CurrencyBase(),")"); //--- минимальный, максимальный размеры объема в торговых операциях Print("Volume info: LotsMin=",symbol_info.LotsMin()," LotsMax=",symbol_info.LotsMax(), " LotsStep=",symbol_info.LotsStep()); trade.SetExpertMagicNumber(Magic); //--- установим допустимое проскальзывание в пунктах при совершении покупки/продажи trade.SetDeviationInPoints(Deviation); //--- режим заполнения ордера, нужно использовать тот режим, который разрешается сервером trade.SetTypeFilling(TypeOrder); //--- какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend() trade.SetAsyncMode(false); return(0); } void OnDeinit(const int reason) { } int GetCountOrder() { int cnt=0; int total=PositionsTotal(); for(int i=0;i<total;i++) { ulong position_ticket=PositionGetTicket(i);// тикет позиции ulong mag=PositionGetInteger(POSITION_MAGIC); // MagicNumber позиции if (mag==Magic) cnt++; } return cnt; } void OnTick() { //int total=PositionsTotal(); //if () double volume=Lots; string symbol=_Symbol; // укажем символ, на котором выставляется ордер int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой double point=SymbolInfoDouble(symbol,SYMBOL_POINT); // пункт double price=0.0; double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); if (Buy_Limit == TypeLimit) { //price=ask-CountPipsForSetLimit*point; price=ask; } else { //price=bid+CountPipsForSetLimit*point; price=bid; } price=NormalizeDouble(price,digits); // нормализуем цену открытия double sl=0; // Stop Loss в пунктах double tp=0; // Take Profit в пунктах ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // тип позиции if(type==POSITION_TYPE_BUY) { sl=NormalizeDouble(bid-SLReal*point,digits); tp=NormalizeDouble(ask+TPReal*point,digits); } else { sl=NormalizeDouble(ask+SLReal*point,digits); tp=NormalizeDouble(bid-TPReal*point,digits); } datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_CURRENT)*5; string comment=StringFormat("Buy Limit %s %G lots at %s, SL=%s TP=%s", symbol,volume, DoubleToString(price,digits), DoubleToString(sl,digits), DoubleToString(tp,digits)); bool res=false; if (Buy_Limit == TypeLimit) { res=trade.BuyLimit(0.1,price); //res=trade.BuyLimit(volume,price,symbol,sl,tp,ORDER_TIME_DAY,expiration,comment); } else { //res=trade.SellLimit(volume,price,symbol,sl,tp,ORDER_TIME_DAY,expiration,comment); } if(!res) { Print("Метод Открытия ордера потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription()); } else { Print("Метод BuyLimit() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); } }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Из-за чего данная ошибка возникает. Как ее исправить?
Пишу так:
mtr.type = ORDER_TYPE_BUY;