Errores, fallos, preguntas - página 1241

 
barabashkakvn:

La búsqueda de actualizaciones se activa al conectarse al servidor de MetaQuotes-Demo. Es posible en los siguientes casos:

  1. Cambiar una cuenta comercial de alguna cuenta a una cuenta comercial abierta en MetaQuotes-Demo;
  2. Al reiniciar el terminal.
Gracias.
 
joo:

:O

No, el error ya no aparece.

Schrodinger se paseaba por la habitación en busca de un gatito ensuciado, pero estaba sentado en una caja ni vivo ni muerto. )))

 
tol64:

Schrodinger se paseaba por la habitación en busca de un gatito ensuciado, pero el gatito estaba sentado en una caja ni vivo ni muerto. )))

Muy extraño, en efecto. ¿Qué va a dejar de funcionar la próxima vez?
 
joo:
Muy extraño, en efecto. ¿Qué dejará de funcionar la próxima vez?
No se sabe. Tendremos que poner un control. )
 
joo:

He colocado las huellas en su lugar - el error ha desaparecido...

El efecto observador en la mecánica cuántica es algo...

Sólo hemos reproducido tu situación al introducir NaN en la expresión.
 
Renat:
Sólo hemos reproducido tu situación al introducir NaN en la expresión.

¿funciona fabs correctamente o no?

 
joo:

¿funciona bien fabs o no?

Sí.
 

Buenas tardes, pido ayuda para implementar lo que creo que es un esquema sencillo.

Tengo un EA que funciona bien en un símbolo. Quiero "retocarlo" para que funcione para varios símbolos a la vez. Para ello, necesito crear adecuadamente una matriz de datos, cuyos miembros podrían ser accedidos por todas las instancias del EA adjuntas a varios símbolos diferentes. Es decir, sólo hay una matriz de datos, pero hay múltiples instancias del EA. Cada instancia de EA puede leer y modificar los miembros del array.

Según tengo entendido, hay que crear un array con miembros estáticos (static).

Un ejemplo sencillo: cuente el número total de ticks en todos los gráficos, donde los EAs están adjuntos. Adjuntamos el EA a 2 gráficos y en el evento OnTick() aumentamos el contador en 1. Para simplificar, he intentado utilizar un contador de variable estática en lugar de la matriz. Lamentablemente, cada EA funciona sólo con su contador, el contador no es "común". Resultado:

símbolo1, tick1 : contador = 0;

símbolo1, tick2 : contador = 1;

símbolo2, tick1 : contador = 0; - aquí contador esperado = 2

Por ejemplo, he creado una clase simple con un contador:

//+------------------------------------------------------------------+
//|                                                   TestStatic.mqh |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class TestStatic
  {
private:
static int counter;
public:
                     TestStatic();
                    ~TestStatic();

static void IncreaseCounter();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::TestStatic()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::~TestStatic()
  {
  }
//+------------------------------------------------------------------+
int TestStatic::counter=0;
TestStatic::IncreaseCounter()
  {
   Print("Symbol: "+_Symbol +", counter: "+ TestStatic::counter);
   TestStatic::counter++;
  };

Aquí está el código de EA:

//+------------------------------------------------------------------+
//|                                                Exp_testMulti.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#include <TestStatic.mqh>

static string tickCounter[2][2];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TestStatic::IncreaseCounter();
    
  }
//+------------------------------------------------------------------+

Por favor, ayúdenme a entenderlo, ¡muchas gracias de antemano!

 
VangoghFX:

Buenas tardes, pido ayuda para poner en práctica lo que creo que es un esquema sencillo.

Tengo un EA que funciona bien en un símbolo. Quiero "retocarlo" para que funcione para varios símbolos a la vez. Para ello, necesito crear adecuadamente una matriz de datos, cuyos miembros podrían ser accedidos por todas las instancias del EA adjuntas a varios símbolos diferentes. Es decir, sólo hay una matriz de datos, pero hay múltiples instancias del EA. Cada instancia de EA puede leer y modificar los miembros del array.

Según tengo entendido, hay que crear un array con miembros estáticos (static).

Un ejemplo sencillo: cuente el número total de ticks en todos los gráficos, donde los EAs están adjuntos. Adjuntamos el EA a 2 gráficos y en el evento OnTick() aumentamos el contador en 1. Para simplificar, he intentado utilizar un contador de variable estática en lugar de la matriz. Lamentablemente, cada EA funciona sólo con su contador, el contador no es "común". Resultado:

símbolo1, tick1 : contador = 0;

símbolo1, tick2 : contador = 1;

símbolo2, tick1 : contador = 0; - aquí contador esperado = 2

Por ejemplo, he creado una clase simple con un contador:

Aquí está el código de EA:

Por favor, ayúdenme a entenderlo, ¡muchas gracias de antemano!

Por la tarde. En concreto, para implementar tu ejemplo con los ticks, las variables globales de la terminal (hace poco se publicó un artículo sobre este tema). Sobre tal conjunto... No estoy seguro, debería probarlo. Pero puedo sugerir otra variante. En un Asesor Experto, prescribir los símbolos necesarios para el trabajo y hacer, como usted sugirió, una matriz estática / global de los datos necesarios. Y deja que el EA haga un bucle con todos los símbolos necesarios.
 
Tapochun:
Buenas tardes. Específicamente para su ejemplo de ticks, las variables globales de la terminal estarían bien (hubo un artículo reciente sobre esto). Sobre tal conjunto... No estoy seguro, tengo que probar. Pero puedo sugerir otra variante. En un Asesor Experto, prescribir los símbolos necesarios para el trabajo y hacer, como usted sugirió, una matriz estática / global de los datos necesarios. Y deja que el Asesor Experto recorra todos los símbolos necesarios.

Muchas gracias por su respuesta.

He utilizado el ejemplo con garrapatas como el más sencillo e ilustrativo para describir la idea general. El Asesor Experto utiliza algoritmos más complejos.

No me gusta la variante en la que se escriben N símbolos en un EA porque es demasiado engorroso y difícil de usar. Hay varios artículos sobre este tema en el portal, y los he visto: pero no me gustan los bucles grandes, las matrices, la copia de datos, muchos paquetes de variables para cada símbolo, etc. Quiero utilizar un enfoque más simple y más eficiente, en mi opinión: un código de EA para cada símbolo (el símbolo está determinado por el gráfico, al que el EA está vinculado) - y cada copia del EA trabaja en paralelo con otros. Pero en este caso, la información analítica, necesaria para la toma de decisiones, se comparte con los demás.

La idea de tener variables globales me visitó, pero es más bien un enfoque procedimental, y quiero utilizar todas las ventajas de la POO. Planeo escribir una clase separada que pasaría los datos analíticos necesarios a los Asesores Expertos en forma de una matriz y les permitiría tomar decisiones comerciales.

Razón de la queja: