Buffers indicadores de leitura ajustados para tabela

 

Um indicador é colocado na tabela. É redesenhado por Timer, ChartEvent e Calculate events.

Preciso de um roteiro para ler os valores atuais de seus buffers indicadores(INDICATOR_DATA) que podem ser vistos pela CTRL+D. É possível fazer isso no MT4?

 

A solução via DLL é dada no artigo"Transferência de dados entre indicadores - uma solução simples para este problema". Mas é preciso acrescentar a chamada deGetPtr externo ao código fonte indicador, o que nem sempre é possível.

Sem DLL é possível realizar somente leitura (sem escrita, o que também é feito no artigo) de buffers? Alguma coisa mudou neste tópico desde o momento em que o artigo foi escrito (2010)?

 
iCustom() vai ajudar.
iCustom - Технические индикаторы - Справочник MQL4
iCustom - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iCustom - Технические индикаторы - Справочник MQL4
 
Alexey Viktorov:
iCustom() vai ajudar.

Infelizmente, neste caso

redesenhar por Timer, ChartEvent e Calculareventos.

não vai ajudar.

 
Quantos valores você precisa? Deixe o próprio indicador salvar duplicatas destes valores nas variáveis globais do terminal, nas propriedades dos objetos no gráfico, nos arquivos
 
Alexander Puzanov:
Quantos valores você precisa? Deixe o próprio indicador salvar as duplicatas destes valores em variáveis globais do terminal, em propriedades dos objetos no gráfico, em arquivos

Preciso de um roteiro para obter os valores de buffers (pelo menos um) de um indicador em um gráfico. A descarga de amortecedores de um indicador para um arquivo não é um amortecedor de leitura de roteiro.

No artigo acima, há uma boa solução através de indicadores que permite não apenas ler, mas até mesmo sobrescrever os buffers de outros indicadores nos gráficos. Isto é o que se chama de leitura tampão. Mas é uma DLL.

Veja, podemos implementar o seguinte esquema

  • o indicador espera que uma variável global escreva seus buffers no arquivo.
  • O script cria essa variável em tempo de execução e recebe os arquivos correspondentes.
Mas isto não é nem mesmo uma muleta. Não é um amortecedor de leitura.

A julgar pelo silêncio, mais de sete anos desde que este problema foi anunciado publicamente no quarto fórum (google relembra), os desenvolvedores não criaram um funcional.

Por alguma razão eles ainda não podem fazer uma leitura humana dos dados indicadores do gráfico! Parece ilusório, mas é.

 
comp:

Infelizmente, neste caso

não vai ajudar.

Por que não? iCustom() lê o buffer indicador independentemente de como este buffer é preenchido. Afinal de contas, o buffer é declarado no nível das variáveis globais em qualquer caso.
 
Alexey Viktorov:
Por que não? iCustom() lê o buffer indicador, independentemente de como este buffer é preenchido. Afinal de contas, o buffer é declarado no nível das variáveis globais em qualquer caso.

Porque o iCustom não sabe nada sobre os eventos Timer e ChartEvent.

Por exemplo, o indicador no gráfico a cada segundo (evento do temporizador) preenche seu único buffer com números aleatórios (ou aplica EMA aos valores de buffer anteriores). Este é um conjunto de linhas de código. Neste caso, o iCustom nunca devolverá o que você verá na tabela.

 
comp:

Porque o iCustom não sabe nada sobre os eventos Timer e ChartEvent.

Por exemplo, o indicador no gráfico a cada segundo (evento do temporizador) preenche seu único buffer com números aleatórios (ou aplica EMA aos valores de buffer anteriores). Este é um conjunto de linhas de código. O iCustom nunca retornará o que você verá na tabela.

Eu entendo meu equívoco, obrigado.
 
Alexey Viktorov:
Por que não? iCustom() lê o buffer indicador, independentemente de como este buffer é preenchido. Afinal de contas, o buffer é declarado no nível das variáveis globais em qualquer caso.

O iCustom não lê buffers do indicador no gráfico, ele cria sua própria cópia do indicador na memória e lê a partir dele, apenas as cópias de buffer não são exibidas no gráfico. Mas se o indicador desenha algo no gráfico independentemente, ele será desenhado quando chamado via iCustom que cria problemas, a propósito

Por exemplo, se o indicador tiver o seguinte código, ele será desenhado ao chamar o iCustom, e o texto sobreporá o texto do indicador no gráfico

ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст");
ChartRedraw();
 
Alexey Volchanskiy:

O iCustom não lê buffers do indicador no gráfico, ele cria sua própria cópia do indicador na memória e lê a partir dele, apenas as cópias de buffer não são exibidas no gráfico. Mas se o indicador desenha algo no gráfico independentemente, ele será desenhado quando chamado via iCustom que cria problemas, a propósito

Por exemplo, se o indicador tiver o seguinte código, ele será desenhado ao chamar o iCustom, e o texto sobreporá o texto do indicador no gráfico

É estranho. Li em algum lugar no guia que se o indicador já estiver lançado, nenhuma cópia é criada. Talvez eu não entenda alguma coisa.