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

 
elibrario:

Mancato)

Un altro punto, se prendi per esempio non 0, e per esempio 0,5 - anche con il tuo metodo "galleggerà" da un campione all'altro.

Solo l'impostazione manuale della gamma per ogni ingresso può aiutare. Ma non è chiaro come determinarlo. Per esempio, si possono analizzare i dati per un anno e scartare l'1-5% dei valori anomali. E lavorare con loro durante l'anno. Anche se tra un anno cambieranno.


Sì, dovete prendere prima il massimo campione disponibile e trovare il moltiplicatore (l'ho chiamato moltiplicatore per qualche motivo :)

E se un nuovo campione ha improvvisamente un valore più alto... beh, dovrete dividere per esso. Ma questo accade raramente se prendiamo incrementi con un piccolo ritardo, per esempio close[0]/close[10]... e con close[0]/close[100] può già essere più frequente... ma penso che ci sia già un'eccezione, soprattutto se riqualifichiamo periodicamente NS

Non ho tempo per pensare allo 0,5. :)

 

Solo i predittori che hanno una RELAZIONE con la variabile obiettivo dovrebbero essere usati. Che sia "linearmente" o "non linearmente" è irrilevante, irrilevante per il "hanno una relazione" formulato in modo molto preciso.

Per chiarire di nuovo il significato di "avere una relazione", farò un esempio che ho dato diverse volte in questo thread.


Target: la popolazione, ha due classi: uomini e donne

Prendendo un fattore predittivo: l'abbigliamento. Ha due valori: pantaloni e gonne.

Con tali classi e tale predittore, una parte del predittore predirà una classe e l'altra parte predirà l'altra secondo il principio "pantaloni-uomini", "gonne-donne". Idealmente, si può costruire una classificazione senza errori.

Se applichiamo questo sistema agli scozzesi, ci sarà una sovrapposizione nelle "gonne" indossate da entrambi i sessi. Questa sovrapposizione darà un limite superiore all' errore, che non può essere superato.


È obbligatorio testare il modello su due file temporali diversi: prima del 1° gennaio e dopo il 1° gennaio.

Sul primo file: insegnamento, test e "fuori campione". Se tutti e tre i valori di errore sono approssimativamente uguali, allora eseguite il secondo file - l'errore non dovrebbe differire significativamente (non più del 10%) dai primi tre.

QUESTO MODELLO NON VIENE RIQUALIFICATO.


PS.

Se si includono predittori che non sono rilevanti per l'obiettivo, "fondi di caffè", l'errore può essere drasticamente ridotto. Io, per esempio, non considero i modelli in cui l'errore è inferiore al 10%. Ma è sempre lo stesso: l'errore sul secondo file è un multiplo dell'errore sul primo file. Il modello è REBUILD, ha preso alcuni valori dal rumore, cercando di ridurre l'errore di classificazione, e in futuro tali valori molto probabilmente non esisteranno, o lo faranno, o in tempi.... Questo modello non ha potere predittivo.

 
SanSan Fomenko:

Sul primo file: imparare, testare e "fuori campione". Se tutti e tre i valori di errore sono circa uguali, allora eseguite il secondo file - l'errore non dovrebbe differire molto (non più del 10%) dai primi tre.

Qual è la differenza tra

1) una sezione "fuori campione" del primo file + un altro file "fuori campione

2) e uno "fuori campione" ma una sezione più grande che include il secondo file?

Mi sembra che il risultato sarà lo stesso. Se nella prima variante tutto va male nel secondo file, gli stessi dati rovineranno tutto nella seconda variante.

 

Ci sono generalmente tre sezioni nella formazione NS. Una sezione Formazione, una sezione Test e una sezione Controllo. Se nella sezione di test l'errore è entro i limiti normali, allora consideriamo che il modello non è riqualificato. IMHO.

 
Mihail Marchukajtes:

Beh, come regola generale, ci sono tre sezioni nella formazione NS. Una sezione Formazione, una sezione Test e una sezione Controllo. Se nella sezione di test l'errore è entro i limiti normali, allora consideriamo che il modello non è riqualificato. IMHO.

Sono d'accordo, ma perché SanSanych sta introducendo una quarta sezione (quella del secondo ufficio) non è chiaro. È possibile, dopo tutto, estendere uno per includere entrambi.
 
elibrario:

Qual è la differenza tra

1) una sezione "fuori campione" del primo file + un altro file "fuori campione

2) e una sezione "fuori campione" ma più grande che include il secondo file?

Mi sembra che i risultati saranno gli stessi. Se le cose vanno male sul primo nel secondo file, allora gli stessi dati incasineranno anche il secondo file.


Il primo file è diviso in tre parti a caso, cioè i pezzi dei campioni di allenamento, di test e di controllo sono mescolati per data. Questo non succede nel trading reale.

Ma il secondo è un commercio d'imitazione: si commercia sempre DOPO la sezione di formazione. Contrariamente alla tua opinione, molto spesso i risultati sul secondo file sono molto diversi dai risultati sul primo - il modello è sovrallenato e inadatto all'uso.

 
Grigoriy Chaunin:

https://github.com/RandomKori/Py36MT5 Ecco i sorgenti della libreria Python per MT5. L'unico problema è con gli array. Passare un array o riceverlo non funziona correttamente. Ho eseguito il debug del codice DLL in Visual Studio. Lì tutto funziona. La questione è che potrebbe essere un bug terminale. Non ho scritto come lavorare con la libreria. Non ha senso. Nessuno ne ha bisogno senza gli array. Anche se forse si è incasinato nel file pythom.mqh Aiutami a capirlo. Tutto sarà utile.

Buona idea e utile libreria MT5, ma è piuttosto fastidioso sincronizzarla con un file di script python.

Penso che sia meglio sincronizzare le variabili MQL direttamente con le variabili python attraverso un dizionario locale ed eseguire frammenti di codice Python direttamente dalle costanti di stringa nel codice di EA.

Ho provato il test, compilando bcc64 da linea di comando e funziona bene in python 3.6:

#include <stdio.h>
#include "python.h"
#pragma link "python36.lib"

int main(int argc, char **argv)
{
  Py_Initialize();
  PyObject* main = PyImport_AddModule("__main__");
  PyObject* global = PyModule_GetDict(main);
  PyObject* local = PyDict_New();

  int a, b = 2, c = 2; // synchronize python variables and calc a = b * c
  PyDict_SetItemString(local, "b", PyLong_FromLong(b));
  PyDict_SetItemString(local, "c", PyLong_FromLong(c));
  a = PyLong_AsLong(PyRun_String("b * c", Py_eval_input, global, local));
  printf("%d*%d=%d\n",b,c,a);

  PyRun_SimpleString("import sys"); // import python sys and read version
  printf(_PyUnicode_AsString(PyRun_String("sys.version", Py_eval_input, global, local)));

  Py_Finalize();
  return 0;
}

Sarebbe bello aggiungere questa funzionalità alla tua libreria, stavo per scrivere la mia, ma purtroppo per ora sono impegnato con la libreria P-net per python.

A proposito, ho scritto di questa nuova rete neurale qui in un ramo, secondo i risultati preliminari dei test su esempi con Iris di Fisher, è addestrata tre ordini di grandezza più veloce della DNN in TensorFlow, con risultati di test uguali.

 
SanSanych Fomenko:

Il primo file è diviso in tre parti in modo casuale, cioè i pezzi di campioni di allenamento, test e controllo sono mescolati per data. Questo non succede nel trading reale.

Ma il secondo è un commercio d'imitazione: si commercia sempre DOPO la sezione di formazione. Contrariamente alla tua opinione, molto spesso i risultati sul secondo file sono molto diversi da quelli del primo - il modello è troppo addestrato e non adatto allo scopo.

Metto sempre le prime 3 parti in sequenza. E se il 3° è cattivo, il modello è sovrallenato.
 

Tieni presente che qualsiasi backup dei dati ritarderà l'entrata in combattimento del modello. Questo influisce direttamente sulla qualità dei segnali ricevuti dopo....

Personalmente ho scelto la seguente metodologia. Ho invertito il modello ottenuto utilizzando i segnali di acquisto e l'ho testato sulla stessa parte del mercato ma per i segnali di vendita. Così, non perdo tempo prezioso e stimo adeguatamente le capacità del modello. IMHO

 
SanSanych Fomenko:

Il primo file è diviso in tre parti in modo casuale, cioè i pezzi di campioni di allenamento, test e controllo sono mescolati per data. Questo non succede nel trading reale.

Ma il secondo è un commercio d'imitazione: si commercia sempre DOPO la sezione di formazione. Contrariamente alla tua opinione, molto spesso i risultati sul secondo file sono molto diversi dai risultati sul primo - il modello è sovra-addestrato e non è adatto allo scopo.


Per i sistemi di previsione, l'ordine in cui i dati arrivano è importante. Per la classificazione, NO.