Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1466
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Boa tarde. Ao escrever um Expert Advisor no Mql5, encontrei um problema. Há um array com valores de abertura de candlesticks para o ano. Em cada candlestick desse array, preciso criar um array de n-candles, digamos 30, para verificar os altos e baixos. Algo como um indicador Zigzag.
Escrevi este código, que apresenta um erro: "matriz fora do intervalo" ou os valores de máximo e mínimo em toda a matriz, mas não no período necessário de 30 velas.
Talvez eu precise criar outra matriz para verificar nas funções ArrayMaximum() e ArrayMinimum(), mas estou confuso com os loops aninhados e o tamanho da matriz.
Por favor, me dê uma dica.
if(i+30<=ArraySize(opens))
Aqui está a saída fora da matriz
Esse erro se deve à falta de atenção. Corrigi-lo não resolve o problema.
Como posso criar uma matriz de 30 preços de abertura de candlestick para pesquisar máximos e mínimos nela?
ArrayMaximum
ArrayMaximum
Retorna índice do valor máximo, não o preço.
Não verifiquei, mas parece ser a maneira de obter índices de mínimos e máximos de aberturas de candlestick (aberturas).
Embora você também possa obter o preço de uma só vez, mas não os índices.
Não encontrei em lugar algum um exemplo de loop mql com uma etapa. Isso simplifica toda a questão.
Somente o ChatGPT me aconselhou a escrever dessa forma:
Vou fazer mais experimentos. O código funciona. Obrigado.
O erro "array out of range" ocorre se você não fizer o ArrayResize.
Esse erro se deve à falta de atenção. A correção não resolve o problema.
Como posso criar uma matriz de 30 preços de abertura de candlestick para pesquisar máximos e mínimos nela?
Qual é o problema? Declare uma matriz temp[] e copie 30 elementos para ela e procure o índice do valor mínimo/máximo. E se, no final, for menor que 30, ele copiará quantos restarem. E, nesse caso, eu preferiria usar um loop while().
Qual é o problema? Declare uma matriz temp[] e copie 30 elementos para ela e procure o índice do valor mínimo/máximo. E se, no final, for menor que 30, ele copiará quantos ainda restam. E, nesse caso, eu preferiria usar um loop while().
Sim, você pode fazer isso. Não estou pensando direito, por isso estou pedindo conselhos.
Sim, você poderia fazer isso. Não estou pensando direito, por isso estou pedindo conselhos.
Em uma matriz estática, o tamanho é definido como constante, não pode ser alterado; em uma matriz dinâmica, ele pode ser alterado, mas o tamanho da matriz é definido! ou seja, o tamanho da matriz é conhecido e os índices dos elementos de 0 até o final. <= está fora dos limites apenas porque os índices dos elementos a partir de zero e o índice do último elemento são menores em uma unidade do tamanho da matriz.
Tudo está em suas mãos))))
Em uma matriz estática, o tamanho é definido como constante e não pode ser alterado; em uma matriz dinâmica, ele pode ser alterado, mas o tamanho da matriz é definido, ou seja, o tamanho da matriz é conhecido e os índices dos elementos vão de 0 até o final. <= está fora dos limites apenas porque os índices dos elementos a partir de zero e o índice do último elemento são menores em uma unidade do tamanho da matriz.
Tudo está em suas mãos))))
O que você quer dizer comisso ? Você acha que para copiar um certo número de elementos de um array para outro, algum temp[], você deve definir o tamanho do array antes de copiar ArrayResize(temp, new_size); ?????
Sim, você poderia fazer isso. Não estou pensando direito, por isso estou pedindo conselhos.
Você nem precisa de um array temporário.
Este código
procura o máximo de 15 elementos restantes, apesar do fato de estar configurado para procurar 20 elementos.
Portanto, é melhor usar o loop while() e não se preocupar com o número de itens restantes do array.