L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 680

 

Sul tema di come trasferire i neuroni da R a mql:

L'ho fatto con il pacchetto nnet. Vedihttps://cran.r-project.org/web/packages/nnet/index.html(sorgente del pacchetto: nnet_7.3-12.tar.gz). C'è la cartella src / nnet.c nell'archivio.

Abbiamo bisogno della funzione fpass, le prime linee prima di thisError = 0.0 (questo è l'inizio del calcolo dell'errore per il backprop, non c'è bisogno della semplice predizione)


Questo è il codice che possiamo usare nel nostro EA -

   double sigmoid(double sum)
     {
      if(sum<-15.0)
         return (0.0);
      else if(sum>15.0)
         return (1.0);
      else
         return (1.0 / (1.0 + exp(-sum)));
     }

//nnet_hidden - число нейронов в скрытом слое
//выход один
//nnet_weights - массив с весами нейронки взятыми из R после обучения nnet модели

int weights_it=0;
double hiddenLayer[];
ArrayResize(hiddenLayer,nnet_hidden);
for(int i=0; i<nnet_hidden; i++)
 {
  hiddenLayer[i]=nnet_weights[weights_it++];
  for(int j=1; j<=nnet_bars; j++)
    {
     hiddenLayer[i]+=openPrices[j]*nnet_weights[weights_it++];
    }
  hiddenLayer[i]=sigmoid(hiddenLayer[i]);
 }
double prediction=nnet_weights[weights_it++];
for(int i=0; i<nnet_hidden; i++)
 {
  prediction+=hiddenLayer[i]*nnet_weights[weights_it++];
 }
if(!linout)
 {
  prediction = sigmoid(prediction);
 }

questo codice funzionerà solo con il parametro del modello skip = FALSE
Se non è così, o viene usato un softmax - cercate le differenze nella funzione fpass()


i pesi (array nnet_weights) dovrebbero essere copiati da R stesso dopo l'allenamento

library(nnet)
trainedModel <- nnet(y = 1:10, x = matrix(runif(20),ncol=2), size=10)
nnet_weights <- trainedModel$wts
cat("double nnet_weights[] = {", paste(format(weights,digits=16,scientific=T), collapse=","), "};", file="D:/weights.txt") #сохранить  веса в файлик чтоб оттуда скопипастить в советник
 
О! Questo è qualcosa. Un po' più di lavoro e si può usare. Grazie!
 

Un altro piccolo articolo introduttivo sul rinforzo, mentre il punto è

Sarebbe interessante organizzare una piccola sessione di lavoro di gruppo e di brainstorming su mql e condividere l'esperienza.

https://proglib.io/p/trade-learning/

Трейдинг и машинное обучение с подкреплением
Трейдинг и машинное обучение с подкреплением
  • 2018.02.15
  • matyushkin
  • proglib.io
В статье рассмотрено, как машинное обучение с подкреплением может применяться для трейдинга финансовых рынков и криптовалютных бирж. Академическое сообщество Deep Learning в основном находится в стороне от финансовых рынков. В силу ли того, что у финансовой индустрии не лучшая репутация, что решаемые проблемы не кажутся слишком интересными для...
 

A mio parere, l'apprendimento per rinforzo di solito dà un modello con una sporgenza molto grande, e la convalida incrociata non è la risposta in questo caso. Ci deve essere qualche meccanismo speciale all'interno del modello stesso contro l'overfitting.

Per coloro che non hanno familiarità con questo argomento, brevemente: invece della solita valutazione del modello (accuratezza, r2, logloss, ecc.), viene creata una speciale funzione di fitness con una propria logica di valutazione del modello. Tale funzione di fitness può per esempio calcolare il profitto di un modello durante il trading, o la sharperatio. E i parametri del modello sono selezionati da un algoritmo genetico.

È interessante che l'ottimizzatore in MT4 e MT5 funziona anche sul principio dell'apprendimento con rinforzo - ad ogni barra (o anche tick) l'Expert Advisor riceve i valori attuali del prezzo e degli indicatori, prende alcune decisioni, e la stima finale dell'EA viene calcolata come risultato del trade. I parametri dell'Expert Advisor sono selezionati dalla genetica per aumentare la stima.
A giudicare dagli Expert Advisors disponibili gratuitamente per MT5, possiamo vedere chiaramente che questo metodo di apprendimento causa molte "perdite". Ma a volte anche i buoni EA sono buoni.

 
Ildottor Trader:

A mio parere, l'apprendimento per rinforzo di solito dà un modello con una sporgenza molto grande, e la convalida incrociata non salverà in questo caso. Ci deve essere qualche meccanismo speciale all'interno del modello stesso contro l'overfitting.

Per coloro che non hanno familiarità con questo argomento, brevemente: invece della solita valutazione del modello (accuratezza, r2, logloss, ecc.), viene creata una speciale funzione di fitness con una propria logica di valutazione del modello. Tale funzione di fitness può per esempio calcolare il profitto di un modello durante il trading, o la sharperatio. E i parametri del modello sono selezionati da un algoritmo genetico.

La cosa interessante è che l'ottimizzatore in MT4 e MT5 funziona anche sul principio di apprendimento con rinforzo - ad ogni barra (o anche tick) l'Expert Advisor riceve i valori attuali dei prezzi e degli indicatori, prende alcune decisioni, e la stima finale dell'Expert Advisor è il risultato del trading. I parametri dell'Expert Advisor sono selezionati dalla genetica per aumentare la stima.
A giudicare dagli Expert Advisors disponibili gratuitamente per MT5, possiamo vedere chiaramente che questo metodo di apprendimento causa molte "perdite". Ma a volte i buoni EA sono anche buoni.

È una buona analogia con l'ottimizzatore, il mio precedente bot era su questo ma è troppo semplice

Ma in generale non lo è, RL se non si oppone alla genetica, ne sottolinea i vantaggi, per esempio la possibilità di lavorare su processi non stazionari. In particolare è possibile utilizzare funzioni di fitness non grezze, grazie alle quali il modello impara costantemente mentre corre e fa passi casuali. E come ottimizzatore usiamo il ripieno NS (non la genetica).

Lì è un po' più complicato, ma non ho ancora finito di leggere il libro.

Quindi la tua affermazione su genetica, ottimizzatore e RL non è corretta.

 

*un momento di emozione e filosofia e tutta quella roba*

Immaginate una giornata limpida e soleggiata. Sei seduto sull'erba accanto a uno stagno, una calda brezza primaverile soffia, lasciando increspature nell'acqua, il suono delle anatre si sente da qualche parte nelle vicinanze. I pesci nuotavano sott'acqua, a volte toccando la superficie con le pinne e facendo dei cerchi nell'acqua. Il suo vicino stava raccogliendo l'acqua e suo nipote lanciava pietre nell'acqua, inseguendo le rane da una parte all'altra. Dall'altra parte dello stagno, un uomo lava la sua auto.

Il prezzo è come le onde sull'acqua per tutto il trambusto ma anche durante una tempesta. Possiamo seguire le onde e cercare di indovinare quando l'acqua salirà o scenderà in un determinato punto, ma se non seguiamo l'ambiente, ci sbaglieremo la maggior parte delle volte.

Il valore del prezzo futuro non dipende dai movimenti di prezzo passati, ma dai processi globali che hanno causato i movimenti di prezzo passati e ne causeranno di nuovi.
È necessario monitorare non solo le onde sull'acqua, ma anche il vento, la traiettoria dei pesci, il secchio del vicino, ecc.

Di conseguenza, se si hanno informazioni su tutti i processi globali che influenzano il prezzo, si può imparare a prevedere e qualsiasi modello semplice del secolo precedente andrà bene.
Il problema è che di solito c'è solo un grafico dei prezzi e non è sufficiente.

 

Qui come collegare RL e NN

 

e un vid, c'è una parte 2 in più.

Questo è tutto, non sto più spammando, chi è interessato può leggerlo.


 
Le reti neurali in MT sono semplici. C'è una libreria di Microsoft chiamata CNTK. È implementato per Python, C# e C++. Tutta l'analisi e l'addestramento della rete è fatta in Python, mentre il C++ è usato per scrivere una DLL che carica la rete addestrata ed esegue i calcoli con essa. Secondo me questa è l'opzione migliore. La seconda opzione, il collegamento di Python a MT. Ho scritto una semplice libreria per questo. Biblioteca. Lo colleghiamo e possiamo usare tutto ciò che è disponibile in Python. E c'è un sacco di roba disponibile. Mi sto chiedendo se dovrei iniziare a scrivere di apprendimento automatico sul mio blog.
 
Grigoriy Chaunin:
Tutto è semplice con le reti neurali in MT. C'è una libreria CNTK di Microsoft. È implementato per Python, C# e C++. Tutta l'analisi e l'addestramento della rete è fatta in Python, mentre il C++ è usato per scrivere una DLL che carica la rete addestrata ed esegue i calcoli usando la rete. Secondo me questa è l'opzione migliore. La seconda opzione, il collegamento di Python a MT. Ho scritto una semplice libreria per questo. Biblioteca. Lo colleghiamo e possiamo usare tutto ciò che è disponibile in Python. E c'è un sacco di roba disponibile. Mi sto chiedendo se dovrei iniziare a scrivere di apprendimento automatico sul mio blog.

sarebbe interessante leggere delle strategie e dei pensieri/esperienze personali... per me personalmente

perché la maggior parte delle cose che scrivono qui sono solo stronzate sull'attraversare un mucchio di biblioteche e su cosa sia meglio scrivere... è un'epidemia, e tutto va sprecato.

Anche se l'idea di base è stata espressa da fxsaber molto tempo fa - con lo stesso approccio l'argomento potrebbe anche essere chiuso, perché è originariamente sbagliato