MetaTrader 4 Build 529 beta liberado con nuevo compilador - página 125

 
stringo:

No se pueden modificar las variables de entrada.

Utilice la palabra clave input en lugar de extern, entonces el compilador no le permitirá hacer esto

Veremos qué podemos hacer para mantener la antigua funcionalidad de los cuatros.

P.D. Muchas gracias por sacar el tema.


Así que no había ningún objetivo de cambiarlos.

Sólo se utilizan para los cálculos posteriores. Nada más.

Bueno, en principio ya veo, solucionamos este problema introduciendo una variable extra.

extern int TakeProfit_= 10;
int TakeProfit;
......  
   int dig = (int)MarketInfo(Symbol(), MODE_DIGITS);
   if (dig == 5 || dig == 3)
   {
      TakeProfit  = TakeProfit_* 10;
.....
 
Night63:


Así que no tenía sentido cambiarlos.

Simplemente se utilizan para los cálculos posteriores. ¡No más que eso!

Pues bien, en principio, hemos resuelto este problema introduciendo una variable adicional.


Es cierto... Pero, ¿por qué molestarse en comprobar una constante inmutable en cada momento? Basta con definirlo una vez en init()
 
stringo:

No se pueden modificar las variables de entrada.

Utilizo el valor de las variables externas (para algunas variables) como valor por defecto, y leo el resto de los datos para el mismo parámetro desde el archivo ini.

Los Asesores Expertos trabajan simultáneamente con varias estrategias que tienen sus propios parámetros de entrada. Ejemplo:

extern int TF = 15;
int gia_TF[5];
void start()
{
    for (int li_TF = 0; li_TF < ArraySize (gia_TF); li_TF++)
    {
        TF = gia_TF[li_TF];
    }
}

Sí, el problema se puede resolver introduciendo variables adicionales, pero ¿por qué? Aclarar, ¿se privará de esta funcionalidad con la nueva MT?

 
TarasBY:
Utilizo el valor de las variables externas (para algunas variables) como valor por defecto, y leo otros datos para el mismo parámetro desde el archivo ini.

Los asesores trabajan simultáneamente con varias estrategias que tienen sus propios parámetros de entrada. Ejemplo:

Sí, la cuestión puede resolverse introduciendo variables adicionales, pero ¿por qué? Aclárese, ¿se privará de esta funcionalidad con la nueva MT?

Te lo dije. :-))

Esto es redundante. Esto significa que no es necesario un inline con variables externas como variables externas. Se puede eliminar extern. Ni siquiera notarás la diferencia. De todos modos, se inicializa desde el archivo INI.

 
TarasBY:
Utilizo el valor de las variables externas (para algunas variables) como valor por defecto, y leo el resto de los datos para el mismo parámetro desde el archivo ini.

Los asesores trabajan simultáneamente con varias estrategias que tienen sus propios parámetros de entrada. Ejemplo:

Sí, el problema se puede resolver introduciendo variables adicionales, pero ¿por qué? Aclarar, ¿se privará de esta funcionalidad con la nueva MT?


No, no se privará.

Todo será igual que en los antiguos cuatro. Los códigos escritos hace tiempo (incluso recompilados con el nuevo compilador) funcionarán como antes.

 
Zhunko:

Te lo dije... :-))

Es redundante. Significa que la inclusión con variables externas como variables externas es innecesaria. Puede omitirse extern. Ni siquiera notarás la diferencia. De todos modos, se inicializa desde el archivo INI.

¡Vadim! ¿Quién es un luchador por la universalidad y la multivariedad? :)
 
stringo:

No, no lo hará.

Todo será igual que en el antiguo quad. El código escrito hace tiempo (incluso recompilado con el nuevo compilador) funcionará como antes.

Gracias. BIEN.
 
avtomat:

Es cierto... Pero, ¿por qué molestarse en comprobar una constante inmutable en cada momento? Basta con definirlo una vez en init()


Tienes razón, así fue al principio, probamos todo tipo de cosas en la fase de resolución de problemas.

Ahora volvemos a la entrada, ¡gracias por señalar el fallo!

 
stringo:

¿Puede explicar el significado físico de su código?

El símbolo ya está seleccionado, si su gráfico está abierto, sobre el que trabaja este Asesor Experto.

El símbolo ya seleccionado no se puede volver a seleccionar. No se puede ocultar un símbolo cuyo gráfico está abierto.


El significado físico es comprobar que el símbolo cuyo nombre se introduce como cadena en los parámetros de entrada del EA está disponible para operar. El mismo código en MT5 funciona.

El código que he citado es sólo un ejemplo. Allí es un poco diferente, pero el significado sigue siendo el mismo.

P.D. ¿Qué pasa con el error 138 en el probador?

Código:

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      string SYMBOL=Symbol();
      int digits=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
      MqlTick lasttick={0};
      if(!SymbolInfoTick(SYMBOL,lasttick))
         return;
      double ask=lasttick.ask;
      double bid=lasttick.bid;

      OrderSend(SYMBOL,OP_BUY,0.1,NormalizeDouble(ask,digits),1000,0,0,"Test",0,0,CLR_NONE);
     }
  }

Resultado:

 
Algunas trivialidades con objetos gráficos.

Esta vez OBJ_EDIT.

1) imposible introducir datos, al hacer clic dentro de OBJ_EDIT no pasa nada, los datos del campo no se resaltan (antes era imposible salir del campo salvo con la tecla "ENTER", ahora es imposible entrar);

2) OBJPROP_ANCHOR no funciona;

3) Cuando se selecciona OBJ_EDIT, aparece un punto para mover el objeto en la esquina superior izquierda, pero con un cierto desplazamiento, aunque muy pequeño, dependiendo de la esquina del gráfico (OBJPROP_CORNER) desde la que se cuentan las coordenadas.

No hay otros problemas con el renderizado o el movimiento de los objetos gráficos. Gracias por la corrección.