![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
... A MQL5, ao contrário da MQL4, não tenta entender o que um usuário quer e isto é correto.
Sugiro colocá-lo em um pôster. :) (só brincadeira)
Vasily, entendo que existem algumas nuances que justificam tal abordagem do MT5 para a conveniência do programador. E eu não me importo. Que assim seja.
1. A lógica nos diz que o procedimento de limpeza das matrizes é realizado pelo compilador uma vez em tempo de compilação.
Sim, você tem um problema de lógica :)
Eu não sabia que no 4ka a inicialização por zeros ocorre durante o redimensionamento. Isto não é conveniência, mas algum tipo de bobagem, levando a uma menor velocidade dos programas. Isto é, se eu precisar inicializar a matriz com valor -1, a dupla inicialização acontece.
Em princípio, poderíamos acrescentar alguma bandeira ao declarar uma matriz, o que daria ao compilador a permissão para limpar a matriz. Seria conveniente ou rápido - sua escolha.
Em princípio, poderíamos acrescentar algum tipo de bandeira ao declarar um array que dissesse ao compilador para limpar o array. Seria conveniente ou rápido - sua escolha.
Qual é a diferença? Você faz a inicialização após o redimensionamento, essa é a bandeira inteira.
Sim, após cada declaração de matriz global e após cada redimensionamento de matriz. Mas e se você tiver 20-30 matrizes globais, algumas das quais mudam de tamanho sob certas circunstâncias? Você precisa escrever a inicialização em loops em todos os lugares? (as arrays podem ser bidimensionais). Não é uma fonte potencial de erros?
Sim, após cada declaração de matriz global e após cada redimensionamento de matriz. Mas e se você tiver 20 a 30 matrizes globais, algumas das quais mudam de tamanho sob certas circunstâncias? Você precisa escrever a inicialização em loops em todos os lugares? (as arrays podem ser bidimensionais). Não é este um potencial terreno fértil para erros?
Esta operação cirúrgica é feita de forma bastante simples. Substitua a palavra"ArrayResize" por algo mais - será o nome de sua função para redimensionamento. Verifique nele, se o redimensionamento for maior, então passe pelos novos elementos do laço e atribua zero a eles.
Também, no inite, inicializar todas as matrizes que tenham tamanho (se houver).
Também podem existir matrizes de um determinado tamanho em funções - essas também. Procure-os usando colchetes.
Esta operação cirúrgica é feita de forma bastante simples. Substitua a palavra "ArrayResize" por algo mais - este será o nome de sua função de redimensionamento. Nele, se o redimensionamento for para cima, então passe pelos novos elementos do laço e lhes atribua zero.
Também, no inite, inicializar todas as matrizes que tenham tamanho (se houver).
Também podem existir matrizes de um determinado tamanho em funções - essas também. Procure-os por parênteses rectos.
A propósito, sim.
Vou tentar. É um hack interessante.
Vou apoiar o iniciador do tema, embora haja muitas perguntas para sua criação ))))
Os desenvolvedores da MQL5, na busca da velocidade dos cálculos (ou alguns outros belos números?) removeram todos os "pequenos extras" que tornaram a MQL4 mais amigável,
Se houver uma regra geral na MQL5, os indicadores que são usados na MQL4 se tornarão uma "cartilha" na MQL5, e esta "cartilha" precisa ser lida no contexto do terminal comercial:
1. ao chamar o OnInit(), os buffers indicadores não são inicializados automaticamente
2. eu olhei uma centena de indicadores na kodobase, infelizmente, sob o pretexto de programação em MQL5 eles escrevem indicadores no estilo de MQL4 - eles expandem a numeração de arrays e timeseries
3. iOs mais altos / mais baixos não estão funcionando corretamente - eles procuram barras com os valores mais altos / mais baixos no sentido de aumentar a numeração das séries temporais... Isto é, se usarmos o esquema padrão de indicadores na MQL4 - cálculo a partir dos dados anteriores até o presente, este problema não é resolvido com iHighest e iLowest, pois a barra mais à esquerda é 0, e quando iLowest é chamado, estamos procurando por valores no futuro....
4. o mesmo problema com o ArrayMaximum() - é difícil de usar em indicadores... é difícil não aumentar a numeração de séries temporais, nós pegamos e constantemente subtraímos do número inicial de barras e obtemos ArrayMaximum(alto[i], i -Periodo,Ponto)
5. infelizmente, mesmo os especialistas da MQL5 usam construções questionáveis.... Digamos que uma certa base de muletas salvas na transição do MT4 ainda está sendo transportada.
Qual é o objetivo? - A MQL não finge ser pura С++, por que eles removeram implementações mais simples para os usuários... Eu venho revisando o Python há cerca de um mês, por que tantos trabalhos nele... Só agora eu entendo que Python permite que as pessoas ignorem as pequenas coisas e tem uma interface mais amigável ;) - para um programador experiente tudo parece errado, mas as pessoas o usam e Python é bastante popular