paranteses desequilibrados

 

Não consigo descobrir a maneira correta de colocar os parênteses. Por favor, explique qual é o meu erro.

int start()
  { 
//----
   { 
   pending = ExistOrders(NULL);
   if (pending > 0 ) {return;}
   positions = ExistPositions(NULL);
   if (positions > 0 ) {return;}
   } else { 
   ticket=OrderSend(Symbol(),OP_SELL,0,1,Bid,3,Bid+20*Point,Bid-40*Point,"",magic,0,Red);}
   }
   
//----
   return(0);
  }
 
liana:

Não consigo descobrir a maneira correta de colocar os parênteses. Por favor, explique qual é o meu erro.

parêntese de fechamento extra enrolado na linha mais longa
 
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);
}

você pode fazer isso, mas então o código leva mais linhas:

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

Você também pode fazê-lo desta maneira, mas depois há inconvenientes na edição:

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

Por exemplo, se você quiser apagar ou mover uma linha com um suporte de abertura, você tem que fazer manipulações extras.

É por isso que a opção 1 é melhor.

 
ilunga:
suporte de fechamento extra encaracolado na linha mais longa

Se eu o remover, diz "espera-se um parêntese final".
 
valenok2003:


Eu copiei sua versão - ela diz "paranteses desequilibrados" novamente
 
liana:

Copiei sua versão e ela diz "paranteses desequilibrados" novamente.

Sim, estou vendo, eu vou consertar isso.
 
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);
}
 

Por algum motivo, todas as suas opções mostram "expectativa de término". Qual é o motivo?

valenok2003:

você pode fazer desta maneira, mas então o código leva mais linhas:

Você também pode fazer isto, mas depois você recebe inconvenientes ao editar:

Por exemplo, se você quiser apagar ou mover uma linha com um suporte de abertura, você tem que fazer manipulações extras.

É por isso que a opção 1 é melhor.

 

Aqui está todo o código. Não importa como eu conserte, diz "parênteses finais esperados" ou "parênteses desequilibrados".

Socorro, estou há uma hora lutando com estes parênteses.
Quero verificar se há pedidos abertos e pendentes e depois abrir um pedido.

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

int start() { 
//----
   pending = ExistOrders(NULL);
   if(pending = True ) return(0); // ???? ???????? ????????? ???????? ?????? ????? ?? ???????
   positions = ExistPositions(NULL);
   if(positions = True ) {
      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);
            }
          }
        }
      }
    }
  }
 

liana:

Aqui está o código completo. Não importa como eu conserte, diz "parênteses finais esperados" ou "parênteses desequilibrados".

Socorro, estou há uma hora lutando com estes parênteses.
Quero verificar se há alguma ordem em aberto e pendente e depois abrir uma ordem.


Sua última função ExistPositions não está fechada. E não há valor de retorno do bool, o que também é um erro. Ou seja, se as condições não forem cumpridas, a função deve, de qualquer forma, devolver algo.

Tenha cuidado ao copiar códigos.

 
valenok2003:

Sua última função ExistPositions não está fechada. E não há valor de retorno do bool, também um erro.
Obrigado (eu copiei erroneamente a função de Kim).
Agora eu corrigi - diz novamente "espera-se um parêntese final
int pending;
int positions;
int ticket;
int magic=576;

int start() { 
//----
   pending = ExistOrders(NULL);
   if(pending = True ) return(0); // ???? ???????? ????????? ???????? ?????? ????? ?? ???????
   positions = ExistPositions(NULL);
   if(positions = True ) {
      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);