- MT Api Зависает функция Login
- Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6.
- Новая версия платформы MetaTrader 4 build 1160
Проблема заключается в попытке изменить уровень, к примеру TakeProfit, когда ордер уже исполнился. Сервер выдает ошибки либо Common Error, либо Error2. После эксперт зависает, помогает перезагрузка и перекомпиляция. В программировании не очень силён, избавиться от таких зависаний не могу. Моет быть это связано как то с демо счетом?
Зацикливание в функции, скорее всего.
bool CheckModifyOrder(string SymforTrade, int order, double Price, double SL, double TP, color col){ int err; int N; // ??????? Где инициализация ????? int Counts = 10; double dBid = MarketInfo(SymforTrade,MODE_BID); while(N < Counts){ for(int g = OrdersTotal() - 1; g >= 0; g--){ if(OrderSelect(g,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==SymforTrade && OrderMagicNumber()==MAGIC && OrderType()==order){ if(OrderOpenPrice()==Price && OrderTakeProfit()==TP)return; if(OrderModify(OrderTicket(),Price,SL,TP,0,col)) {Alert ("!!! Ордер ",SymforTrade," изменен Price = ",Price," SL = ", SL," TP = ", TP); return(true);} N++; // !!!!!!!!! Если выделенное выше условие не будет выполняться, то счетчик // не будет увеличиваться - цикл может стать бесконечным....... err=GetLastError(); if(err > 0){ if(OrderType() == OP_BUY) {Comment(" ! ! ! !!! ERROR !!! Ошибка изменения части ордера Buy !.. Err="+err+" "+ErrorDescription(err)); Print(" ! ! ! !!! ERROR !!! Ошибка изменения части ордера Buy !.. Err=",err," ",ErrorDescription(err));} if(OrderType() == OP_SELL) {Comment(" ! ! ! !!! ERROR !!! Ошибка изменения части ордера SELL !.. Err="+err+" "+ErrorDescription(err)); Print(" ! ! ! !!! ERROR !!! Ошибка изменения части ордера SELL !.. Err=",err," ",ErrorDescription(err));} }}} Sleep(1000); RefreshRates(); } Comment("!!! Требуется ручное изменения ордера ",SymforTrade," № ",OrderTicket()," !!! " ); Print("!!! Требуется ручное изменения ордера ",SymforTrade," № ",OrderTicket()," !!! ") ; return(false); }
Зацикливание в функции, скорее всего.
Не понял, почему не могу N проинициализировать там? есть какие то определенные условия?
Покажите место, где у Вас инициализация переменной N, то есть присваивание начального значения, перед его использованием ? Я такого не вижу - может, смотрю невнимательно ? Где инициализация переменной Count - вижу.
Но зацикливается не по этой причине: у Вас операция инкремента не всегда выполняется. Возможно наличие таких условий, что вообще не выполнится или сработает менее нужного количества раз - например, если количество ордеров менее 10 (значения переменной Count и то это в том случае, если переменная N будет проинициализирована нулем).
Не понял, почему не могу N проинициализировать там? есть какие то определенные условия?
объясню корректней, у вас переменная объявляется, но не инициализируется, это разные вещи
int N=0;
вот так надо, а N++; перенесите сразу под while(N<Counts)
а вообще советую совсем отказаться от while
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования