Indicador que está se corrompendo

 

Todos,

Desenvolvi um indicador que funciona bem durante as primeiras 16 hrs ou mais, depois do qual fica corrompido e começa a traçar linhas por todo o gráfico. Também estou verificando o valor do IndicatorCounted() e seu valor não se torna negativo quando recebo as linhas corrompidas. Não quero reinicializar os buffers do indicador, pois o histórico de 'movimentos/linhas válidos' se perderá. Alguma sugestão para consertar o problema?

Imagens do indicador normal e corrompido disponíveis no arquivo zip anexo.

Arquivos anexados:
images.zip  61 kb
 
Sem leitores de mente aqui - sem código = sem ajuda
 
WHRoeder:
Sem leitores de mente aqui - sem código = sem ajuda

Obrigado por uma tonelada.
 

dears,

alguém pode me enviar o link para baixar o metaEditor 4?

obrigado.

 
tiger961:

dears,

alguém pode me enviar o link para baixar o metaEditor 4?

obrigado.


Tigre você precisa iniciar um novo fio em vez de empilhar em outros fios.

O editor está disponível com o download gratuito do terminal MT4 em qualquer corretor.

 

Algumas informações adicionais -

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

b) Fiz uma descarga da matriz de indicadores antes e depois da corrupção - os mesmos estão disponíveis no arquivo xls anexo com comentários.

c) A configuração "Max Bars in Chart" só é aplicável quando você abre o gráfico? A contagem de barras e a contagem do indicador associado cresce com cada barra adicional adicionada.

d) O uso do código é o seguinte

Declarações

<código>

#janela_do_cartão_indicador de propriedade

#property indicator_buffers 8

#indicador de propriedade_cores1 Vermelho

#largura_do_indicador de propriedade1 2

</código>

Para inicialização do inidicador -

<código>

SetIndexBuffer(0, Down1);

SetIndexStyle(0, DRAW_LINE);

SetIndexEmptyValue(0, EMPTY_VALUE);

</código>

Para adição de dados de linha

<código>

vazio DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {

duplo a = (nível final - nível inicial) / (início - fim);

duplo y;

barra int;


for(int x = 0; x <= início - fim; x++) {

y = a * x;

barra = início - x;

serie[bar] = nível inicial + y;

}

}

</código>

 
AnkaSoftware:
a) A corrupção de indicadores ocorre apenas na plataforma Windows 64 bit
Não instale arquivos de programas* no Vista/Win7
 
WHRoeder:
Não instale arquivos de programas* no Vista/Win7
Certo, a instalação está em C:/metatrader4/<terminal dir>. Creio que este problema não se deve a problemas de percurso, mas sim à corrupção da memória. O indicador funciona bem durante as primeiras 3-4 hrs, após as quais a corrupção começa.
 

Suspeito que não seja nada do tipo . .

Parece que algo semelhante acontece quando novos dados históricos são adicionados ao gráfico, rolando o gráfico para a direita.

 
RaptorUK:

Suspeito que não seja nada do tipo . .

Parece que algo semelhante acontece quando novos dados históricos são acrescentados ao gráfico, rolando o gráfico para a direita.

Hmm, "novos dados históricos são acrescentados ao gráfico", como? O indicador é iniciado e deixado sem ser perturbado. Temos um lookback fixo de 1000 barras. O indicador não está carregando nenhum dado histórico.

Alguém da equipe de desenvolvimento pode dar uma olhada nisto?

 
AnkaSoftware:

Hmm, "novos dados históricos são adicionados ao gráfico", como? O indicador é iniciado e não é perturbado. Temos um lookback fixo de 1000 barras. O indicador não está carregando nenhum dado histórico.

Alguém da equipe de desenvolvimento pode dar uma olhada nisto?

Estou com o RaptorUK nisto: é colossalmente improvável que isto seja um bug no MT4 ao invés de seu código, ou qualquer coisa a ver com Windows de 64 bits. Já vi relatórios de problemas de desempenho e estabilidade com o MT4 que se revelaram bem fundamentados (por exemplo, https://www.mql5.com/en/forum/135355), mas nunca vi um relatório de um bug no idioma MT4 que se revelasse correto.

Deixe-me apontar uma diferença entre suas telas "Move Normal" e "Move Error". Em "Move Normal", não há barras aparentemente ausentes. Já em "Move Error", parece haver dados faltantes no gráfico. A maioria dos marcadores no eixo X estão separados por 16 minutos, mas o intervalo entre o segundo e o terceiro marcadores é de 21 minutos (06:08 a 06:29). Este pode ou não ser o problema, mas eu começaria a procurar em seu código por lugares que supõem que haverá uma série contínua de barras. Por exemplo, se atualmente são 8h, qualquer coisa no código que suponha que (a) a barra para 7h é 60 barras atrás, ou mesmo (b) que uma barra para 7h existe de todo.

Razão: