Indicador que está se corrompendo - página 5

 
Rosh:

O que você quer dizer com corrupções? Acabo de anexar seu indicador no EURUSD M1 e não vejo nenhum valor.


O terminal de cliente MetaTrader 4 de 32 bits mostra a mesma imagem. Você tem certeza de que o indicador fornecido funciona?
 
Rosh:

O terminal do cliente MetaTrader 4 sapatos 32bit tem a mesma imagem. Você tem certeza de que o indicador fornecido funciona?
Parece que você baixou a versão original do código de exemplo (timestamped 2011.10.11 18:06). Isso não atrai nada durante 25 minutos. No init(), ele define drawTime para TimeCurrent(), e aciona qualquer código apenas uma vez no início() (drawTime + 1500 < TimeCurrent()).

A segunda versão, timestamped 2011.10.12 06:37, parece que deve começar a desenhar imediatamente.

Mas, de qualquer forma, os problemas aparentemente não começam a acontecer por várias horas.
 
jjc:
Parece que você baixou a versão original do código de exemplo (timestamped 2011.10.11 18:06). Isso não atrai nada por 25 minutos.
Ok, vou esperar
 

O terminal de cliente MetaTrader 4 de 32 bits mostra a mesma imagem. Você tem certeza de que o indicador fornecido funciona?

- Sim. Estou rodando o mesmo indicador em uma máquina de 32 bits também, desde ontem à noite, aproximadamente 18 hrs. O problema não está ocorrendo.

Se você quiser que outro possível bug MT4 ocorra, o que acontece se você usar Low[i] e High[i] em vez de iLow() e iHigh() ?

- Em meu código atual são usados iHighest / iHigh / iLowest / iLow etc... Usado Alto/Baixo no código de exemplo para reduzir a complexidade

 
RaptorUK:
Tenho uma idéia . . mas tenho que sair agora, adicionei o Indicador a um novo gráfico, testarei minha idéia quando voltar e publicar os resultados.

OK, acabei de voltar, a tabela parecia bem desde que carreguei o Indicador pela primeira vez . . depois tentei minha idéia . . Paged Up para mover o gráfico para a direita para que novos dados pudessem ser baixados . . e hey presto . .

Foi isto que sugeri neste tópico em 2011.10.07 19:08

 
RaptorUK:

OK, acabei de voltar, a tabela parecia bem desde que carreguei o Indicador pela primeira vez . . depois tentei minha idéia . . Paged Up para mover o gráfico para a direita para que novos dados pudessem ser baixados . . e hey presto . .

Certo, então você está colocando a hipótese de que o histórico da barra está mudando por alguma razão, e sendo preenchido novamente, e o indicador está sendo afetado porque ele só puxa para frente e não segue o comportamento habitual do indicador de recalcular com base em coisas como IndicatorCounted() ?
 
jjc:
Certo, então você está colocando a hipótese de que o histórico da barra está mudando por alguma razão, e sendo preenchido novamente, e o indicador está sendo afetado porque ele só puxa para frente e não segue o comportamento habitual do indicador de recalcular com base em coisas como IndicatorCounted() ?
Eu não olhei para o código recente. . mas sim, algo parecido com o que você escreveu.
 
RaptorUK:
Eu não olhei para o código recente. . mas sim, algo na linha do que você escreveu.

Ok, em resumo, o que parece que temos é o seguinte:

* Um indicador normal usará IndicatorCounted() para determinar quais valores de barra estão "sujos" e precisam ser (re)calculados.

* Quando você adiciona barras extras ao histórico rolando de volta, IndicatorCounted() é reposto a zero. Portanto, neste ponto, um indicador normal recalculará todos os seus valores históricos.

* O indicador aqui não faz isto. Na verdade, ele ignora o IndicatorCounted() e desenha apenas para frente.

* Por alguma razão, a máquina Win64 da AnkaSoftware é periodicamente preenchida com dados mais antigos, mas a máquina Win32 não é. O sistema operacional provavelmente é apenas coincidência neste contexto.

* É um pouco malicioso que o MT4 não ajuste os buffers indicadores à luz das novas barras que foram adicionadas e, em vez disso, se baseie no código indicador recalculando todos os valores antigos porque o IndicatorCounted() é reinicializado. (Entretanto, é razoavelmente justificável, porque a adição de valores de barras mais antigas a muitos indicadores afeta potencialmente os cálculos subseqüentes. Por exemplo, um EMA mudará, embora por um valor mínimo, se você adicionar uma barra extra no início da história).

 
jjc:

* É um pouco maroto que o MT4 não ajuste os amortecedores indicadores à luz das novas barras que foram adicionadas e, em vez disso, se baseia no código indicador recalculando todos os valores antigos porque o IndicatorCounted() é reinicializado.

Na verdade, pensando nisso, isso é errado. Há uma boa razão pela qual o MT4 tenta dizer ao indicador para recalcular tudo, e esse cenário pode muito bem ter sido aplicado aqui.

Digamos que o indicador esteja funcionando há algum tempo, mas depois há uma desconexão do corretor que dura para várias barras. Na reconexão, o MT4 receberá um sinal e começará a desenhar os valores do indicador para a última barra. Separadamente, assíncrona e mais lentamente, receberá os dados históricos das barras que faltam que ocorreram durante a desconexão. Estas são inseridas no meio do histórico da barra e, portanto, é necessário que qualquer indicador normal redesenha valores antigos começando pelo menos a partir do início do período de desconexão. Na prática, é compreensível que o MT4 adote a abordagem "redesenhar tudo". A única questão é se o MT4 deve alterar automaticamente os valores de buffer para EMPTY_VALUE se eles forem potencialmente inválidos.
 

Esta questão afeta apenas os indicadores baseados em indicadores?

Que tal outros, digamos alto[], baixo[], ou iHigh, iLow, iLowest, iBarshift, etc, etc...., é isso que eu prefiro saber e ser claro.