Помогите найти несбалансированную левую круглую скобку

 

Может ли кто-нибудь помочь мне найти эту ошибку Несбалансированная левая скобка.... я пробовал себя все комбинации, но это никогда не решает....

и также подскажите, все ли случаи правильно написаны ....

Я пытался написать 4 ma crosses и cci выше 100 или -100 для покупки и продажи ... Заранее спасибо!

//magic numberの定義
#define MAGIC  4649        

//parameter //
extern double Lots = 1.0;     
extern int Slip = 10;         
extern string Comments =  ""; 

extern int FastMA1_p = 34;
extern int SlowMA1_p = 34;
extern int modeMA1 = MODE_SMA;
extern int modeMA2 = MODE_EMA;
extern int MA1Cross_Timeframe = PERIOD_M15;
extern int FastMA2_p = 68;
extern int SlowMA2_p = 68;
extern int CCI_p = 20;
extern int CCI_Buy_Point = 100;
extern int CCI_Sell_Point = -100;
extern int CCI_Timeframe = PERIOD_M30;
extern int Band_p = 6;
extern int Band_Timeframe = PERIOD_M15;



//変数の設定//
int Ticket_L = 0; 
int Ticket_S = 0; 
int Exit_L = 0;  
int Exit_S = 0;   


int start()
  {
  
  
  
    double MAFast1 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 0);
    double MAFast2 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 1);
    double MASlow1 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 0);
    double MASlow2 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 1);
    
    double MAFast3 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 0);
    double MAFast4 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 1);
    double MASlow3 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 0);
    double MASlow4 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 1);
     
     
    double cci1 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 0);
    double cci2 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 1);
    double cci3 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 2);
    
   double bands_upper1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double bands_upper2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 2);
   double bands_lower1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 1);
   double bands_lower2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 2);
    
     
   //Buy exit
   if(   Close[2]>= bands_upper2 && Close[0] <bands_upper1
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    
    
   //Sell exit 
   if(    Close[2] <= bands_lower2 && Close[0] > bands_lower1
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   
    
   //  Buy entry
   if(    ( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
    
    else if  (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
   
    else if  (  MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
   
    else  (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
   
       && ( Ticket_L == 0 || Ticket_L == -1 ) 
       && ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
    }
    
   // Sell entry 
   if(  (MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point)
   
   else if  (  MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 && cci1 < CCI_Sell_Point )
   
  else if (MAFast2 >= MASlow2 && MAFast1 < MASlow1  &&  MAFast3 < MASlow3 && cci1 < CCI_Sell_Point)
   
  else  ( MAFast1 < MASlow1 &&  MAFast3 < MASlow3 && cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point )
       && ( Ticket_S == 0 || Ticket_S == -1 )
      
       && ( Ticket_L == 0 || Ticket_L == -1 ))
    {   
      Ticket_S = (OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);     
    } 
    
     
   return(0);
  }












 
      Ticket_S = (OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);    
 
В строке показаны три открывающие, но только две закрывающие скобки
 
   //  Buy entry
if(( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
else if  (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
else if  (  MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
else  (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
&& ( Ticket_L == 0 || Ticket_L == -1 ) 
&& ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
    }

проверьте приведенную выше мешанину, вот где проблема.

Эта куча бессмыслицы типа "если - то, если - то" должна быть полностью переписана.

Помните, что мы пишем торговое приложение.

Торговое приложение, которое должно работать в режиме нон-стоп, и оно должно работать в критически важном режиме.

Мы не пытаемся быть милыми.

Мы не пытаемся быть модными.

Мы не пытаемся сделать java-приложение или flash-приложение за тридцать минут или меньше.

Нам не нужна фантазия, нам нужна прибыль.

Разбейте этот код на части так, чтобы он был легко читаем.

0/.

 

Спасибо, что так быстро ответили. У меня проблема с пониманием разницы между If else и ||

в чем разница при написании нескольких условий... Нужно ли мне использовать if else или можно просто использовать || ..... Я вообще не понимаю разницы между if else и || ...(-...-)

 

вместо того, чтобы делать это:

if(x>y && y<r && p<=t) run();

можно сделать что-то вроде этого:

flag=1;

if(x<=y) flag=0;

if(y>=r) flag=0;

if(p>t)flag=0;

if(flag==1) run();

Понимаете, о чем я?

так гораздо проще понять, хотя мой пример был написан на скорую руку.

всегда пишите свой торговый код так, чтобы абсолютный идиот мог понять его логику.

В противном случае, возможно, вы не до конца понимаете свой код, и тогда он не будет делать то, что вы хотели.

Понимаете, о чем я?

Есть и другие способы сделать то, о чем я говорю.

если у вас есть другие вопросы, или если вы действительно хотите, чтобы я помог вам упростить ваш вышеприведенный код, просто спросите.

0/.

Видео: Kid Rock - American Badass

 
if( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
{}
else if  (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
{}
else if  (  MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
{}
else
//  (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
/*
&& ( Ticket_L == 0 || Ticket_L == -1 ) 
&& ( Ticket_S == 0 || Ticket_S == -1 ))
*/
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
    }

в вашем коде есть несколько действительно серьезных ошибок.

Давайте посмотрим, сможем ли мы разобраться с ними И в процессе мы научим вас, как это должно работать...

Обратите внимание на фигурные скобки{}, которые я вставил после первой, второй и третьей строк...

вы делали это:

if(...)

else if(...)

else(...)

&& whatever whatever

{}

это просто бессмысленно.

if и else if и else работают следующим образом:

if(comparison) {do this}

else if(comparison) {do this}

else {do this}

Дайте мне знать, если вам нужна еще какая-либо помощь.

0/.

 
smoknfx:

вместо того, чтобы делать это:

if(x>y && y<r && p<=t) run();

можно сделать что-то вроде этого:

flag=1;

if(x<=y) flag=0;

if(y>=r) flag=0;

if(p>t)flag=0;

if(flag==1) run();

Понимаете, о чем я?

так гораздо проще понять, хотя мой пример был написан на скорую руку.

всегда пишите свой торговый код так, чтобы абсолютный идиот мог понять его логику.

В противном случае, возможно, вы не до конца понимаете свой код, и тогда он не будет делать то, что вы хотели.

Понимаете, о чем я?

Есть и другие способы сделать то, о чем я говорю.

если у вас есть другие вопросы, или если вы действительно хотите, чтобы я помог вам упростить ваш вышеприведенный код, просто спросите.

0/.

Видео: Kid Rock - American Badass


Спасибо за помощь... на самом деле я совсем новичок в кодировании и не понимаю, что вы написали выше... Я знаю, что есть много способов написать одну и ту же кодировку ///

Люди, которые привыкли, могут написать то, что я хочу написать в 3 строках, в то время как я пишу 30..... Я знаю, что это требует усилий, чтобы быть в состоянии написать ..... Ну да, я буду благодарен, если вы мне поможете, но начните с того, что вы знаете (-...-;)

Я все еще маленькая рыбка, плавающая в большом океане и не знаю размеров океана ......... Я имею в виду, что я потерялся. Не могли бы вы объяснить мне, как просто избежать 10 миллионов линий, если они не нужны... Я хочу использовать 4 ma пересечения CCI и полосы Болинджера для выхода, как вы

вы можете видеть с вышеуказанным источником.... Спасибо в любом случае. С уважением.

 

Thanks i will try to understand....... SEE what i m doing coz it seems that i do not know what i m doing myself

 

Ладно, хорошо, я не знал, что ты новичок.

Тогда давайте не будем торопиться.

Самое основное, что вы можете сделать, это вот это:

if(
MAFast1 > MASlow1 && 
MAFast4 <= MASlow4 && 
MAFast3 > MASlow3 && 
cci3 < CCI_Buy_Point && 
cci2 <= CCI_Buy_Point && 
cci1 > CCI_Buy_Point )
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
    }

очень элементарно...

Вы ведь понимаете, что && означает AND?

Если вы говорите это в коде: if(x==1 && y==1) {dothis();}

то на самом деле вы говорите так: if(x равно 1 и y равно 1) {dothis();}

дайте мне знать, когда вы будете со мной, или дайте мне знать, когда вы запутаетесь, и я верну вас на путь истинный.

ЕСЛИ ВЫ НОВИЧОК, ДЕЛАЙТЕ ВСЕ ОЧЕНЬ ПРОСТЫМ СПОСОБОМ... НЕ УСЛОЖНЯЙТЕ... БУДЬТЕ ПРОЩЕ...

 
smoknfx:

Ладно, хорошо, я не знал, что ты новичок.

Тогда давайте не будем торопиться.

Самое основное, что вы можете сделать, это вот это:

очень элементарно...

Вы ведь понимаете, что && означает AND?

Если в коде вы говорите так: if(x==1 && y==1) {dothis();}

то на самом деле вы говорите так: if(x равно 1 и y равно 1) {dothis();}

дайте мне знать, когда вы будете со мной, или дайте мне знать, когда вы запутаетесь, и я верну вас на путь истинный.


Спасибо, что научили меня. Да, теперь я понимаю, что вы имеете в виду. Есть 4 пересечения MAs и условия CCI, которые должны быть выполнены перед входом. Однако бывают случаи, когда эти индикаторы выполняют свои условия в разное время...

Например, сначала пересекаются быстрые MAs, затем медленные MAs, затем CCI... или сначала CCI, затем быстрые MAs и медленные MAs. Или сначала медленные МА, потом быстрые МА, а затем CCI ..... Мне нужно закодировать все случаи, если я хочу, чтобы мой советник входил во всех случаях...

Я закодировал все случаи, обратившись к первому источнику, который я скопировал в первом комментарии, или они просто бессмысленны... Здесь я написал это с || вместо If else..... Имеет ли это смысл... все равно написано "Несбалансированная левая скобка", ......

//マジックナンバーの定義
#define MAGIC  4649        

// parameter
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  ""; //コメント

extern int FastMA1_p = 34;
extern int SlowMA1_p = 34;
extern int modeMA1 = MODE_SMA;
extern int modeMA2 = MODE_EMA;
extern int MA1Cross_Timeframe = PERIOD_M15;
extern int FastMA2_p = 68;
extern int SlowMA2_p = 68;
extern int CCI_p = 20;
extern int CCI_Buy_Point = 100;
extern int CCI_Sell_Point = -100;
extern int CCI_Timeframe = PERIOD_M30;
extern int Band_p = 6;
extern int Band_Timeframe = PERIOD_M15;



//variables//
int Ticket_L = 0; 
int Ticket_S = 0; 
int Exit_L = 0;   
int Exit_S = 0;   


int start()
  {
  
  
  
    double MAFast1 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 0);
    double MAFast2 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 1);
    double MASlow1 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 0);
    double MASlow2 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 1);
    
    double MAFast3 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 0);
    double MAFast4 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 1);
    double MASlow3 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 0);
    double MASlow4 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 1);
     
     
    double cci1 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 0);
    double cci2 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 1);
    double cci3 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 2);
    
   double bands_upper1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double bands_upper2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 2);
   double bands_lower1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 1);
   double bands_lower2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 2);
    
     
   //韮uy exit
   if(   Close[2]>= bands_upper2 && Close[0] <bands_upper1
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    
    
   //Sell exit
   if(    Close[2] <= bands_lower2 && Close[0] > bands_lower1
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   
    
   // buy entrt
   if(    ( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )//fast MA first, slow MA and cci later.
    || (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
    || ( ( MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point )
    || (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )
   
       && ( Ticket_L == 0 || Ticket_L == -1 ) 
       && ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
    }
    
   //sell entry
   if(  (MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point)
   || (  MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 && cci1 < CCI_Sell_Point )
      
       ||( MAFast2 >= MASlow2 && MAFast1 < MASlow1  &&  MAFast3 < MASlow3 && cci1 < CCI_Sell_Point)
       ||( MAFast1 < MASlow1 &&  MAFast3 < MASlow3 && cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point )
       && ( Ticket_S == 0 || Ticket_S == -1 )
      
       && ( Ticket_L == 0 || Ticket_L == -1 ))
    {   
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);     
    } 
    
     
   return(0);
  }












Причина обращения: