Versão beta do livro online sobre programação MQL4 - por Sergey Kovalev (SK.) - página 10
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
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.
}
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.
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.
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.
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.
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.
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.
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().