Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 337

 
Artyom Trishkin:

Es una sensación extraña la que tienes. Sólo te mostré cómo mantenerlo simple - sin ninguna variable innecesaria.


Así que estoy cansado y es hora de ir a descansar un poco - dormir, sí.

 

Buenas tardes! ¿Cuál es la función de la ventana de indicadores en el Asesor Experto?

 
Nauris Zukas:

Buenas tardes! ¿Qué funciones en el Asesor Experto puede hacer la ventana del indicador?


Llame a un indicador vacío desde el Asesor Experto.

 
Alekseu Fedotov:

Llama a un indicador vacío del experto.

Gracias.

 
Vitaly Muzichenko:

Encuentre el código que necesita aquí


Hola! Tomé la función para determinar el precio de la última orden de venta abierta

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=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 (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

Pero cuando lo pego en mi EA, obtengo un error de compilación en la condición de la función 'sy' - token inesperado

=' - token inesperado 252 18

valor l requerido 1 1

conversión implícita de 'cadena' a 'número' 252 19

'=' - valor l requerido 252 18

'=' - la expresión de tipo 'void' es ilegal 252 18

'op' - token inesperado 252 28

'=' - token inesperado 252 30

valor l requerido 1 1

'OP_SELL' - operación ilegal uso 252 31

posible pérdida de datos debido a la conversión del tipo 252 30

'=' - valor l requerido 252 30

'=' - la expresión de tipo 'void' es ilegal 252 30

'mn' - token inesperado 252 44

'=' - token inesperado 252 46

valor l requerido 1 1

'1' - operación ilegal utilizar 252 48


Parece que todo debería estar correcto?? Por favor, aconsejadme, lo he copiado y no he cambiado nada.


 
vikzip:

Hola! Tomé la función para determinar el precio de la última orden de venta abierta

Pero cuando lo pego en un EA, obtengo un error de compilación en la condición de la función 'sy' - token inesperado

=' - token inesperado 252 18

valor l requerido 1 1

conversión implícita de 'cadena' a 'número' 252 19

'=' - valor l requerido 252 18

'=' - la expresión de tipo 'void' es ilegal 252 18

'op' - token inesperado 252 28

'=' - token inesperado 252 30

valor l requerido 1 1

'OP_SELL' - operación ilegal uso 252 31

posible pérdida de datos debido a la conversión del tipo 252 30

'=' - valor l requerido 252 30

'=' - la expresión de tipo 'void' es ilegal 252 30

'mn' - token inesperado 252 44

'=' - token inesperado 252 46

valor l requerido 1 1

'1' - operación ilegal utilizar 252 48


Parece que todo debería estar correcto?? Por favor, aconsejadme, lo he copiado y no he cambiado nada.


Necesito devolver el tipo de función

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Creo que todo debería estar correcto... Por favor, aconsejadme, lo he copiado y no hecambiado nada.



Y la cabecera de la función, y no copió el tipo de función


La función originalmente tiene este aspecto:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=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 (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=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 (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


Y la cabecera de la función, y no copió el tipo de función


La función originalmente tiene este aspecto:


Alekseu Fedotov:

Una cabecera de función, y no han copiado el tipo de función


La función originalmente tiene este aspecto:


Correcto, el ejemplo también decía. Si he entendido bien, se puede seleccionar el tipo de orden, lo que he hecho.

  • Op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto de-1 significa cualquier posición.
Luego he hecho la función global poniéndola antes de start. Pero si devuelvo el tipo doble justo antes del nombre de la función, se produce un error. Por favor, dígame por qué.

'PriceS' - la función sólo puede declararse en el ámbito global 252 10

He entendido que la función debe ser global.

Traducido el error en el traductor dice

La función sólo puede definirse en el ámbito global. Si entiendo bien el significado de estas palabras, debe definirse globalmente y, por tanto, no se precede de double. No está claro por qué genera un error en sy aunque sólo lo copie del patrón.

'sy' - token inesperado 248 17 '=' - token inesperado 248 19 l-value required 1 1

¿Puedo hacer sy global? y el mismo error con otras variables declaradas en la función.

'op' - token inesperado 248 28 'OP_SELL' - uso de operación ilegal 248 31 'mn' - token inesperado 248 44

 
vikzip:


Así es, todavía estaba escrito en el ejemplo. Si he entendido bien, es posible seleccionar el tipo de orden, lo que he hecho.

  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto de-1 significa cualquier posición.
Luego he hecho la función global poniéndola antes de start. Pero si devuelvo el tipo doble justo antes del nombre de la función, se produce un error. Por favor, dígame por qué.

'PriceS' - la función sólo puede declararse en el ámbito global 252 10

He entendido que la función debe ser global.

Traducido el error en el traductor dice


Colocar la función fuera de la función de inicio

Y en el cuerpo de la función de inicio, llámalo así:

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 parámetros magik, separados por comas, ponga el suyo o 0

 
Alekseu Fedotov:

Colocar la función fuera de la función de inicio

En el cuerpo de la función de inicio, se llama así:

3 parámetros magik, separados por comas, pon tu propio o 0


¡¡¡Muchas gracias!!! En cuanto puse la función fuera de la función de inicio, ¡¡¡desaparecieron todos los errores!!!