или лишняя скобка где-то или не хватает. Комментируй логически
завершенные блоки кода и компилируй, пока не найдешь место.
Опубликуйте полный код, пожалуйста.
Все похоже на определение функции внутри другой функции. Где-то потеряли фигурную скобку. Обычная ситуация у программистов, игнорирующих структурное форматирование текста.
Все похоже на определение функции внутри другой функции. Где-то потеряли фигурную скобку. Обычная ситуация у программистов, игнорирующих структурное форматирование текста.
Люди добрые!
Таже самая ошибка... не могу понять...помогите пожалуста!
В нижних пяти строчках.
extern double Lots = 0.1; double Points; int init () { Points = MarketInfo (Symbol(), MODE_POINT); return(0); } int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } if(buys>0) return(buys); else return(-sells); } double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); int losses=0; lot=NormalizeDouble(AccountFreeMargin()*0.02/1000.0,1); if(3>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/3,1); } if(lot<0.1) lot=0.1; return(lot); } void CheckForOpen() { double apglav1; double apglav2; double apsig1; double apsig2; int res; if(Volume[0]>1) return; apglav1 =iCustom(NULL,0,"Caska",0,1); // первая линия на 1м баре apsig1 =iCustom(NULL,0,"Caska",1,1); // вторая линия на 1м баре apglav2 =iCustom(NULL,0,"Caska",0,2); // первая линия на 2м баре apsig2 =iCustom(NULL,0,"Caska",1,2); // вторая линия на 2м баре if (apglav2<apsig2 && apglav1>apsig1) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,"",MAGICMA,0,Blue); return; } if (apglav2>apsig2 && apglav1<apsig1) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,"",MAGICMA,0,Red); return; } } void CheckForClose() { double apglav1; double apglav2; double apsig1; double apsig2; if(Volume[0]>1) return; apglav1 =iCustom(NULL,0,"Caska",0,1); // первая линия на 1м баре apsig1 =iCustom(NULL,0,"Caska",1,1); // вторая линия на 1м баре apglav2 =iCustom(NULL,0,"Caska",0,2); // первая линия на 2м баре apsig2 =iCustom(NULL,0,"Caska",1,2); // вторая линия на 2м бар for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; if(OrderType()==OP_BUY) { if(apglav2>apsig2 && apglav1<apsig1) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } if(OrderType()==OP_SELL) { if(apglav2<apsig2 && apglav1>apsig1) OrderClose(OrderTicket(),OrderLots(),Ask,3,White); break; } void start() { if(Bars<100 || IsTradeAllowed()==false) return; if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); }
Могу предложить способ для локализации поиска таких ошибок. Берете функцию переносите ее в пустой заголовочный (необязательно) файл и компилите. Пройдет - не она. И т.д. Разумеется, если есть глоб. переменные, объявленные в заголовке и используемые в ф-ии, то переносить лучше всего код целиком, а потом уничтожать лишнее.
А в вашем коде в последнем цикле закрывающей фиг.скобки не хватат. Перед void start()
спасибо!)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Немогу понять, где ошибка. Помогите люди добрые.
Вот что выдает MetaEditor после компиляции:
'(' - function definition unexpected
а вот процедура на которую указывает ошибка: