paréntesis desequilibradas - página 2

 

En cualquier expresión, establezca la regla de terminar la cadena con los elementos de la forma primero, y sólo entonces escribir el cuerpo.

Por ejemplo, si utiliza una sentencia if, ponga un paréntesis de apertura y otro de cierre. Si pones una llave de apertura, pon una de cierre debajo. Cuando escribas la función, digamos, NormalizarDoble, pon (,Dígitos); y luego, antes de la coma, escribe lo que quieres redondear. De este modo no cometerá errores. Y con el tiempo tu ojo se acostumbrará y verás inmediatamente estos pequeños detalles. Si no puedo encontrar el error de inmediato, corto las partes independientes del código y lo compilo, el error probablemente no está en esta parte (si está en dos lugares), luego lo vuelvo a pegar. Si se utiliza alguna función y hay que comprobarla, recorta su contenido y también.

 
liana:
Gracias (he copiado mal la función de Kim).
Ahora lo he corregido - dice "paréntesis final esperado

debería haber un paréntesis más después de return(False); en la última función
 

Trate de poner inicialmente un conjunto de paréntesis en una nueva línea, y luego introduzca lo que necesita en ellos. Y si hay varias funciones anidadas en una "matrioska", no tengas pereza de sangrar cada función interna un par de espacios y así no habrá más paréntesis "perdidos" :)

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

Lo he arreglado, pero algo sigue fallando.
Por favor, alguien podría escribirme cómo sería correcto llamar a estas dos funciones Kim y si no hay órdenes, abrir una orden.

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:

Lo he arreglado, pero sigue habiendo un problema.
¿Podría alguien escribirme cómo sería correcto llamar a estas dos funciones de Kim y si no hay órdenes - abrir una orden.


Los parámetros deben ser pasados a la función, se describen en la descripción de la función

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

debes pasar estos parámetros a la función de usuario cuando la llames desde start()

 
valenok2003:


los parámetros deben ser pasados a la función, se describen en la descripción de la función

debe pasar estos parámetros a la función de usuario cuando la llame desde la función start()


No necesito esos parámetros. Sólo necesito
2. Comprueba cualquier posición en el símbolo del gráfico actual
ExistPositions(NULL);
Pero, ¿cómo llamar a este parámetro correctamente?

 
liana:


No necesito estos parámetros. Sólo necesito
2. Para comprobar la disponibilidad de cualquier posición en el instrumento gráfico actual
ExistPositions(NULL);
¿Pero cómo llamar a este parámetro correctamente?

¿necesita comprobar si hay puestos vacantes?
 
liana:


No necesito estos parámetros. Sólo necesito
2. Comprueba cualquier posición en el símbolo del gráfico actual
ExistPositions(NULL);
Pero, ¿cómo llamar a este parámetro correctamente?


Llámalo sin parámetros :

if(!ExistPositions()){// no hay posiciones abiertas

if(!ExistOrders()){// no hay pendientes

 

No puedo leerlo, mi MetaEditor no soporta la codificación rusa

 
liana:

No puedo, MetaEditor no soporta la codificación rusa


Busca en su hilo: https://www.mql5.com/ru/forum/107476, está todo ahí. A partir de la página 10, creo.