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)?
- docs.mql4.com
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.
Por alguma razão eles ainda não podem fazer uma leitura humana dos dados indicadores do gráfico! Parece ilusório, mas é.
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.
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.
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.
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();
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
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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?