Erros, bugs, perguntas - página 1962

 
Andrey Khatimlianskii:

Como é que isto ajuda?

A optimização passou, anotámos todos os parâmetros a serem pesquisados com intervalos de valores.

E depois executamos um único teste, lemos a lista de parâmetros, e exibimo-la: parâmetro = valor. Neste caso, não sabemos o valor, porque não podemos referir-nos à variável de entrada pelo nome.

Faz o parâmetro de entrada bool Optim. No OnInit, devolve-se INIT_FAILED se Optim == verdadeiro. Ao mesmo tempo, no OnTesterPass através de FrameInputs e ParameterGetRange (ou no destruidor do objecto de classe global) escreve-se o verdadeiro SET de Optimização.

Depois, coloca-se Optim = falso. E pegue em mais um parâmetro sinput int Range, defina-o através do ParameterSetRange para mudar de zero para um. Ler o ficheiro SET no OnTesterInit e definir os valores de todos os parâmetros do ficheiro no ParameterSetRange. Quando o intervalo == 0 devolve-se INIT_FAILED no OnInit.

E é tudo! Em vez de uma Optimização única, tem uma Optimização imaginária, que também é mais rápida que uma Optimização.... Mais parâmetros de entrada de leitura/escrita.

 

pergunta fora de tópico mas perguntar-lhe-ei se é possível complementar o manual MQL5 com exemplos adicionais de implementação de algoritmos mais e mais claros

 
fxsaber:

Fazer o parâmetro de entrada bool Optim. No OnInit devolve-se INIT_FAILED se Optim == verdadeiro. Ao mesmo tempo, no OnTesterPass através de FrameInputs e ParameterGetRange (ou no destruidor do objecto de classe global) escreve de facto SET-file Optimization.

Depois, coloca-se Optim = falso. E pegue em mais um parâmetro sinput int Range, defina-o através do ParameterSetRange para mudar de zero para um. Ler o ficheiro SET no OnTesterInit e definir os valores de todos os parâmetros do ficheiro no ParameterSetRange. Quando o intervalo == 0 devolve-se INIT_FAILED no OnInit.

E é tudo! Em vez de uma Optimização única, tem uma Optimização imaginária, que também é mais rápida que uma Optimização.... Mais parâmetros de entrada de leitura/escrita.

Obrigado pelo algoritmo detalhado.

 
Tempo de compilação em 1643
'TesterBenchmark_Example.mq5'   TesterBenchmark_Example.mq5     1       1
'TesterBenchmark.mqh'   TesterBenchmark.mqh     1       1
0 error(s), 0 warning(s), compile time: 3113 msec               1       1

Tempo de compilação em 1648

'TesterBenchmark_Example.mq5'   TesterBenchmark_Example.mq5     1       1
'TesterBenchmark.mqh'   TesterBenchmark.mqh     1       1
0 error(s), 0 warning(s), compile time: 219 msec                1       1

Alguma coisa foi afinada!

 

Erro de compilação

typedef void (*fn)( int );
struct A {
                void f() { return   ; } //(*)
        static  void f( int ) {}
};
void g( fn ) {}
void OnStart()
{
        g( A::f ); //error: 'f' - cannot resolve function address
}

E se substituir a linha (*) por

                int  f() { return 0; } //(*)
então está bem. Qual é a diferença?

Parece serhttps://www.mql5.com/ru/forum/1111/page1977#comment_5595772, mas tem um código de erro diferente


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.11
  • www.mql5.com
Форум алго-трейдеров MQL5
 

Erro durante a compilação

template<typename T>
void g( T ) {}
void f() {}
void OnStart()
{
        g( f ); //error: 'g' - cannot to apply function template
}

Caso contrário:


template<typename T>
void g( T ) {}
void f() {}
typedef void (*fn)();
void OnStart()
{
        fn ff = f;
        g( ff ); //нормально
}

Está bem. Que diferença é que isso faz?
 
A100:

Erro durante a compilação

mas desta forma:

normalmente. Qual é a diferença?

A diferença é enorme. Quando g(f) é chamado, o compilador não tem ideia do tipo f, porque apenas o modelo é prescrito. Se sobrecarregar o modelo, não há problema

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
        g( f ); // void(*fn)()
}
 
fxsaber:
Tempo de compilação em 1643.

Tempo de compilação em 1648


Isso é um ajuste fixe!

O meu é o mesmo que era, a compilação não é mais rápida!

 
Vitaly Muzichenko:

Ainda o tenho, a compilação não é acelerada

Talvez não utilizando o que costumava abrandar no TesterBenchmark.mqh

 
fxsaber:

A diferença é enorme. Quando g(f) é chamado, o compilador não tem ideia do tipo f, porque apenas o modelo é prescrito. Se sobrecarregar o modelo, não há problema

Se existe uma enorme diferença, então porque é que o C+++ compila bem com ambas as variantes?