Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 967

 

¿Cómo puedo acertar el precio de apertura de una barra y si no consigo el precio de apertura salir?

Esbozó algunas opciones. ¿Pero tal vez haya un código mejor y más correcto?

   if(iOpen(Symbol(),Period(),0)==0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }
  if(iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     } 
  if(iOpen(Symbol(),Period(),0)==0 && iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0 && iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }     
 
ilvic:

¿Cómo puedo acertar el precio de apertura de una barra y si no consigo el precio de apertura salir?

Esbozó algunas opciones. ¿Pero tal vez haya un código mejor y más correcto?

Las funciones iXXXX sólo tienen sentido si se ejecuta una solicitud única, sin bucles y sin llamar a otras funciones iXXXX.

Si sólo necesita obtener el precio de apertura una vez, consultela ayudade iOpen:

Valor de retorno

*** 0 en caso de error.

Así que hay que consultar el precio y comprobar si es cero: si no es cero entonces el precio se recibe, si es cero entonces es un error.

double open=iOpen(Symbol(),Period(),0);
if(open==0.0)
   retutn;
 
¿Pueden decirme cómo insertar el parámetro 9 con una cuadrícula (#CL) para que el compilador no genere un error?
enum Symboll_
  {
   AUDUSD=0,
   NZDUSD=1,
   USDCAD=2,
   USDCHF=3,
   USDJPY=4,
   EURJPY=5,
   EURUSD=6,
   GBPUSD=7,
   #CL   =8
  };
 
Vladimir Karputov:

Las funciones iXXXX sólo tienen sentido si se ejecuta una solicitud única, sin ciclos y sin llamar a otras funciones iXXXX.

Si sólo necesita obtener el precio de apertura una vez, consulte la ayuda deiOpen:

Valor de retorno

*** 0 en caso de error.

Así que hay que consultar el precio y comprobar que es cero: si no es cero, el precio se recibe, si es cero, es un error.

Gracias. Una pregunta más. ¿Debemos usar paréntesis en este código o no hay diferencia?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
     {
      return;
     }
 
xxz:
¿Pueden decirme cómo insertar el parámetro 9 con una cuadrícula (#CL) para que el compilador no genere un error?

Así:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
 
ilvic:

Gracias. Una pregunta más. ¿Deben utilizarse paréntesis en este código o no hay ninguna diferencia?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
      return;

Lo hará. En general, los corchetes están destinados a un grupo de acciones. Si sólo hay una acción, no sirven de nada.

int n;
double y;
if(бла-бла-бла)
         n = бла-бла;
else
  {
         n = бла-бла;
         y = бла;
  )
 
Vladimir Karputov:

Ahí lo tienes:

¡Muchas gracias!

Porque lo intenté así y no funcionó:

  enum  Symboll_
  {
   SIM_0,  //AUDUSD
   SIM_1,  //NZDUSD
   SIM_2,  //USDCAD
   SIM_3,  //USDCHF
   SIM_4,  //USDJPY
   SIM_5,  //EURJPY
   SIM_6,  //EURUSD
   SIM_7   //#CL
  };  
 
xxz:

¡Muchas gracias!

Porque lo intenté así y no funcionó:

O así:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
   string my_symbol[9]=
     {
      "AUDUSD",
      "NZDUSD",
      "USDCAD",
      "USDCHF",
      "USDJPY",
      "EURJPY",
      "EURUSD",
      "GBPUSD",
      "#CL"
     };
 
Vladimir Karputov:

o esto:

¡Eso es!

En esas variantes salía sólo un número de serie oSIM_1,...etc.

 
Al probar un EA multidivisa, hay un problema con el tamaño del lote. Tengo un fijo de 0,03, pero durante la prueba las órdenes aparecen con el volumen de 0,1. Inmediatamente aparece un fallo en el gráfico. ¿Soy yo?
Razón de la queja: