Campionato di ottimizzazione degli algoritmi. - pagina 5

 
Andrey Dik:

Un semplice esempio. L'algoritmo di ottimizzazione è appeso a un grafico da qualche parte. L'Expert Advisor è ottimizzato nel tester integrato da una ricerca completa. Quindi puoi usare il tuo algoritmo di ottimizzazione invece di quello regolare.

Un altro esempio. L'Expert Advisor lavora nel grafico e fa trading. Salva i risultati del trade dopo un certo tempo nell'algoritmo (può essere all'interno o all'esterno dell'Expert Advisor) insieme ai suoi parametri e riceve indietro i nuovi parametri e poi continua il trading (nel tuo caso avremmo bisogno di eseguire un run storico, mentre nel mio caso possiamo usare l'ottimizzazione "live").

E così via. Cioè, in questi esempi l'algoritmo è completamente indipendente dal compito.

Ho deliberatamente applicato questi esempi al trading. Siamo commercianti.

Qualcosa fuori dall'ordinario.

L'Expert Advisor è già stato ottimizzato nel tester, quindi cosa c'entra questo con il tuo algoritmo di ottimizzazione?

Il secondo caso è un po' più chiaro. Sì, se si forniscono singole chiamate indipendenti, è possibile chiamarle una per una. E si può fare tutto in una volta con un processo separato. Capisco, ma questo complica l'algoritmo e non ci permette di concentrarci sullo scopo del campionato. Lo scopo del campionato è l'algoritmo di ottimizzazione, non la sua applicazione. Ci sono molte persone che non lo capiscono, e ora sta diventando ancora più complicato.

 
Andrey Dik:

in generale, come questo, e naturalmente ci sarà un contatore di tempo. schema:

In questo codice, non è una chiamata una tantum, ma la parte principale dell'algoritmo è messa là fuori, con un po' di imposizione di una parte dell'algoritmo al partecipante. Secondo le condizioni iniziali, il partecipante ha il diritto di nascondere l'intero algoritmo.
 
Dmitry Fedoseev:

1. Qualcosa fuori dall'ordinario. L'ottimizzazione dell'Expert Advisor è già stata eseguita nel tester, e cosa ha a che fare con il suo algoritmo di ottimizzazione?

2. Il secondo caso è un po' più chiaro. Sì, se si forniscono singole chiamate indipendenti, è possibile chiamarle una per una. E si può fare tutto in una volta con un processo separato. Capisco, ma questa è una complicazione dell'algoritmo e un allontanamento dallo scopo del campionato. Lo scopo del campionato è l'algoritmo di ottimizzazione, non la sua applicazione. Ci sono molte persone che non l'hanno capito, e ora sta diventando più complicato.

1. Niente di straordinario, è solo una situazione di vita reale. Un tester interno fa una corsa dopo l'altra (un parametro - contatore viene rilevato) e noi controlliamo l'ottimizzazione di tutti i parametri e in quantità illimitata.

2. Abbiamo deciso di utilizzare 2 varianti di lavoro con FF. Quindi tutto va bene, non c'è nessun problema, chi vuole, così userà l'ottimizzazione.

I partecipanti sono liberi di scegliere con quale script di prova lavorare, il primo o il secondo.

 
Dmitry Fedoseev:
In questo codice, non è una chiamata una tantum, ma la parte principale dell'algoritmo è spostata all'esterno, con qualche imposizione di parte dell'algoritmo sul partecipante. Nelle condizioni originali, il partecipante ha il diritto di nascondere l'intero algoritmo.

Dov'è l'imposizione? Chiedi all'algoritmo quante volte e cosa contare, l'algoritmo del partecipante decide queste cose. Gli algoritmi possono essere molto diversi nell'architettura dello stesso GA, e l'esempio permette di utilizzare un'algo su qualsiasi principio di funzionamento.

Ho mostrato le funzioni di servizio lì - possono essere vuote se non servono al partecipante.

 
Andrey Dik:

Dov'è l'imposizione? Chiedi all'algoritmo quante volte e cosa contare, l'algoritmo del partecipante decide queste cose. Gli algoritmi possono essere molto diversi nell'architettura dello stesso GA, e l'esempio permette di utilizzare un'algo su qualsiasi principio di funzionamento.

Ho mostrato le funzioni di servizio lì - possono essere vuote se non servono al partecipante.

Basta dare ai partecipanti un puntatore a una funzione o a un oggetto con un metodo. Questo è il terzo millennio.
 
Passate anche il numero ammissibile di chiamate ff alla funzione partecipante, in modo che il numero di epoche e il numero di individui possano essere assegnati.
 
Dmitry Fedoseev:
Inoltre, passate nella funzione partecipante il numero consentito di chiamate FF, in modo da poter distribuire il numero di epoche e il numero di individui.

Per esempio, si dice all'algoritmo che si può avere un massimo di 100 chiamate FF... Aha! - ha pensato (l'algoritmo), imbroglierò tutti e chiamerò lamusica per 50 note, chiamerò il FF solo 50 volte. :)

No, lascia che ne conti quanti ne ha bisogno. E decideremo quando fermarlo. Dopo tutto, il numero di chiamate FF sarà valutato come un indicatore della qualità del lavoro.

 
Andrey Dik:

Per esempio, si dice all'algoritmo che si può avere un massimo di 100 chiamate FF... Aha! - ha pensato (l'algoritmo), imbroglierò tutti e chiamerò lamusica per 50 note, chiamerò il FF solo 50 volte. :)

No, lascia che ne conti quanti ne ha bisogno. E decideremo quando fermarlo. Dopo tutto, il numero di volte che il FF viene chiamato sarà giudicato come una misura della performance.

Che senso ha chiamarlo furbescamente meno volte? Si può fare meno, non si può fare di più. Qual è il problema?

La funzione FF conta le chiamate. Se più di quanto consentito, squalifica.

 

Questo è più o meno il modello della biblioteca di un membro:

#property library
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

здесь участник пишет свои классы, если надо 

void function(CFF * aff,int n,double & params[],double & value) export{

    Здесь участник пишет свой код и вызывает функцию так - aff.value(x); // x - это массив double

//по окончанию поиска вернуть params (параметры соответствующие лучшему результату), value (лучший результат)

}

здесь участник создает свои вспомогательные функции
 
Dmitry Fedoseev:

Che senso ha essere così astuti e chiamare meno volte? Si può fare meno, non si può fare di più. Qual è il problema?

La funzione ff conta le chiamate. Se è permesso di più, squalifica.

Meno corse di ff è meglio, questo è il punto. Questo può essere un po' complicato.

Non c'è bisogno di limitare l'algoritmo, lasciatelo contare. O deciderà di fermarsi da solo, o sarà fermato con la forza. L'algoritmo non ha bisogno di sapere quante corse è il tetto massimo - nessuno saprà il tetto massimo. Non ci saranno squalifiche. L'algoritmo risolverà il problema come è stato in grado di fare.

L'unica squalifica è il tentativo di salvare i risultati e usarli in esecuzioni successive dello script di controllo.

Motivazione: