parantesi sbilanciate - pagina 2

 

In qualsiasi espressione, fate la regola di terminare la stringa con gli elementi della forma prima, e solo dopo scrivete il corpo.

Per esempio, se usate un'istruzione if, mettete una parentesi di apertura e una di chiusura. Se metti una parentesi graffa di apertura, mettine una di chiusura sotto di essa. Quando scrivete la funzione, diciamo, NormalizeDouble, mettete (,Digits); e poi prima della virgola, scrivete ciò che volete arrotondare. In questo modo non farete errori. E con il tempo il tuo occhio si abituerà e vedrai subito questi piccoli dettagli. Se non riesco a trovare subito l'errore, taglio le parti indipendenti del codice e lo compilo, l'errore probabilmente non è in questa parte (se è in due posti), poi lo incollo di nuovo. Se qualche funzione è usata e deve essere controllata, tagliate il suo contenuto e anche.

 
liana:
Grazie (ho copiato male la funzione di Kim).
Ora l'ho corretto - dice "parentesi finale prevista

ci dovrebbe essere una parentesi in più dopo return(False); nell'ultima funzione
 

Prova a mettere inizialmente una serie di parentesi su una nuova linea, e poi inserisci quello che ti serve in esse. E se diverse funzioni sono annidate in una "matrioska", non siate pigri a far rientrare ogni funzione interna di un paio di spazi e poi non ci saranno più parentesi "mancanti" :)

Function1()
{
  action1;
   Function2()
   {
     action2;
     action3;
   }
}
 

Risolto - c'è ancora qualcosa che non va.
Qualcuno potrebbe per favore scrivermi come sarebbe corretto chiamare queste due funzioni Kim e se non ci sono ordini, aprire un ordine.

int pending;
int positions;
int ticket;
int magic=576;

int start() { 
//----
   pending = ExistOrders(NULL);
   if(pending >0 ) return(0); // ???? ???????? ????????? ???????? ?????? ????? ?? ???????
   positions = ExistPositions(NULL);
   if(positions >0) {
      return(0);     // ???? ?? ???????? ???? ?????????
   }
   else { // else ????????? ? ?????????? if
      ticket=OrderSend(Symbol(),OP_SELL,0,1,Bid,3,Bid+20*Point,Bid-40*Point,"",magic,0,Red);
     
   }
//----
   return(0);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Exist pending. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}

//+----------------------------------------------------------------------------+
//|  Exist open positions. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
  }
 
liana:

Risolto - c'è ancora qualcosa che non va.
Qualcuno potrebbe per favore scrivermi come sarebbe corretto chiamare queste due funzioni di Kim e se non ci sono ordini - aprire un ordine.


I parametri devono essere passati alla funzione, sono descritti nella descrizione della funzione

ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0)

dovreste passare questi parametri alla funzione utente quando la chiamate da start()

 
valenok2003:


devono essere passati alla funzione, sono descritti nella descrizione della funzione

dovete passare questi parametri alla funzione utente quando la chiamate dalla funzione start()


Non ho bisogno di quei parametri. Ho solo bisogno di
2. Controlla qualsiasi posizione sul simbolo del grafico corrente
ExistPositions(NULL);
Ma come chiamare correttamente questo parametro?

 
liana:


Non ho bisogno di questi parametri. Ho solo bisogno di
2. Per controllare la disponibilità di qualsiasi posizione sullo strumento grafico corrente
ExistPositions(NULL);
Ma come chiamare correttamente questo parametro?

hai bisogno di controllare se ci sono posizioni aperte?
 
liana:


Non ho bisogno di questi parametri. Ho solo bisogno di
2. Controlla qualsiasi posizione sul simbolo del grafico corrente
ExistPositions(NULL);
Ma come chiamare correttamente questo parametro?


Chiamarlo senza parametri:

if(!ExistPositions()){// nessuna posizione aperta

if(!ExistOrders()){// no pending

 

Non posso leggerlo, il mio MetaEditor non supporta la codifica russa

 
liana:

Non posso, MetaEditor non supporta la codifica russa


Cerca il suo thread: https://www.mql5.com/ru/forum/107476, è tutto lì. Da pagina 10 in poi, credo.
Motivazione: