A razão para sair dos limites é que as matrizes são gradualmente preenchidas com valores em diferentes funções, e neste processo, uma célula é acessada através de outra célula. Algumas funções são chamadas duas vezes e preenchem a matriz sequencialmente. Mas, se houver lixo nas celas, há uma sobrecarga no primeiro preenchimento.
Acho que o problema pode ser resolvido limpando as matrizes com antecedência, mas é claro que isto é uma dor de cabeça adicional. É uma pena.
Acostume-se a isso.
Sempre declaro uma matriz, defino o tamanho esperado, preencho-a com valores (inicializo-a). Muitas vezes é melhor inicializar com um valor diferente de zero - é mais fácil encontrar um erro dessa forma.
Nunca trabalhei seriamente com o MT5, e agora estou transferindo um grande projeto para ele de uma só vez. Naturalmente, existem dificuldades, uma das quais está constantemente se distanciando da matriz. O MT4 não teve tal problema, como acontece, também porque as arrays não precisavam ser propositalmente limpas após o anúncio. Mas em MT5 é necessário. Minha tecnologia requer o preenchimento gradual da amêndoa, juntamente com mudanças em seu tamanho. O tamanho exato de algumas matrizes não é conhecido de antemão. Ao mesmo tempo, devido ao grande número de loops em arrays no processo de enchimento, tudo estaria fora de ordem. Se não houvesse lixo nas células, tudo teria funcionado há muito tempo.
Ou seja, há lixo em arrays por um lado e erro crítico de overruns por outro lado. É como uma condição draconiana...
Quero entender porque eles tiveram que remover a limpeza automática das matrizes e reduzir as variáveis declaradas a zero, como no MT4?
Se pudermos tolerar variáveis, teremos que enfrentar o problema da constante coleta de lixo em grandes matrizes, e teremos que limpá-las não só ao declarar, mas também ao redimensionar... Por quê?
Também encontrou dificuldades semelhantes no início.
Na minha opinião, as matrizes são preenchidas de uma forma específica, isto deve ser levado em conta em loops frequentemente.
Peter, eu não sei o que você quer dizer?
tudo mais ou menos o mesmohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
agora é culpa da MQL5... ;)

- 2019.02.28
- www.mql5.com
tudo mais ou menos o mesmohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
agora é culpa da MQL5... ;)
Sim. Eu não estou acostumado com a MQL4.
Nikolay, não se preocupe com a MQL4, lá tudo está bem. O iniciante do tópico preenche as matrizes como ele gosta. É isso aí.
Bem, sim. Eu não estou acostumado com a MQL4.
É claro que sim.
Qualquer programador que respeite a si mesmo e seus programas não deixará escapar as coisas. Na MQL4, se você não usar #propriedade estrita, você pode se referir a uma matriz com tamanho 10 por índice 20. E nada vai acontecer - o programa continuará a funcionar, mas cabe ao programador decidir o que usar em seguida. Se ele for inteligente, certamente verificará e controlará tudo, de modo a não obter valores fora da matriz, mas se o fizer "com um estrondo", ele não se importa com esse controle, e "o principal é que ele funciona, mas como - de alguma forma...".
A maioria dos usuários, que não se preocuparam com isso, tem reclamado da "má, má e complicada MQL5", porque ela não lhes permite falsificar suas próprias criações como antes. Mas aqueles que originalmente pensavam e criavam código com verificações e controle dos dados recebidos, não notaram nenhuma diferença na complexidade dos idiomas, e agora se perguntam - "onde está a complexidade - é a mesma...".
Nunca trabalhei seriamente com o MT5, e agora estou transferindo um grande projeto para ele de uma só vez.
Séria diferença em arrays ao reescrever
Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais
Características da linguagem mql4, sutilezas e truques
fxsaber, 2019.02.12 13:12
Características do ArrayResize para arrays multidimensionaisvoid OnStart() { int Array[][2]; Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14 Print(ArraySize(Array)); // 14 }

- 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
Nunca trabalhei seriamente com o MT5, e agora estou transferindo um grande projeto para ele de uma só vez. Naturalmente, existem dificuldades, uma das quais é que o conjunto está sempre fora de alcance. O MT4 não teve tal problema, como acontece, também porque as arrays não precisavam ser propositalmente limpas após o anúncio. Mas em MT5 é necessário. Minha tecnologia requer o preenchimento gradual do grão junto com as mudanças de tamanho. O tamanho exato de algumas matrizes não é conhecido de antemão. Ao mesmo tempo, devido ao grande número de loops em arrays no processo de enchimento, tudo estaria fora de ordem. Se não houvesse lixo nas células, tudo teria funcionado há muito tempo.
Ou seja, há lixo em arrays por um lado e erro crítico de overruns por outro lado. É como uma condição draconiana...
Quero entender porque eles tiveram que remover a limpeza automática das matrizes e reduzir as variáveis declaradas a zero, como no MT4?
Se pudermos tolerar variáveis, teremos que enfrentar o problema da constante coleta de lixo em grandes matrizes, e teremos que limpá-las não só ao declarar, mas também ao redimensionar... Por quê?