Indicador que está se corrompendo - página 3

 
AnkaSoftware:

JIC, Por favor, note que o problema não ocorre em plataformas de 32 bits. Eu forneci algum código em um dos posts anteriores.

Você tem duas (ou mais) máquinas separadas que não estão necessariamente recebendo exatamente os mesmos dados. Por exemplo, o sistema de 64 bits pode estar em um nó VPS ocupado que ocasionalmente perde tráfego e/ou conexões, por exemplo, porque o nó físico está operando em extremos de uso de processador ou largura de banda. (Muitas outras explicações possíveis; esta é apenas uma).

Até que você entenda porque o desenho das linhas roxas pára quando há um espaço nas barras M1, então eu trataria tudo o resto como coincidência.

Vou fechar voltando à minha declaração de abertura: não há razão para que janelas de 64 bits causem qualquer problema como os que você está descrevendo. Muitas pessoas levantaram relatos neste fórum de que o MT4 não funciona corretamente nas plataformas x, y e z, apenas para que eventualmente se descubra que o problema estava com seu código. Você descobriu o primeiro bug MQL4 de boa fé em vários anos em um software maduro usado por literalmente milhões de pessoas, ou o problema é com seu código. É extremamente provável, a partir das evidências até agora - por exemplo, relatórios separados de você de que o problema ocorre após 16 horas ou após 3-4 horas - que o problema seja causado por flutuações ocasionais nos dados que você não está alimentando adequadamente.
 

AnkaSoftware:

a) A corrupção de indicadores ocorre apenas na plataforma Windows 64 bit

d) O uso do código é o seguinte

Declarações

<código>

#janela_do_cartão_indicador de propriedade



  1. Não instalar em Arquivos de Programas* no Vista/Win7
  2. void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
    double a = (endlevel - startlevel) / (start - end);
    double y;
    int bar;
    for(int x = 0; x <= start - end; x++) {
    y = a * x;
    bar = start - x;
    serie[bar] = startlevel + y;
    }
    }
    Não tenho certeza do que você está tentando fazer aqui. Para um você está calculando muitos valores (início...fim) mas apenas armazenando UM (serie[bar]) eu o codificaria:
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
Em anexo está o indicador de amostra, que reproduzirá o problema. Na plataforma Windows de 64 bits, anexe o indicador a um gráfico M1, e deixe-o rodar por mais de 4 horas.
Arquivos anexados:
 
AnkaSoftware:
Em anexo está o indicador de amostra, que reproduzirá o problema. Na plataforma Windows de 64 bits, anexe o indicador a um gráfico M1, e deixe-o rodar por mais de 4 horas.
Desculpe, não tenha paciência para alocar uma máquina limpa de 64 bits para isto e depois aguarde 4 horas ou mais.

Entretanto, se este indicador realmente reproduzir o problema, então devo concordar que é interessante. Não consigo ver imediatamente onde qualquer problema interno pode estar escondido. (Assumindo, como antes, que você tenha definitivamente descartado coisas como uma correlação entre o problema ocorrendo e um blip recente em conexão entre o MT4 e o corretor. Você mencionou sua fé no CNS; na verdade, você não confirmou que o jornal MT4 não contém nenhuma menção de problemas de conexão, o que, por sua vez, poderia estar causando o preenchimento posterior do histórico do bar).

Se você quiser seguir a rota de um problema da MT4, então parece mais provável que ele esteja relacionado à passagem das matrizes de indicadores por referência. As matrizes em MQL4 têm propriedades estranhas, como sempre serem estáticas, e suponho que é possível que exista apenas um estranho problema latente com a passagem das matrizes especiais de tampão indicador por referência, o que só desencadeia problemas em Win64. Embora a razão pela qual o sistema operacional deveria fazer a diferença em um contexto como este permaneça um mistério completo.

Eu tentaria alterar o DrawMoveEx() de modo que ele não tome mais uma referência à matriz de indicadores, e em vez disso existem funções separadas como DrawMoveEx_Down1(), DrawMoveEx_Up1() etc. que simplesmente abordam os buffers como variáveis globais. Se isso faz diferença, então, parabéns, você quase certamente encontrou um bug MT4. Possivelmente o segundo, hoje.
 
AnkaSoftware:
Em anexo está o indicador de amostra, que reproduzirá o problema. Na plataforma Windows de 64 bits, anexe o indicador a um gráfico M1, e deixe-o rodar por mais de 4 horas.
Está rodando há mais de 5hrs no Windows 7 Ultimate 64 bit, sem problemas.
 
RaptorUK:
Está funcionando há mais de 5hrs no Windows 7 Ultimate 64 bit, sem problemas.

JIC a) Como sugerido por você modificou o código remover passando a referência, não resolve o problema. Código modificado anexo.

b) As barras em falta a que você se refere, muito provavelmente devido a nenhuma condição comercial, portanto, o corretor não enviou barras. IMHO, em caso de perda de conectividade, as barras que faltam estão disponíveis uma vez restabelecida a conexão. Se você vir meu código de amostra, não há dependência de barras serem contíguas.

Raptor, obrigado por testar. Talvez você precise se juntar a nós para ver o erro. Sou capaz de reproduzir o problema no Windows Server 2008 R2 Enterprise. Portanto, pode ser um problema de O/S. Qualquer idéia, de onde obter uma lista de patches recomendados pelo MT4, para uma determinada plataforma.

.

Arquivos anexados:
 
AnkaSoftware:

Qualquer idéia, de onde obter uma lista de patches recomendados pelo MT4, para uma determinada plataforma.

Tal coisa não existe. Existe simplesmente uma versão do MT4 que roda em todas as versões do Windows, e não há nenhuma razão particular para que haja mais de uma. Não há versões ou correções específicas para sistemas operacionais.
 
AnkaSoftware:
Em anexo está o indicador de amostra, que reproduzirá o problema. Na plataforma Windows de 64 bits, anexe o indicador a um gráfico M1, e deixe-o rodar por mais de 4 horas.
Ainda funcionando OK, até onde posso dizer . . . como reproduzo o erro ?
 
RaptorUK:
Ainda funcionando bem até onde posso dizer . . . como posso reproduzir o erro ?
Você não tem que fazer nada. Além de fazer zoom no gráfico para ver se o erro ocorreu.
 
AnkaSoftware:
Você não tem que fazer nada. Além de fazer zoom no gráfico para ver se o erro ocorreu.

Se estou procurando linhas que parecem estar desconectadas das barras do gráfico (conforme seu primeiro posto), então não estou tendo nenhum problema.