Errori, bug, domande - pagina 1962

 
Andrey Khatimlianskii:

In che modo questo aiuta?

L'ottimizzazione è passata, abbiamo scritto tutti i parametri da ricercare con intervalli di valori.

E poi eseguiamo un singolo test, leggiamo l'elenco dei parametri e lo visualizziamo: parametro = valore. In questo caso non conosciamo il valore, perché non possiamo riferirci all'intu-variabile per nome.

Si rende il parametro di input bool Optim. In OnInit, restituite INIT_FAILED se Optim == true. Allo stesso tempo in OnTesterPass attraverso FrameInputs e ParameterGetRange (o nel distruttore dell'oggetto classe globale) si scrive l'attuale SET di ottimizzazione.

Poi metti Optim = false. E prendete un altro parametro sinput int Range, impostatelo attraverso ParameterSetRange per passare da zero a uno. Leggere il file SET in OnTesterInit e impostare i valori di tutti i parametri dal file in ParameterSetRange. Quando Range == 0 si restituisce INIT_FAILED in OnInit.

Questo è tutto! Invece dell'ottimizzazione singola avete l'ottimizzazione immaginaria, che è anche più veloce dell'ottimizzazione singola.... Più i parametri di ingresso in lettura/scrittura.

 

domanda off-topic ma vi chiederò se è possibile integrare il manuale MQL5 con ulteriori esempi di implementazione dell'algoritmo più e più chiaro

 
fxsaber:

Rendere il parametro di input bool Optim. In OnInit si restituisce INIT_FAILED se Optim == true. Allo stesso tempo in OnTesterPass attraverso FrameInputs e ParameterGetRange (o nel distruttore dell'oggetto classe globale) si scrive effettivamente SET-file Optimization.

Poi metti Optim = false. E prendete un altro parametro sinput int Range, impostatelo attraverso ParameterSetRange per passare da zero a uno. Leggere il file SET in OnTesterInit e impostare i valori di tutti i parametri dal file in ParameterSetRange. Quando Range == 0 si restituisce INIT_FAILED in OnInit.

Questo è tutto! Invece dell'ottimizzazione singola avete l'ottimizzazione immaginaria, che è anche più veloce dell'ottimizzazione singola.... Più i parametri di ingresso in lettura/scrittura.

Grazie per l'algoritmo dettagliato.

 
Tempo di compilazione in 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 di compilazione a 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

Qualcosa è stato modificato!

 

Errore di compilazione

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 sostituite la linea (*) con

                int  f() { return 0; } //(*)
allora va bene. Qual è la differenza?

Assomiglia ahttps://www.mql5.com/ru/forum/1111/page1977#comment_5595772, ma ha un codice di errore diverso


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

Errore durante la compilazione

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

Altrimenti:


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

Va bene. Che differenza fa?
 
A100:

Errore durante la compilazione

ma in questo modo:

normalmente. Qual è la differenza?

La differenza è enorme. Quando viene chiamato g(f), il compilatore non ha idea di che tipo sia f, perché è prescritto solo il template. Se si sovraccarica il modello, non ci sono problemi

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 di compilazione a 1643.

Tempo di compilazione a 1648


Questo è un tweak figo!

Il mio è lo stesso di prima, la compilazione non è più veloce!

 
Vitaly Muzichenko:

Ce l'ho ancora, la compilazione non è accelerata

Forse non usando quello che rallentava in TesterBenchmark.mqh

 
fxsaber:

La differenza è enorme. Quando g(f) viene chiamato, il compilatore non ha idea di che tipo sia f, perché solo il template è prescritto. Se si sovraccarica il modello, non ci sono problemi

Se c'è un'enorme differenza, allora perché C++ compila bene con entrambe le varianti?