Erros, bugs, perguntas - página 1733

 
Комбинатор:

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.

Só posso escrever algo em MQL.
 
A100:
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
Já o descobrimos, mas obrigado de qualquer forma :)
 
coderex:
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):

template <typename T>
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:

template <typename T>
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:

template <typename T>
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.

"(2^n - 1) funções sobrecarregadas, onde n é o número de argumentos da função" - enfrentei tais inconvenientes no MQL.
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
O que é isso?
 
1455 - depuração de dados históricos (CTRL+F5) não funciona. Aparece a janela do testador, a visualização não começa.
 
fxsaber:
1455 - depuração de dados históricos (CTRL+F5) não funciona. Aparece a janela do testador, a visualização não começa.
Não é verdade. Além disso, não há detalhes técnicos nem uma descrição das suas acções. Este é um ramo especializado onde tem de se preparar e fornecer informações adicionais antes de escrever sobre um insecto alegadamente encontrado.
 
fxsaber:

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.

 
Karputov Vladimir:
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

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
 
fxsaber:
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"?

 
fxsaber:

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.

A amostra MACD será lançada normalmente. Talvez algo esteja errado com as configurações?
Razão: