Errores, fallos, preguntas - página 1177

 
svds75:

Hola. ¿Puede decirme por qué cuando consulto las propiedades de una línea de tendencia, la variable res siempre es verdadera, aunque configure manualmente la bandera para mostrar sólo W1, o sólo MN1?

Es necesario que se muestre sólo en una de las mitades.

...obtener... - está consiguiendo propiedades. Y si res=true, es sólo una indicación de que la obtención de la propiedad ha sido exitosa.

Para establecer las propiedades, utilice ...set...

 

Como continuación de mi anterior post, he conseguido encontrar el área del problema que lleva al fallo utilizando el método científico.

Tenemos una biblioteca con esta función:

//---- testbuglib.mq5 ------

#property library

class A { }; class B   { private:    A* a; public:    A* b; }; int Test() export {   return 0; }

Aquí está el archivo principal:

#include <Files\File.mqh>  // тут можно указать любой файл mqh

#import "testbuglib.ex5"
  int Test();
#import  

int OnInit() {  Test(); return 0; }

El Asesor Experto resultante no funciona y muestra en el registro: "EX5 loading failed".

Archivos adjuntos:
TestBug.mq5  1 kb
 
svds75:

Hola. ¿Pueden decirme por qué la variable res siempre es verdadera cuando se solicitan las propiedades de la línea de tendencia, aunque configure manualmente la bandera para mostrar sólo W1, o sólo MN1?

Quiero que se muestre sólo en una de las mitades.

Número incorrecto de parámetros, estás llamando a la función como 1 opción y deberías llamarla como 2 o comparando el resultado.
 
TheLiteShadow:
Eso es cierto, pero ¿significa que con cada nueva barra hay que "limpiar" todos los últimos "índices" de los topes definidos? La pregunta es ¿por qué? En MT4 no existía tal situación, entiendo, durante la inicialización lo había limpiado, pero entonces debería hacerlo la propia MT, por lo mismo, en la inicialización debería hacerlo MT y no el programador, para qué el buffer del indicador es simplemente una asignación de memoria no lo entiendo bien...
Cuando hice esta pregunta hace unos años, me dijeron que esto se hace con fines de optimización. Se inicializa exactamente lo que se necesita. Y si rellena algunos datos de cálculo de inmediato, no tiene que preescribir ceros en absoluto. MT5 es diferente de MT4 en muchos aspectos.
 
marketeer:
Cuando hice esta pregunta hace unos años, me dijeron que era por motivos de optimización. Se inicializa exactamente lo que se necesita. Y si rellena algunos datos de cálculo de inmediato, no es necesario preescribir ceros en absoluto. MT5 es diferente de MT4 en muchos aspectos.
El hecho de que MT4 sea diferente a MT5 lo entiende todo el mundo, pero no estaría de acuerdo en lo de la optimización, y el programador tiene demasiado que controlar además, no es comparable a los lenguajes de bajo nivel, pero para mí es superfluo, en general, está claro, gracias...
 
TheLiteShadow:
Número incorrecto de parámetros, estás llamando a la función como 1 opción y deberías llamarla como 2 o comparando el resultado.
También lo he probado así. Aunque las banderas realmente funcionan (la línea sólo se muestra una vez), y el Asesor Experto ve que ambas banderas están activadas.
long res;
ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1|OBJ_PERIOD_MN1,res);
if((bool)res) Alert("линия line показывается на OBJ_PERIOD_W1 и OBJ_PERIOD_MN1");
 
svds75:
Lo intenté de esta manera. Aunque, las banderas reales funcionan (la línea se muestra sólo en un marco de tiempo), el Asesor Experto ve que ambas banderas están activadas.

¿Qué es lo que realmente quieres? Usted pide visibilidad en plazos semanales o mensuales. Así que el programa devolverá true si al menos uno de ellos está encendido.

Solicítelo por separado en 2 llamadas.

 
svds75:
También lo he probado así. Aunque las banderas reales funcionan (la línea sólo se muestra en una mitad) y EA ve que ambas banderas están activadas.

Entonces, ¿es necesario establecer la visibilidad directamente?

 ObjectSetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1);
 
svds75:

Hola. ¿Pueden decirme por qué la variable res siempre es verdadera cuando se solicitan las propiedades de la línea de tendencia, aunque configure manualmente la bandera para mostrar sólo W1, o sólo MN1?

Quiero que se muestre sólo en una de las mitades.

Como la línea siempre existe, siempre lee el valor. La línea invisible no significa que no haya línea.
 
barabashkakvn:

Entonces, ¿es necesario establecer la visibilidad directamente?

No, tengo que establecer la visibilidad manualmente y comprobarla mediante programación.