Erros, bugs, perguntas - página 1733
![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
Referência para arrays é uma muleta em linguagem MQL, não uma referência.
E se [] é um modificador de tipo como *, deve ter a sua própria const! e não uma referência.
O erro é justificado - estes identificadores são listados como ReadOnly na ajuda (não combinados com ChartSetInteger)https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
ajudaria?
Leia-o com muito cuidado. C++ é muito mais difícil de compreender do que o MQL. Não compreendo muito do artigo. E não compreendi de todo como se relaciona com o que está a ser discutido aqui.
No entanto, gostei da funcionalidade,
perfectforwarding
Antes de descrever o que é, vamos voltar à norma anterior e descrever o problema existente. Suponha que temos um modelo de função foo pegando num parâmetro e passando-o para a barra de funções (T& qualquer coisa):
void foo(T& Object)
{
bar(Object);
}
Portanto, está tudo bem. Mas e se quisermos passar, digamos, o número 100 como argumento para uma função?
Não se preocupe, vamos escrevê-lo desta forma:
void foo(const T& Object)
{
bar(Object);//Ooops
}
Mas, neste caso, haverá um erro de compilação porque a barra toma uma referência não constante. Por isso, temos de fornecer 2 barras de funções - constantes e não constantes. E agora imaginemos que não há apenas um parâmetro, mas sim 2, 3 ou 5. Acontece que esta tarefa é muito difícil de ser implementada, pois temos (2^n - 1) funções sobrecarregadas onde n é o número de argumentos da função. Se pensa que tal número de parâmetros é mau estilo e ninguém escreve assim, então olhe para std::bind, std::make_shared, etc.
Agora vamos ver qual a solução que o novo padrão nos oferece:
void foo(T&& Object)
{
bar(std::forward<T>(Object));
}
Usando o código acima, o problema da passagem de parâmetros é completamente resolvido, a isto chama-se passagem perfeita, porque o tipo de argumento é preservado entre as chamadas à função externa foo e a barra de funções interna. Não há mais necessidade de sobrecarregar um monte de funções - os programadores de códigos genéricos podem ser satisfeitos.
Esta solução é possível porque se o parâmetro do modelo for T&, o tipo passado irá salvar-se, e std::forward é necessário porque qualquer tipo nomeado dentro da função foo transforma-se num lvalue e nós precisamos do tipo original - é para isto que serve std::forward - guarda o tipo original do argumento e tira-lhe o seu nome (resultando em T&&&), o que permite que seja passado para a função bar mais tarde exactamente.
1455 - depuração de dados históricos (CTRL+F5) não funciona. Aparece a janela do testador, a visualização não começa.
Leia-o com muito cuidado. C++ é muito mais difícil de compreender do que o MQL. Não compreendo muito do artigo. E não compreendo de todo como se relaciona com o que está a ser discutido aqui.
No entanto, gostei desta funcionalidade,
Encontrei "(2^n - 1) funções sobrecarregadas, onde n é o número de argumentos da função" - isto é um inconveniente no MQL.Trata-se de compreender rvalue / lvalue / prvalue / xvalue / gvalue, ou seja, aquilo de que estava basicamente a falar para várias páginas :) Como vejo, a MQ seguiu as normas C++, tirando daí, na sua opinião, as coisas mais valiosas, sem parar apenas no valor / lvalue.
Eu próprio ainda não estou plenamente consciente destes conceitos, embora os compreenda logicamente :)
A propósito, o gestor de memória no MT5 funciona de forma incompreensível, se o programa utiliza a memória ao máximo. Ainda não o medi em tamanhos pequenos.
Por exemplo, possuo 4 gigs de RAM, 2 núcleos, MT5 v1455 x64 em máquina virtual.
Estou a carregar memória com objectos e no Gestor de Tarefas vejo que são utilizados 1,5 Gbytes de memória por terminal e 1,5 Gbytes por memória virtual.MQL_MEMORY_USED mostra 400 MB de memória utilizável. Antes do início era de cerca de 140 mb para o terminal e 150 mb para a aplicação virtual.
Notei também que assim que a utilização da memória excede os 400 mb, o gestor da memória pode não conseguir libertá-la completamente, embora os objectos sejam de facto apagados. E o comportamento do depurador é imprevisível - eu posso apagar objectos, esperar pela sua remoção completa e depois dessa paragem de depuração (através do botão STOP no depurador), ele pára, o gestor do MT5 não atribuiu memória ao sistema, ou seja, ainda há 1,5 Gb pendurados para o terminal e 1,5 Gb para a memória virtual. МТ5 não completou o processo de depuração, embora o próprio ME mostre que a depuração está concluída. Se a memória do objecto for inferior a 400 mb, tudo está bem, excepto a memória ser libertada.
A memória só é libertada após a remoção da tarefa terminal da lista de tarefas em execução.
Não o faz. Além disso, não há detalhes técnicos nem uma descrição das suas acções. Trata-se de um ramo especializado onde é necessário preparar e fornecer informações adicionais antes de escrever sobre um insecto que alegadamente encontrou.
Os programadores do Service Desk já memorizaram várias vezes a minha configuração.
Aceito qualquer Expert Advisor padrão e carrego em CTRL+F5 no MetaEditor. A janela principal do Testador de Estratégia surgirá com as configurações especificadas no MetaEditor. Mas a visualização não começa.
O tronco
Os programadores do Service Desk já se lembraram várias vezes da minha configuração.
Nem sequer se apercebeu do que eu estava a falar.
O que fez antes de começar a depurar a história? Configurou o MetaEditor (separador "Ferramentas" - "Definições" - "Depuração")? Dê uma imagem do MetaEditora (separador "Ferramentas" - "Definições" - "Depuração"), o que está escrito no Testador no separador "Registo"? O que está escrito no Viewer no separador "Log"?
Os programadores do Service Desk já memorizaram várias vezes a minha configuração.
Aceito qualquer Expert Advisor padrão e carrego em CTRL+F5 no MetaEditor. A janela principal do Testador de Estratégia surgirá com as configurações especificadas no MetaEditor. A visualização não se inicia.