Versão beta do livro online sobre programação MQL4 - por Sergey Kovalev (SK.) - página 10

 
Desculpe, encontrei-o!
Sim, o manual é muito legal, mas voltando ao meu pedido anterior - ele precisa estar à mão para poder consultá-lo prontamente.
Idealmente, deveria substituir a ajuda padrão em novas versões da MT.
 

para SK

duplo my_search_and_etc()
{ dupla soma[]; //arranjo dentro da função
//.........
i=ArrayMinimum(summ,iter,0); // traçador: <incorrred start position 0 for ArrayMinimum function>

//segundo variante de erro
soma estática dupla[]; //
//.........
i=ArrayMinimum(summ,iter,0); // traçador: <incorrred start position 0 for ArrayMinimum function>
//i.e. Erro de endereçamento dinâmico do elemento inicial da matriz no segundo tick
//.......................

//........................
// hora certa
soma dupla[1000]; //especificação de tamanho explícito implica tipo estático
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
//direita dois
soma estática dupla[1000]; //resseguro ao tamanho explícito
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
}

 
Não, você não precisa substituir a ajuda padrão. Guarde-o. Os desenvolvedores de software de linguagem normal separam a descrição do idioma de todos os vários tutoriais para ele.
 
Korey:

para SK


Não estou bem certo de qual é sua pergunta. O conjunto de cordas que você está representando é um código completo (então por que a inicialização é repetida?) ou cordas raspadas (então por que existem cordas encaracoladas?). Envie o código acabado e formule a pergunta. Use o botão MQL (na linha superior da janela de edição) para publicar o código.
 
Renat:
Parabéns a Sergei Kovalev!

O lançamento do Tutorial MQL4 está programado para 1º de fevereiro, e já foi integrado ao website MQL4.community. A tradução para o inglês está em pleno andamento.

Obrigado por suas felicitações, Renat.

Gostaria de aproveitar esta oportunidade para dizer mais uma vez que é uma grande honra para mim publicar o tutorial da MQL4 no site da MetaQuotes Software Corp. Agradeço sinceramente por sua confiança, apoio e incentivo. Também agradeço a Stanislav Starikov e Rashid Umarov da MetaQuotes Software Corp. por seus valiosos conselhos e ajuda na preparação do livro.

 
para SK
O artigo mostra 4 variantes de inicialização de array com uma e a mesma chamada deArrayMinimum();
É mostrado que inicializar uma matriz em um subprograma sem especificar o tamanho da matriz [] leva ao erro "RunTime".
- nas duas primeiras variantes, o erro é citado, em tradução: "ENDEREÇO incorreto do início da matriz".
-segundo duas variantes estão funcionando, mostra-se que especificar uma dimensionalidade de [1000] automaticamente torna a matriz estática.
Conclusões:
1) Os arrays MQL4 nem sempre são estáticos,
2) a definição de a[] estática, ou seja, sem dimensionalidade explícita, não funcionará, mas não haverá mensagem de erro. O erro é exibido em tempo de execução no segundo e subseqüente tick na janela do Expert Advisor.
3) Os erros descritos de estática/dinâmica aparecem se a matriz estiver definida no subfunc, e são pegos somente por aqueles que olham na janela "Expert Advisors",
e somente quando chegar o segundo tique. Por exemplo, o erro não é detectado ao depurar o indicador no fim de semana sem usar o testador de estratégia.
4) A linha do livro "MQL4 arrays are always static" pode estar relacionada a construções anteriores.
 

Eu gostaria de ter um conjunto de tutoriais em vídeo, além dos tutoriais em texto. Tenha um conjunto de tutoriais em vídeo. Falta especialmente uma primeira lição - como fazer o download, instalar o programa e fazer a primeira compra ou comércio com a Shell.

 
Korey:
para SK
O artigo mostra 4 versões de inicialização de um array com uma e a mesma chamada deArrayMinimum();
É mostrado que inicializar uma matriz em um subprograma sem especificar o tamanho da matriz [] leva ao erro "RunTime".
- nas duas primeiras variantes, o erro é citado, em tradução: "ENDEREÇO incorreto do início da matriz".
-segundo duas variantes estão funcionando, mostra-se que especificar uma dimensionalidade de [1000] automaticamente torna a matriz estática.
Conclusões:
1) Os arrays MQL4 nem sempre são estáticos,
2) a definição de a[] estática, ou seja, sem dimensionalidade explícita, não funcionará, mas não haverá mensagem de erro. O erro é exibido em tempo de execução no segundo e subseqüente tick na janela do Expert Advisor.
3) Os erros descritos de estática/dinâmica aparecem se a matriz estiver definida no subfunc, e são pegos somente por aqueles que olham na janela "Expert Advisors",
e somente quando chegar o segundo tique. Por exemplo, o erro não é detectado ao depurar o indicador no fim de semana sem usar o testador de estratégia.
4) A linha do livro "MQL4 arrays are always static" pode estar relacionada a construções anteriores.


Seu raciocínio não é muito claro. Você declara um array sem dimensões (de fato, o programa tem apenas o nome do array, cujos elementos não estão definidos e para os quais não há memória alocada), e tenta, usando a função ArrayMinimum(), encontrar o valor mínimo entre os elementos que não existem. Naturalmente, o erro ocorrerá independentemente de a matriz ser declarada como estática ou não, e você deve tratar o erro de execução como uma indicação de que a propriedade da matriz é estática ou não.

As matrizes na MQL4 são estáticas por definição. Isso significa (a menos, é claro, que haja pelo menos um elemento na matriz) que os elementos da matriz são armazenados desde a última vez que a função (que declarou a matriz) foi encerrada até a próxima vez que ela for chamada, independentemente de o identificador da matriz ter ou não a palavra-chave estática em frente a ela.

 
para SK
O que me importa, há muito tempo temos usado estes truques de alocação de memória.
Eu escrevi não sobre o conteúdo da matriz, mas sobre seu endereçamento, que não há erros de compilação, não há erros de ligação, mas há um ERRO DE IMPRENSA DE ENDEREÇO.
Ou seja, o compilador me permitiu definir um array [] em uma sub-rotina para cultivá-lo mais tarde, - isso é bom (!),
é alocação dinâmica de memória por array.
Entretanto, todos os ponteiros para esta matriz estão ligados como ponteiros diretos (mas não ponteiros para ponteiros),
o que leva a um descompasso entre os endereços estáticos ligados e o endereço da matriz recentemente alocada quando segue a alocação dinâmica de memória.
Ou seja, a referência da matriz (ponteiro) na MQL4 agora é estática, e só funciona corretamente quando a matriz é realmente estática.
O compilador não entende que a matriz será movida no futuro sem o tamanho explícito dentro da sub-rotina.
O programador coloca estático e pensa que tudo está correto, mas se ele não especificar um tamanho explícito - sem matriz estática, e a matriz se tornará dinâmica (sem erros de compilação/carga).
O problema não é tão grande assim, geralmente todos mantêm matrizes em nível global.
Mas é desejável escrever no tutorial não que supostamente todas as matrizes já sejam estáticas, mas que você deve escrever matrizes locais estáticas com um tamanho explícito.
 
Korey:
para SK
O programador coloca estático e pensa que tudo está correto, mas se ele não especificar um tamanho explícito - nenhuma matriz estática, e a matriz na verdade se revelará dinâmica (sem erros de compilação/carga).

Um programador que sabe que todas as matrizes na MQL4 são estáticas não colocará estáticas, simplesmente porque não é necessário.

Mas é desejável escrever no tutorial não que supostamente todas as matrizes já são estáticas, mas que as matrizes locais devem ser especificadas como estáticas com um tamanho explícito.

Talvez você tenha confundido os conceitos. Neste caso, "estático" significa a propriedade de armazenar valores de elementos de matriz no intervalo entre as execuções da função na qual ela é declarada. As arrays sempre preservam seus valores durante este tempo, independentemente do fato de terem estática diante do nome (isto não é verdade para as variáveis locais, no entanto; elas precisam ser declaradas explicitamente como estáticas).

É possível, entretanto, redimensionar uma matriz na primeira dimensão com o ArrayResize().