Limpeza de matriz forçada em MT5?

 

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ê?

 

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.

 
OK, não vamos reclamar. )) É preciso apenas se acostumar. ))
 

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.

 
Peter, eu não sei o que você quer dizer?
Há uma matriz dinâmica, há o tamanho atual desta matriz, há um controle de excesso de fluxo.
Pessoalmente, tento evitar o controle de transbordamento, e o uso somente na fase de projeto, porque se o algoritmo estiver correto sem erros, os transbordamentos não ocorrem. Por que você precisa de verificações desnecessárias?
Se você tiver um transbordamento ocorrendo, procure por erros. Um depurador com pontos de interrupção ajuda você ou sem pontos de interrupção, porque o programa pára no modo de depuração quando ocorre um transbordo e você pode olhar as variáveis.
E se há lixo, é o seu lixo que você não limpou.
 
Реter Konow:

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.

 
Nikolai Semko:
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
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu:

tudo mais ou menos o mesmohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

agora é culpa da MQL5... ;)

Certo. Não estou acostumado com a MQL4.
O que, na verdade, não há necessidade de controlar os transbordos ali? Mas é terrível. Como se apanham os erros?
 
Nikolai Semko:
Sim. Eu não estou acostumado com a MQL4.
O que, realmente, não há necessidade de controlar os transbordamentos? Mas isso é terrível, não é? Como posso detectar erros?

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í.

 
Nikolai Semko:
Bem, sim. Eu não estou acostumado com a MQL4.
O que, realmente, não há necessidade de controlar os transbordamentos? Mas isso é terrível, não é? Como se apanham os erros?

É 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...".

 
Реter Konow:

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 multidimensionais
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
Razão: