Errores, fallos, preguntas - página 2414

 
Andrey Pogoreltsev:

Si se utiliza CSymbolInfo en multidivisa, que es llamado por el método Name en el momento de la inicialización:

Habrá errores para el símbolo USDCAD durante la prueba:

¿Cuál es la moneda de depósito durante las pruebas?

 
Slava:

¿Cuál es la moneda del depósito en el momento de la prueba?

USD. Par de pruebas EURUSD M1. Intentaré reproducirlo en el EA desnudo. Hasta ahora no ha tenido éxito. Pero fueron estos métodos los que condujeron a errores en los registros y exactamente a un par.

 
Slava:

¿Cuál es la moneda del depósito en el momento de la prueba?

Generalmente se reproduce y se encuentra una característica. Adjunto los ajustes de la prueba.

El código del Asesor Experto en sí mismo:

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


Ahora la "característica", como se prometió) Si se utiliza Name() así:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

entonces habrá un error. Pero así el error desaparece:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS. Tengo pares nombrados con el prefijo ".m" en mi centro. El ejemplo también funciona con parejas normales.

Archivos adjuntos:
test.png  11 kb
 
Andrey Pogoreltsev:

De todos modos, reproducido y encontrado una característica. He adjuntado las configuraciones de prueba.


Gracias. Cómo se puede entender

 

Bug MT5 build 2007. En el modo de optimización la cadena de entrada se trunca a 63 caracteres.

Código para la prueba:

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


¡Ejecución simple todo bien: ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Fijemos la optimización mediante el parámetro fortestopt, vayamos al registro del agente: ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

 

Si alguien quiere saber...

No puedo ver el newsfeed en mi página... Antes entraba y veía quién publicaba qué. Ahora es una página en blanco... No he cambiado nada en la configuración...

 

Error del compilador. Genera un error de ambigüedad, aunque todo es inequívoco aquí.Se debe llamar al primer método como el más adecuado. Probado en C++.

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Bug MT5 build 2007. En el modo de optimización la cadena de entrada se trunca a 63 caracteres.

Código para la prueba:


¡Ejecución simple todo bien: ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Fijemos la optimización mediante el parámetro fortestopt, vayamos al registro del agente: ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

El hecho de que no se corte a 63 caracteres en una sola prueba tampoco es una casualidad.

La longitud de la cadena del tipo de parámetro de entrada no debe superar los 63 caracteres (64 junto con el terminador nulo)

 
Slava:

El hecho de que no se reduzca a 63 caracteres en la prueba única tampoco es una casualidad.

La longitud de un parámetro de entrada de tipo cadena no debe superar los 63 caracteres (64 junto con el terminador nulo).

Es una especie de restricción draconiana. ¿Cuál es la razón de ser de esto en los tiempos actuales? ¿Y cómo es conveniente especificar grupos de un montón de caracteres? ¿Planificando una docena de parámetros diferentes? ¿Es conveniente?

 
Slava:

El hecho de que la prueba única no se trunque a 63 caracteres es sólo un accidente.

La longitud de un parámetro de entrada de tipo cadena no debe superar los 63 caracteres (64 junto con el terminador nulo)

Esta limitación es inapropiada, no estamos escribiendo el precio de un kilo de patatas en la cadena.