Erros, bugs, perguntas - página 1177

 
svds75:

Olá. Pode dizer-me porquê quando questiono as propriedades de uma linha de tendência, a variável res é sempre verdadeira, embora eu configure manualmente a bandeira para mostrar apenas W1, ou apenas MN1?

Só precisa de ser mostrado numa das metades.

...obter... - está a obter propriedades. E se res=verdadeiro, é apenas uma indicação de sucesso na busca de propriedades.

Para definir as propriedades, utilizar ...definir...

 

Como continuação do meu posto anterior, consegui encontrar a área problemática que causou o insecto utilizando o método científico.

Temos uma biblioteca com esta função:

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

#property library

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

Aqui está o ficheiro principal:

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

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

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

O Expert Advisor resultante não funciona e exibe no registo: "O carregamento EX5 falhou".

Arquivos anexados:
TestBug.mq5  1 kb
 
svds75:

Olá. Pode dizer-me porque é que a variável res é sempre verdadeira quando solicito as propriedades da linha de tendência, embora eu configure manualmente a bandeira para mostrar apenas W1, ou apenas MN1?

Quero que seja mostrado apenas numa das metades.

Número incorrecto de parâmetros, está a chamar a função como 1 opção e deve chamá-la como 2 ou a comparar o resultado.
 
TheLiteShadow:
Isso é verdade, mas significa que com cada nova barra todos os últimos "índices" dos amortecedores definidos devem ser "limpos"? A questão é porquê? Em MT4 não houve tal situação, compreendo, durante a inicialização eu a tinha limpo, mas depois deve ser feita pela própria MT, da mesma forma, na inicialização deve ser feita pela MT e não pelo programador, para que finalidade o buffer indicador é simplesmente uma alocação de memória que não compreendo bem...
Quando fiz esta pergunta há alguns anos atrás, foi-me dito que isto era feito para fins de optimização. Inicializa-se exactamente o que se precisa. E se preencher de imediato alguns dados de cálculo, não precisa de pré-escrever zeros de todo. O MT5 é diferente do MT4 em muitos aspectos.
 
marketeer:
Quando fiz esta pergunta há alguns anos atrás, foi-me dito que era para fins de optimização. Inicializa-se exactamente o que se precisa. E se preencher alguns dados de cálculo imediatamente, não precisa de pré-escrever zeros de todo. O MT5 é diferente do MT4 em muitos aspectos.
O facto de o MT4 ser diferente do MT5 é compreendido por todos, mas eu não concordaria com a optimização, e o programador tem demasiadas coisas para acompanhar, não comparáveis a línguas de baixo nível, mas para mim é supérfluo, em geral, é claro, obrigado...
 
TheLiteShadow:
Número incorrecto de parâmetros, está a chamar a função como 1 opção e deve chamá-la como 2 ou a comparar o resultado.
Experimentei-o também desta forma. Embora as bandeiras funcionem realmente (a linha só aparece de uma vez), e o Expert Advisor vê que ambas as bandeiras estão 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:
Experimentei-o desta forma. Embora, as verdadeiras bandeiras funcionem (a linha é mostrada apenas num período de tempo), o Expert Advisor vê que ambas as bandeiras estão activadas.

O que é que quer realmente? Está a pedir visibilidade em prazos semanais ou mensais. Assim, o programa voltará a ser verdadeiro se pelo menos um deles estiver ligado.

Solicite-o separadamente em 2 chamadas.

 
svds75:
Experimentei-o também desta forma. Embora as bandeiras reais funcionem (a linha só aparece numa metade) e a EA vê que ambas as bandeiras estão activadas.

Então talvez precise de definir directamente a visibilidade?

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

Olá. Pode dizer-me porque é que a variável res é sempre verdadeira quando solicito as propriedades da linha de tendência, embora eu configure manualmente a bandeira para mostrar apenas W1, ou apenas MN1?

Quero que seja mostrado apenas numa das metades.

Porque a linha existe sempre, lê sempre o valor. Linha invisível não significa que não haja linha.
 
barabashkakvn:

Então talvez precise de definir directamente a visibilidade?

Não, preciso de definir a visibilidade manualmente e verificá-la de forma programática.