Errores, fallos, preguntas - página 815

 
tol64:

¿Pueden decirme por qué se produce un error al obtener el mango de un indicador, si el nombre del indicador a llamar está contenido en una variable?

Es decir, no hay ningún error como este:

Así es como obtenemos el error 4802 (No se puede crear el indicador):

Lea sobretester_indicator aquí.
 
marketeer:
Lea sobreel indicador de comprobación aquí.
Sí, ya he leído y releído todo muchas veces. )) Pero no he conseguido lo que necesito. Y necesito establecer el nombre del indicador en una variable.
 
tol64:
He leído y releído todo una y otra vez. )) Pero no puedo conseguir lo que necesito. Y necesito establecer el nombre del indicador en una variable.
¿Ha añadido la propiedad test_indicator? Supongo que no puedo hacerlo sin él.
 
marketeer:
Entonces, ¿agregó la propiedad test_indicator? No creo que hubiera podido hacerlo sin él.

Lo he probado. Algo no funciona así. ¿Podría mostrarme un ejemplo (quizás lo estoy haciendo mal)?

P.D. Ha funcionado. No puede ser más sencillo. A descansar. ))

P.S2. Pero tengo la dependencia de que tengo que registrar todos los indicadores a través de la propiedad test_indicator. Es decir, si el nombre del indicador se especifica por parámetro externo y un usuario tiene un nuevo indicador, tenemos que abrir el código de nuevo. Esto no es exactamente lo que queremos.

 
tol64:

P.S2. Pero seguimos teniendo la dependencia de tener que escribir todos los indicadores a través de la propiedad test_indicator. Es decir, si el nombre del indicador se especifica por parámetro externo y un usuario tiene un nuevo indicador, tenemos que abrir el código de nuevo. Esto no es exactamente lo que queremos.

Se hace en cinco. Lo he utilizado para construir índices a partir de otros seleccionados al azar. Tal vez los desarrolladores nos digan lo que piensan al respecto.
 
marketeer:
Así es como se hace en cinco. Yo mismo lo utilicé para construir índices a partir de otros seleccionados al azar. Tal vez los desarrolladores nos digan lo que piensan al respecto.

El caso es que los EAs en el probador de MT5 se lanzan fuera del terminal y no tienen todo el entorno de librerías que había en MT4.

Por ejemplo, el Asesor Experto se envía a la nube en absoluto y para pasar enlaces adicionales, tenemos que:

  1. utilizar nombres de indicadores estáticos en las llamadas, lo que permite al compilador prescribir automáticamente las dependencias del experto
  2. prescribir explícitamente a través de la propiedad la lista de indicadores requeridos para construir manualmente la lista de dependencias.

Si se utilizan llamadas a indicadores dinámicos, es necesario prescribir manualmente la lista de indicadores utilizados. Cuando se ejecuta una prueba de terceros, todos los archivos dependientes se envían junto con el Asesor Experto. Estos pueden ser tanto locales (están fuera del terminal de todos modos), como remotos o agentes en la nube.

Es el precio que hay que pagar por "pulsar el arranque y no pensar en nada más, todo funciona automáticamente".

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
Renat:

La cuestión es que los EAs en el probador de MT5 se ejecutan fuera del terminal y no tienen todo el entorno de librerías que tenía MT4.

Es el precio que hay que pagar por "pulsar el arranque y no pensar en nada más, todo funciona automáticamente".

Esto es comprensible, pero por otro lado los usuarios suelen tener una pregunta contraria, porque se ha perdido la flexibilidad habitual y efectiva. De hecho, sólo ha implementado un modelo de enlace estático. Y la gente también pide la vinculación dinámica. La idea es que aunque algo se envíe a la nube, se empiece a contar y de repente se acceda a una torreta externa, se pueda consultar y recuperar de forma similar al resto del entorno, que se pasa del terminal al agente. Bueno, es sólo un pensamiento en voz alta. Yo no he hecho esta pregunta ;-).
 

Puede que esta pregunta ya se haya planteado, pero no la he encontrado en el foro.

En el siguiente código (en el método test()), al tomar un descriptor constante (referencia) a un objeto y asignarlo a uno no constante, el compilador (MetaEditor 5.00, Build 687) no genera un error:

class A{
   public:
      void someDo() {}
};

class B{
   public:
      void B( A* aA ) : mA( aA ) {}
      const A* getA() { return (mA); }   
   private:
      A* mA;
};

void test(){
   A a;
   B b( GetPointer( a ) );

   //Ошибки нет. И это правильно   
   const A* a1 = b.getA();
   //Ошибка есть: "...someDo' - call non-const method for constant object..". И это правильно   
   a1.someDo();
   
   //Ошибки нет. Это НЕ правильно(CONST A* B::getA())!
   A* a2 = b.getA();
   //ошибки нет. Правильно (а2 не const)
   a2.someDo();
}
 
mvk:

Puede que esta pregunta ya se haya planteado, pero no la he encontrado en el foro.

En el siguiente código (en el método test()), al obtener un descriptor constante (referencia) a un objeto y asignarlo a uno no constante, el compilador (MetaEditor 5.00, Build 687) no genera un error:

esto sería el caso sin el error.

class A{
   public:
      void someDo() const {};
};
 

pregunta para los desarrolladores sobre la velocidad de los punteros de los objetos


¿Por qué el primer código

class CSomeObj
{
public:
   double prm;
};

CSomeObj arr;

void OnStart()
{
        EventSetTimer(1);

        uint s0=GetTickCount();
        for (int i=0; i<100000000; i++) arr. prm=10;
        Print("1=", GetTickCount()-s0);
        
        s0=GetTickCount();
        CSomeObj *item=GetPointer(arr);
        for (int i=0; i<100000000; i++) item. prm=10;
        Print("2=", GetTickCount()-s0);
}

funciona el doble de rápido que el segundo?

2012.08.21 09:56:40 info (EURUSD,D1) 2=1654
2012.08.21 09:56:38 info (EURUSD,D1) 1=795

¿se puede optimizar para aumentar la velocidad?