Aiuto per trovare una parentesi sinistra sbilanciata

 

Qualcuno potrebbe aiutarmi a trovare questo errore di parentesi sinistra sbilanciata.... ho provato tutte le combinazioni ma non si risolve mai....

e anche un consiglio se tutti i casi sono scritti correttamente ....

ho provato a scrivere le croci 4 ma e cci sopra 100 o -100 per comprare e vendere ... Grazie in anticipo!

//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);    
 
La linea mostra tre parentesi di apertura ma solo due di chiusura
 
   //  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);
    }

Controllate l'accozzaglia di cui sopra, ecco dov'è il problema.

quel mucchio di if else if else nonsense deve essere riscritto interamente.

Tenete a mente che quello che stiamo facendo qui è che stiamo scrivendo un'applicazione di trading.

un'applicazione di trading che ha bisogno di essere eseguita in modo nonstop e ha bisogno di essere eseguita in un modo di tipo mission critical.

Non stiamo cercando di essere carini.

Non stiamo cercando di essere fantasiosi.

non stiamo cercando di tirare fuori un'applicazione java o un'applicazione flash in trenta minuti o meno.

non vogliamo la fantasia, vogliamo il profitto.

spezzettate il codice in modo che sia facilmente leggibile.

zero/.

 

Grazie per aver risposto così velocemente. Ho problemi a capire la differenza tra If else e ||

qual è la differenza quando si scrivono diverse condizioni... Devo usare if else o va bene usare solo || .... Non capisco affatto la differenza tra if else e || ...(-..-)

 

invece di fare così

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

forse fare qualcosa del genere:

flag=1;

if(x<=y) flag=0;

se(y>=r) flag=0

se(p>t)flag=0;

se(flag==1) run();

vedete cosa intendo?

è molto più facile da seguire, anche se il mio esempio sopra è stato scritto velocemente.

scrivete sempre il vostro codice di trading in modo che un idiota assoluto possa seguirne la logica.

Altrimenti, forse non capite completamente il vostro codice e allora non farà quello che volevate che facesse.

capite cosa intendo?

e ci sono anche altri modi per fare quello di cui sto parlando.

se avete altre domande, o se volete davvero che vi aiuti a semplificare il codice di cui sopra, chiedete pure.

zero/.

Video: 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);
    }

ci sono degli errori molto gravi nel tuo codice.

Vediamo se riusciamo a risolverli E nel processo ti faremo da tutor su come dovrebbe funzionare...

nota le parentesi graffe{} che ho inserito dopo la prima, la seconda e la terza riga...

stavi facendo questo:

if(...)

else if(...)

else(...)

&& qualunque cosa qualunque

{}

questo non ha senso.

if and else if and else funziona così:

if(confronto) {fare questo}

else if(confronto) {fare questo}

else {fare questo}

Fammi sapere se hai bisogno di altro aiuto.

zero/.

 
smoknfx:

invece di fare così

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

forse fare qualcosa del genere:

flag=1;

if(x<=y) flag=0;

se(y>=r) flag=0

se(p>t)flag=0;

se(flag==1) run();

vedete cosa intendo?

è molto più facile da seguire, anche se il mio esempio sopra è stato scritto velocemente.

scrivete sempre il vostro codice di trading in modo che un idiota assoluto possa seguirne la logica.

Altrimenti, forse non capite completamente il vostro codice e allora non farà quello che volevate che facesse.

capite cosa intendo?

e ci sono anche altri modi per fare quello di cui sto parlando.

se avete altre domande, o se volete davvero che vi aiuti a semplificare il codice di cui sopra, chiedete pure.

zero/.

Video: Kid Rock - American Badass


Grazie per l'aiuto... infatti sono completamente nuovo alla codifica e non capisco quello che hai scritto sopra... So che ci sono molti modi per scrivere la stessa codifica ///

Le persone che sono abituate possono scrivere quello che voglio scrivere in 3 righe mentre io scrivo 30.... So che ci vogliono sforzi per essere in grado di scrivere .... Beh, sì, apprezzerei se potessi aiutarmi, ma inizia da dove sai (-..-;)

Sono ancora un piccolo pesce che nuota nel grande oceano e non conosco la dimensione dell'oceano ........ Quello che voglio dire è che mi sono perso....... Potreste spiegarmi come evitare semplicemente 10 milioni di linee se non sono necessarie... Voglio usare 4 ma cross CCI e Bolinger bands per uscire come

può vedere con la fonte di cui sopra.... Bene grazie in ogni modo. Cordiali saluti.

 

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

 

Ok, va bene, non sapevo che fossi un principiante.

Allora prendiamola con calma.

la cosa più elementare che puoi fare è questa:

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);
    }

molto semplice...

ti rendi conto che && significa AND, vero?

se dici questo nel codice: if(x==1 && y==1) {dothis();}

in realtà stai dicendo questo: if(x uguale a 1 e y uguale a 1) {dothis();}

fammi sapere quando sei d'accordo con me finora, o fammi sapere quando ti confondi e ti rimetterò in pista.

SE SEI UN PRINCIPIANTE, FAI LE COSE IN MODO MOLTO SEMPLICE... NON COMPLICARE ECCESSIVAMENTE LE COSE... TIENILO SEMPLICE...

 
smoknfx:

Ok, va bene, non sapevo che fossi un principiante.

Allora prendiamola con calma.

la cosa più elementare che puoi fare è questa:

molto semplice...

ti rendi conto che && significa AND, vero?

se dici questo nel codice: if(x==1 && y==1) {dothis();}

in realtà stai dicendo questo: if(x uguale a 1 e y uguale a 1) {dothis();}

Fammi sapere quando sei d'accordo con me finora, o fammi sapere quando ti confondi e ti rimetterò in pista.


Grazie per avermi insegnato. Sì, fino ad ora ho capito cosa intendi. Ci sono 4 MA incrociate e condizioni CCI da completare prima di entrare. Tuttavia ci sono casi in cui questi indicatori completano le loro condizioni in tempi diversi.

Per esempio le MA veloci si incrociano prima e poi le MA lente e poi il CCI... o il CCI prima e poi le MA veloci e le MA lente. Oppure prima le Slow MAs poi le Fast MAs e poi il CCI per ultimo .... Ho bisogno di codificare tutti i casi se voglio che il mio EA entri in tutti i casi...

Ho codificato tutti i casi guardando la prima fonte che ho copiato nel primo commento o sono solo senza senso... Qui ho scritto con || invece di If else.... Questo ha senso... dice ancora la parentesi sinistra sbilanciata però,,.....

//マジックナンバーの定義
#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);
  }












Motivazione: