Estou montando um indicador que precisa verificar informações de 2 timeframes diferentes ( M1 e M5).
Estou usando o indicador iMA e colocando a informação para M1.
Tenho uma função "for" para os 2 timeframes, porém a informação de M1 fica repetindo e somente informação de m5 atualiza, LEMBRANDO QUE O GRAFICO ESTÀ ABERTO EM M5. Alguem sabe como ajudar? Fico Grato"
Segue um pedaço do código para exemplo:
No caso do codigo abaixo os resultados de SMA1 para a posição j são iguais. Por exemplo:
Na função print: Print(SMA1 + "- posicão" +j + "-posição"+i); Para todas as posições 0 de os resultados são o mesmo
0.9858959966857704- posicão0-posição01
0.9858959966857704- posicão0-posição02
0.9858959966857704- posicão0-posição03
0.9858959966857704- posicão0-posição04
Trabalhar em mais de um TF é chato no mql5. Você precisa desenhar o histórico? Senão, sugiro abordar como é feito em EAs: muda a ordem do array, cópia apenas alguns buffers (5 talvez) mas só leia o buffer [0].
Ricardo agradeço a resposta,
Mas sendo sincero, sou bem iniciante na programação, não sei o que o copybuffer.
Se puder me orientar agradeço. Caso tenha uma solução para compartilhar agradeço. A ideia é que os valores referentes a M1 se atualizem quando M5 for atualizado, o que não está ocorrendo.
Ricardo agradeço a resposta,
Mas sendo sincero, sou bem iniciante na programação, não sei o que o copybuffer.
Se puder me orientar agradeço. Caso tenha uma solução para compartilhar agradeço. A ideia é que os valores referentes a M1 se atualizem quando M5 for atualizado, o que não está ocorrendo.
Estou montando um indicador que precisa verificar informações de 2 timeframes diferentes ( M1 e M5).
Estou usando o indicador iMA e colocando a informação para M1.
Tenho uma função "for" para os 2 timeframes, porém a informação de M1 fica repetindo e somente informação de m5 atualiza, LEMBRANDO QUE O GRAFICO ESTÀ ABERTO EM M5. Alguem sabe como ajudar? Fico Grato"
Segue um pedaço do código para exemplo:
No caso do codigo abaixo os resultados de SMA1 para a posição j são iguais. Por exemplo:
Na função print: Print(SMA1 + "- posicão" +j + "-posição"+i); Para todas as posições 0 de os resultados são o mesmo
0.9858959966857704- posicão0-posição01
0.9858959966857704- posicão0-posição02
0.9858959966857704- posicão0-posição03
0.9858959966857704- posicão0-posição04
😂😂 ... TUDO bem para um iniciante sua falha é compreensível ... Não quero te desmotivar, pelo contrário: QUERO lhe motivar a estudar ainda mais. 😁👍 .... Mas vamos por partes ... ao usar a função iMA, que é uma função de indicador padrão, você não está de fato obtendo o valor calculado ... o que esta função retorna é um handle ( manipulador ) ... Este handle, não contem nenhuma informação além de um ponteiro, para você conseguir ler o buffer do indicador, que no caso é o iMA. Esta a primeira parte. A parte que você de fato irá ter que fazer, é definir melhor o que você deseja e quer obter. Se você deseja obter um sistema de cruzamento de media, você precisará fazer uma coisa. Se deseja apenas obter valores da media, teria que fazer outra coisa. Então definir isto é o primeiro passo.
Uma vez definido isto, você poderá começar a programação em si. Mas independente disto você deverá usar não uma, mais duas chamadas a função iMA. E por que DUAS 🤔 ?!?! O motivo é que uma irá lhe dizer o que está acontecendo no M1 e a outra no M5. Isto lhe deixa livre para poder mudar o timeframe do gráfico. Abaixo lhe mostro o código corrigido com base no que você mostrou ... Acredito que você esteja querendo usar a media exponencial de 8 por conta disto nas linhas 11 e 12 estou usando o valor 8, mas se você quer usar outra média basta trocar o valor 8 pelo desejado ... fazendo assim você irá conseguir trabalhar com o indicador em um gráfico de 15 minutos por exemplo, porém ele estará sempre lhe informando o que esta acontecendo no 1 minuto e no 5 minutos.
A parte que você de fato terá que ajustar no código, além das linhas 11 e 12. É na linha 19, ali estou dizendo que quero saber os dois ultimos valores calculados pelo iMA. Se você desejar saber mais valores, bastará mudar o tamanho do array, de 2 para outro desejado ...
01. //+------------------------------------------------------------------+ 02. #property copyright "Daniel Jose" 03. #property indicator_chart_window 04. #property indicator_plots 0 05. //+------------------------------------------------------------------+ 06. int handleM1, handleM5; 07. //+------------------------------------------------------------------+ 08. int OnInit() 09. { 10. IndicatorSetString(INDICATOR_SHORTNAME, "Comparação"); 11. handleM1 = iMA(NULL, PERIOD_M1, 8, 0, MODE_EMA, PRICE_CLOSE); 12. handleM5 = iMA(NULL, PERIOD_M5, 8, 0, MODE_EMA, PRICE_CLOSE); 13. 14. return INIT_SUCCEEDED; 15. } 16. //+------------------------------------------------------------------+ 17. int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) 18. { 19. double Buff_M1[2], Buff_M5[2]; 20. int i0; 21. 22. if (CopyBuffer(handleM1, 0, 0, i0 = ArraySize(Buff_M1), Buff_M1) < i0) return rates_total; 23. if (CopyBuffer(handleM5, 0, 0, i0 = ArraySize(Buff_M5), Buff_M5) < i0) return rates_total; 24. 25. // ... USO dos valores dos buffers. 26. 27. return rates_total; 28. } 29. //+------------------------------------------------------------------+
Acredito que você irá precisar de mais informações ao longo do tempo. Que tal então ler estas serie de artigos que estou postando. É sobre como criar um EA 100% automático. Serão 15 artigos, um por semana. Esta semana deve sair o artigo 4, mas você pode ver o artigo 3 neste link:https://www.mql5.com/pt/articles/11226, Além deste, dê uma olhada nos meus outros artigos, eles poderão lhe ajudar bastante ... E não desista pois no começo parece complicado, mas se você tiver de fato interesse em aprender irá ver que o MetaTrader 5 tem muito a oferecer ... 😁👍

- www.mql5.com
😂😂 ... TUDO bem para um iniciante sua falha é compreensível ... Não quero te desmotivar, pelo contrário: QUERO lhe motivar a estudar ainda mais. 😁👍 .... Mas vamos por partes ... ao usar a função iMA, que é uma função de indicador padrão, você não está de fato obtendo o valor calculado ... o que esta função retorna é um handle ( manipulador ) ... Este handle, não contem nenhuma informação além de um ponteiro, para você conseguir ler o buffer do indicador, que no caso é o iMA. Esta a primeira parte. A parte que você de fato irá ter que fazer, é definir melhor o que você deseja e quer obter. Se você deseja obter um sistema de cruzamento de media, você precisará fazer uma coisa. Se deseja apenas obter valores da media, teria que fazer outra coisa. Então definir isto é o primeiro passo.
Uma vez definido isto, você poderá começar a programação em si. Mas independente disto você deverá usar não uma, mais duas chamadas a função iMA. E por que DUAS 🤔 ?!?! O motivo é que uma irá lhe dizer o que está acontecendo no M1 e a outra no M5. Isto lhe deixa livre para poder mudar o timeframe do gráfico. Abaixo lhe mostro o código corrigido com base no que você mostrou ... Acredito que você esteja querendo usar a media exponencial de 8 por conta disto nas linhas 11 e 12 estou usando o valor 8, mas se você quer usar outra média basta trocar o valor 8 pelo desejado ... fazendo assim você irá conseguir trabalhar com o indicador em um gráfico de 15 minutos por exemplo, porém ele estará sempre lhe informando o que esta acontecendo no 1 minuto e no 5 minutos.
A parte que você de fato terá que ajustar no código, além das linhas 11 e 12. É na linha 19, ali estou dizendo que quero saber os dois ultimos valores calculados pelo iMA. Se você desejar saber mais valores, bastará mudar o tamanho do array, de 2 para outro desejado ...
Acredito que você irá precisar de mais informações ao longo do tempo. Que tal então ler estas serie de artigos que estou postando. É sobre como criar um EA 100% automático. Serão 15 artigos, um por semana. Esta semana deve sair o artigo 4, mas você pode ver o artigo 3 neste link:https://www.mql5.com/pt/articles/11226, Além deste, dê uma olhada nos meus outros artigos, eles poderão lhe ajudar bastante ... E não desista pois no começo parece complicado, mas se você tiver de fato interesse em aprender irá ver que o MetaTrader 5 tem muito a oferecer ... 😁👍
Muito obrigado! Precisando estou a disposição!
Abraço
Valeu DANIEL!!! CARA SHOW D+ Ter dado essa moral! Vou estudar aqui e verificar as melhorias! Daniel uma coisa que eu percebi, que estou usando o MQL4 e não achei o COPYBUFER nele....alguma dica.
Muito obrigado! Precisando estou a disposição!
Abraço
Uma dica minha se vai usar o MQL4, olha a documentação de migração para MQL5 que as vezes a gente assumi que é MQL5 e dai tu pode ver lá a função equivalente em MQL4. Um dos exemplos que lembro é que o MQL5 trabalha com indicadores de maneira diferente, nele é criado um handle e depois copiado os dados de tempos em tempos via copybuffer. Já no MQL4 isso não é feito assim, se voce usar iMA o que vai ser devolvido é o valor da média e não um handler já que não existe copybuffer.

- 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
Estou montando um indicador que precisa verificar informações de 2 timeframes diferentes ( M1 e M5).
Estou usando o indicador iMA e colocando a informação para M1.
Tenho uma função "for" para os 2 timeframes, porém a informação de M1 fica repetindo e somente informação de m5 atualiza, LEMBRANDO QUE O GRAFICO ESTÀ ABERTO EM M5. Alguem sabe como ajudar? Fico Grato"
Segue um pedaço do código para exemplo:
No caso do codigo abaixo os resultados de SMA1 para a posição j são iguais. Por exemplo:
Na função print: Print(SMA1 + "- posicão" +j + "-posição"+i); Para todas as posições 0 de os resultados são o mesmo
0.9858959966857704- posicão0-posição01
0.9858959966857704- posicão0-posição02
0.9858959966857704- posicão0-posição03
0.9858959966857704- posicão0-posição04