Перевести ошибки не пробовали ?
У вас не соблюден баланс скобок, из-за этого компилятор думает, что еще что-то должно быть дальше. О чем вам и сообщает.
Найдите фигурную скобку, которая закрывает функцию OnTick() - я не пойму, где она должна быть.
Помогите исправить две ошибки.
Выдаёт:
')' - unexpected end of program Test advisor on TMA_Fair.mq4 143 9
'{' - unbalanced parentheses Test advisor on TMA_Fair.mq4 53 2
//+------------------------------------------------------------------+ //| Test advisor on TMA_Fair.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------параметры советника ------------------------------- extern double lots = 0.01; // extern int TakeProfit=60; // extern int StopLoss=100; // extern int Magic=111111111; extern int Slippage=3; //------- Внешние параметры индикатора ------------------------------- extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; //------- Внешние параметры индикатора ------------------------------- double PRICE_HIGH,PRICE_LOW,SL,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits==3 || Digits==5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { PRICE_HIGH= iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0); PRICE_LOW = iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0); if(CountSell()==0 && Bid>=PRICE_HIGH) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"TMA_Fair робот",Magic,0,Red); if(ticket>0) { SL = NormalizeDouble(Bid+StopLoss*Point, Digits); TP = NormalizeDouble(Bid-TakeProfit*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на продажу!"); } } //+------------------------------------------------------------------+ if(CountBuy()==0 && Ask<=PRICE_LOW) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"TMA_Fair робот",Magic,0,Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point, Digits); SL = NormalizeDouble(Ask-StopLoss*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на покупку!"); } } ) //+------------------------------------------------------------------+ if(Ask<=PRICE_LOW && CountSell>0) { for(int i=OrdersTotal()-1; i>=0; 1--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_SELL) if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black)) Print("Ошибка открытия ордера на продажу!"); } } } //+------------------------------------------------------------------+ if(Bid>=PRICE_HIGH && CountBuy>0) { for(int i=OrdersTotal()-1; i>=0; 1--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_BUY) if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black)) Print("Ошибка открытия ордера на покупку !"); } } } //+------------------------------------------------------------------+ int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+
Закрытие фунцкии void OnTick() происходило после оператора условий if(CountBuy(), если я ставлю скобки после фунцкии void OnTick(),
то у меня Выходят ошибки при компилировании :
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 72 4
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 86 4
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 101 4
Я понимаю, что ошибка в операторе условий, но исправить не могу (я только начинаю учить язык MQL4)
Я понимаю, что ошибка в операторе условий, но исправить не могу (я только начинаю учить язык MQL4)
Да нет. После того, как вы поставили скобки после условия - у вас получились три if-оператора вне функций. О чем вам и сообщили.
У вас кроме ошибки в операторе условий - главная ошибка - баланс скобок.
Функция OnTick() должна открываться скобкой, и закрываться ответной. И после этой ответной скобки - должны стоять только описание функций расчета позиций - каждая также открываться скобкой, и закрываться ответной. В вашем же случае - операторы if - непонятно к чему относятся.
Рекомендую сперва все заключить в комментарии (/*.... */ ) -от начала и до конца, и сперва только расставить скобки. Чтобы компилировалось в этом случае без ошибок - с пустыми функциями. А потом, постепенно раскомментаривать строки, проверяя, как будет проходить компиляция.
Закрытие фунцкии void OnTick() происходило после оператора условий if(CountBuy(), если я ставлю скобки после фунцкии void OnTick(),
то у меня Выходят ошибки при компилировании :
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 72 4
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 86 4
'if' - expressions are not allowed on a global scope Test advisor on TMA_Fair.mq4 101 4
Я понимаю, что ошибка в операторе условий, но исправить не могу (я только начинаю учить язык MQL4)
void OnTick() { PRICE_HIGH= iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0); PRICE_LOW = iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0); if(CountSell()==0 && Bid>=PRICE_HIGH) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"TMA_Fair робот",Magic,0,Red); if(ticket>0) { SL = NormalizeDouble(Bid+StopLoss*Point, Digits); TP = NormalizeDouble(Bid-TakeProfit*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на продажу!"); } } //+------------------------------------------------------------------+ if(CountBuy()==0 && Ask<=PRICE_LOW) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"TMA_Fair робот",Magic,0,Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point, Digits); SL = NormalizeDouble(Ask-StopLoss*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на покупку!"); } } //+------------------------------------------------------------------+ if(Ask<=PRICE_LOW && CountSell()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_SELL) if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black)) Print("Ошибка открытия ордера на продажу!"); } } } //+------------------------------------------------------------------+ if(Bid>=PRICE_HIGH && CountBuy()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_BUY) if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black)) Print("Ошибка открытия ордера на покупку !"); } } } } //+------------------------------------------------------------------+ int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+
Да нет. После того, как вы поставили скобки после условия - у вас получились три if-оператора вне функций. О чем вам и сообщили.
У вас кроме ошибки в операторе условий - главная ошибка - баланс скобок.
Функция OnTick() должна открываться скобкой, и закрываться ответной. И после этой ответной скобки - должны стоять только описание функций расчета позиций - каждая также открываться скобкой, и закрываться ответной. В вашем же случае - операторы if - непонятно к чему относятся.
Рекомендую сперва все заключить в комментарии (/*.... */ ) -от начала и до конца, и сперва только расставить скобки. Чтобы компилировалось в этом случае без ошибок - с пустыми функциями. А потом, постепенно раскомментаривать строки, проверяя, как будет проходить компиляция.
Да нет. После того, как вы поставили скобки после условия - у вас получились три if-оператора вне функций. О чем вам и сообщили.
У вас кроме ошибки в операторе условий - главная ошибка - баланс скобок.
Функция OnTick() должна открываться скобкой, и закрываться ответной. И после этой ответной скобки - должны стоять только описание функций расчета позиций - каждая также открываться скобкой, и закрываться ответной. В вашем же случае - операторы if - непонятно к чему относятся.
Рекомендую сперва все заключить в комментарии (/*.... */ ) -от начала и до конца, и сперва только расставить скобки. Чтобы компилировалось в этом случае без ошибок - с пустыми функциями. А потом, постепенно раскомментаривать строки, проверяя, как будет проходить компиляция.
Закоментил всё, оставил только две пары скобок
//int OnInit() { // if(Digits==3 || Digits==5) { // TakeProfit *=10; // StopLoss *=10; // Slippage *=10; } // return(INIT_SUCCEEDED); }
При компиляции вышла ошибка: ')' - not all control paths return a value Test advisor on TMA_Fair.mq4 40 1
( ')' - не все пути управления возвращают значение Советник по тестированию на TMA_Fair.mq4 40 1 )
Закоментил всё, оставил только две пары скобок
//int OnInit() { // if(Digits==3 || Digits==5) { // TakeProfit *=10; // StopLoss *=10; // Slippage *=10; } // return(INIT_SUCCEEDED); }
При компиляции вышла ошибка: ')' - not all control paths return a value Test advisor on TMA_Fair.mq4 40 1
( ')' - не все пути управления возвращают значение Советник по тестированию на TMA_Fair.mq4 40 1 )
Попробуйте заменить int на void или раскомментировать return(INIT_SUCCEEDED);
А вообще то прежде, чем писать программы следует определить цель: 1) научиться программировать - тогда надо начинать с простейших программ. или 2) заработать - тогда это в другом мес
//+------------------------------------------------------------------+ //| Test advisor on TMA_Fair.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------параметры советника ------------------------------- extern double lots = 0.01; // extern int TakeProfit=60; // extern int StopLoss=100; // extern int Magic=111111111; extern int Slippage=3; //------- Внешние параметры индикатора ------------------------------- extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; //------- Внешние параметры индикатора ------------------------------- double PRICE_HIGH,PRICE_LOW,SL,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits==3 || Digits==5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { PRICE_HIGH= iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0); PRICE_LOW = iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0); if(CountSell()==0 && Bid>=PRICE_HIGH) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"TMA_Fair робот",Magic,0,Red); if(ticket>0) { SL = NormalizeDouble(Bid+StopLoss*Point, Digits); TP = NormalizeDouble(Bid-TakeProfit*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на продажу!"); } } //+------------------------------------------------------------------+ if(CountBuy()==0 && Ask<=PRICE_LOW) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"TMA_Fair робот",Magic,0,Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point, Digits); SL = NormalizeDouble(Ask-StopLoss*Point, Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0)) Print("Ошибка модификации ордера на покупку!"); } } //+------------------------------------------------------------------+ if(Ask<=PRICE_LOW && CountSell()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_SELL) if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black)) Print("Ошибка открытия ордера на продажу!"); } } } //+------------------------------------------------------------------+ if(Bid>=PRICE_HIGH && CountBuy()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic && OrderType()==OP_BUY) if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black)) Print("Ошибка открытия ордера на покупку !"); } } } } //+------------------------------------------------------------------+ int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите исправить две ошибки.
Выдаёт:
')' - unexpected end of program Test advisor on TMA_Fair.mq4 143 9
'{' - unbalanced parentheses Test advisor on TMA_Fair.mq4 53 2