Ajuda em Banda de Bollinger em Candle específico

 

Bom dia, queria saber como faço para saber a Banda de Bollinger em um Candle específico, não apenas no meu atual, estou tentando desta forma, porém ele está printando tudo errado, alguém pode me ajudar? Deste já, agradeço!


   double BBDef = iBands(_Symbol, 0, BBPeriodo, BBDeslocamento, BBDesvio, PRICE_CLOSE);
   double BBLowerArray[];
   double BBUpperArray[];
   CopyBuffer (BBDef, 2,0,3, BBLowerArray);
   CopyBuffer (BBDef, 1,0,3, BBUpperArray);
   
   double BBLowerValor_1 = BBLowerArray[1];
   double BBUpperValor_1 = BBUpperArray[1];
   
   double BBLowerValor_2 = BBLowerArray[2];
   double BBUpperValor_2 = BBUpperArray[2];
 
Rodrigo Costa:

Bom dia, queria saber como faço para saber a Banda de Bollinger em um Candle específico, não apenas no meu atual, estou tentando desta forma, porém ele está printando tudo errado, alguém pode me ajudar? Deste já, agradeço!


Poderia descrever a sua definição de "tudo errado"?

Enquanto aguardo a resposta, gostaria de perguntar, você conhece a função ArraySetAsSeries ?

Att

 
Yan Haeffner:

Poderia descrever a sua definição de "tudo errado"?

Enquanto aguardo a resposta, gostaria de perguntar, você conhece a função ArraySetAsSeries ?

Att

Obrigado pela resposta, não conheço essa função, ela pode me ajudar? Meu código double BBLowerValor_1 = BBLowerArray[1];, eu peço para ele "printar" o candle 1, mas ele printa outro. Eu preciso de algo que me retorne os valores da banda de bollinger dos períodos anteriores(13 candles para atrás). Você sabe alguma forma de fazer isso?

 
Rodrigo Costa:

Obrigado pela resposta, não conheço essa função, ela pode me ajudar? Meu código double BBLowerValor_1 = BBLowerArray[1];, eu peço para ele "printar" o candle 1, mas ele printa outro. Eu preciso de algo que me retorne os valores da banda de bollinger dos períodos anteriores(13 candles para atrás). Você sabe alguma forma de fazer isso?

Acredito que ArraySetAsSeries seria exatamente a solução... Sua abordagem ao problema está certa, exceto pela forma como ela funciona naturalmente em Arrays, vou explicar:

Ao chamar o valor de BBLowerArray[1], o que você gostaria de fazer seria chamar o valor do candle anterior, porém, o que você está fazendo é chamar o valor do segundo candle mais antigo, ou seja, se você está preenchendo essa array com 13 valores, o que você está fazendo utilizando BBLowerArray[1] é obter o valor da faixa inferior das bandas de bollinger do 12º candle.

A função que mencionei organiza o vetor de maneira que ele se torne ordenado da forma em que você pensou no seu código, ou seja, o índice 1 retorna o segundo valor mais atual. O índice "0" refere-se ao valor mais atual possível e assim sucessivamente...

Adicione a linha de código "ArraySetAsSeries(BBLowerArray, true);" logo após a declaração do vetor (faça isso o número de vezes que você necessitar, ou seja, para o número de vetores que você for utilizar) e acredito que seu problema será solucionado...

Se entendi bem sobre o problema, é apenas isso...

Para saber mais sobre a função:
https://www.mql5.com/pt/docs/array/arraysetasseries

Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
  • www.mql5.com
//| Função de inicialização do indicador customizado                 | //| Função de iteração do indicador customizado                      | //
 
Yan Haeffner:

Acredito que ArraySetAsSeries seria exatamente a solução... Sua abordagem ao problema está certa, exceto pela forma como ela funciona naturalmente em Arrays, vou explicar:

Ao chamar o valor de BBLowerArray[1], o que você gostaria de fazer seria chamar o valor do candle anterior, porém, o que você está fazendo é chamar o valor do segundo candle mais antigo, ou seja, se você está preenchendo essa array com 13 valores, o que você está fazendo utilizando BBLowerArray[1] é obter o valor da faixa inferior das bandas de bollinger do 12º candle.

A função que mencionei organiza o vetor de maneira que ele se torne ordenado da forma em que você pensou no seu código, ou seja, o índice 1 retorna o segundo valor mais atual. O índice "0" refere-se ao valor mais atual possível e assim sucessivamente...

Adicione a linha de código "ArraySetAsSeries(BBLowerArray, true);" logo após a declaração do vetor (faça isso o número de vezes que você necessitar, ou seja, para o número de vetores que você for utilizar) e acredito que seu problema será solucionado...

Se entendi bem sobre o problema, é apenas isso...

Para saber mais sobre a função:
https://www.mql5.com/pt/docs/array/arraysetasseries

Yan Haeffner:

Acredito que ArraySetAsSeries seria exatamente a solução... Sua abordagem ao problema está certa, exceto pela forma como ela funciona naturalmente em Arrays, vou explicar:

Ao chamar o valor de BBLowerArray[1], o que você gostaria de fazer seria chamar o valor do candle anterior, porém, o que você está fazendo é chamar o valor do segundo candle mais antigo, ou seja, se você está preenchendo essa array com 13 valores, o que você está fazendo utilizando BBLowerArray[1] é obter o valor da faixa inferior das bandas de bollinger do 12º candle.

A função que mencionei organiza o vetor de maneira que ele se torne ordenado da forma em que você pensou no seu código, ou seja, o índice 1 retorna o segundo valor mais atual. O índice "0" refere-se ao valor mais atual possível e assim sucessivamente...

Adicione a linha de código "ArraySetAsSeries(BBLowerArray, true);" logo após a declaração do vetor (faça isso o número de vezes que você necessitar, ou seja, para o número de vetores que você for utilizar) e acredito que seu problema será solucionado...

Se entendi bem sobre o problema, é apenas isso...

Para saber mais sobre a função:
https://www.mql5.com/pt/docs/array/arraysetasseries

Muito obrigado Yan, sua ajuda foi essencial, consegui resolver o meu problema! Era exatamente isso.

Razão: