L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 553

 
elibrarius:

Manqué)

Un autre point, si vous prenez par exemple non pas 0, mais par exemple 0,5 - même avec votre méthode, il "flottera" d'un échantillon à l'autre.

Seul le réglage manuel de la plage pour chaque entrée est utile. Mais la manière de le déterminer n'est pas claire. Peut-être, par exemple, pour exploiter les données pendant un an et rejeter 1-5% des valeurs aberrantes. Et travaillez avec eux pendant l'année. Bien que dans un an, ils changeront.


Oui, vous devez d'abord prendre l'échantillon maximum disponible et trouver le multiplicateur (je l'ai appelé multiplicateur pour une raison quelconque :)

Et si un nouvel échantillon a soudainement une valeur plus élevée... eh bien, vous devrez le diviser. Mais cela se produit rarement si nous prenons des incréments avec un petit décalage, par exemple close[0]/close[10]... et avec close[0]/close[100] cela peut déjà être plus fréquent... mais je pense qu'il y a déjà une exception, surtout si nous réapprenons périodiquement NS

Je n'ai pas le temps de penser à 0,5. :)

 

Seuls les prédicteurs qui ont une RELATION avec la variable cible doivent être utilisés. Que ce soit "linéairement" ou "non linéairement" n'est pas pertinent, et n'a rien à voir avec la formulation très précise "avoir une relation".

Pour clarifier à nouveau le sens de "avoir une relation", je vais donner un exemple que j'ai donné plusieurs fois dans ce fil.


Cible : la population, a deux classes : les hommes et les femmes.

En prenant un prédicteur : les vêtements. Il a deux valeurs : le pantalon et la jupe.

Avec de telles classes et un tel prédicteur, une partie du prédicteur va prédire une classe et l'autre partie va prédire l'autre selon le principe "pantalon-homme", "jupe-femme". Idéalement, une classification sans erreur peut être construite.

Si nous appliquons ce système aux Écossais, il y aura un chevauchement des "jupes" portées par les deux sexes. Ce chevauchement donnera une limite supérieure à l' erreur, qui ne peut être dépassée.


Il est obligatoire de tester le modèle sur deux fichiers temporels différents : avant le 1er janvier et après le 1er janvier.

Sur le premier fichier : teach, test et "out-of-sample". Si les trois valeurs d'erreur sont à peu près égales, exécutez le deuxième fichier - l'erreur ne doit pas être très différente (pas plus de 10 %) des trois premières.

CE MODÈLE N' EST PAS RÉ-ENTRAÎNÉ.


PS.

Si vous incluez des prédicteurs qui ne sont pas pertinents pour la cible, "le marc de café", l'erreur peut être considérablement réduite. Pour ma part, je ne considère pas les modèles dont l'erreur est inférieure à 10%. Mais c'est toujours la même chose : l'erreur sur le deuxième fichier est un multiple de l'erreur sur le premier fichier. Le modèle est REBUILD, il a pris certaines valeurs dans le bruit, en essayant de réduire l'erreur de classification, et dans le futur, ces valeurs n'existeront probablement pas, ou existeront, ou dans le temps..... Ce modèle n' a aucun pouvoir prédictif.

 
SanSan Fomenko:

Sur le premier fichier : learn, test et "out-of-sample". Si les trois valeurs d'erreur sont à peu près égales, exécutez le deuxième fichier - l'erreur ne doit pas être très différente (pas plus de 10 %) des trois premiers.

Quelle est la différence entre

1) une section "hors échantillon" du premier fichier + un autre fichier "hors échantillon".

2) et un "hors échantillon" mais une section plus large incluant le second fichier ?

Il me semble que le résultat sera le même. Si dans la première variante tout est mauvais dans le deuxième fichier, les mêmes données vont tout gâcher dans la deuxième variante.

 

La formation NS comporte généralement trois sections. Une section Formation, une section Test et une section Contrôle. Si, à la section de test, l'erreur se situe dans les limites normales, nous considérons que le modèle n'est pas réentraîné. IMHO.

 
Mihail Marchukajtes:

La formation NS comporte généralement trois sections. Une section Formation, une section Test et une section Contrôle. Si, à la section de test, l'erreur se situe dans les limites normales, nous considérons que le modèle n'est pas réentraîné. IMHO.

Je suis d'accord, mais la raison pour laquelle SanSanych introduit une 4ème section (celle du second bureau) n'est pas claire. Il est possible, après tout, d'étendre l'un à l'autre.
 
elibrarius:

Quelle est la différence entre

1) une section "hors échantillon" du premier fichier + un autre fichier "hors échantillon".

2) et une section "hors échantillon" mais plus grande incluant le second fichier ?

Il me semble que les résultats seront les mêmes. Si les choses sont mauvaises sur le premier dans le second fichier, alors les mêmes données vont également faire foirer les choses sur le second fichier.


Le premier fichier est divisé en trois parties de façon aléatoire, c'est-à-dire que les pièces des échantillons de formation, de test et de contrôle sont mélangées par date. Cela ne se produit pas dans le commerce réel.

Mais le second est un échange d'imitation : nous échangeons toujours APRÈS la section de formation. Contrairement à ce que vous pensez, très souvent, les résultats du second fichier sont très différents de ceux du premier - le modèle est surentraîné et n'est pas adapté.

 
Grigoriy Chaunin:

https://github.com/RandomKori/Py36MT5 Voici les sources de la bibliothèque Python pour MT5. Le seul problème est celui des tableaux. Passer un tableau ou le recevoir ne fonctionne pas correctement. J'ai débogué le code DLL dans Visual Studio. Tout y fonctionne. La question est de savoir s'il s'agit d'un bug terminal. Je n'ai pas écrit comment travailler avec la bibliothèque. Il n'y a aucun sens à cela. Personne n'en a besoin sans les tableaux. Bien qu'il y ait peut-être un problème dans le fichier pythom.mqh, aidez-moi à le résoudre. Tous seront utiles.

Bonne idée et bibliothèque MT5 utile, mais il est assez difficile de la synchroniser avec un fichier script python.

Je pense qu'il est préférable de synchroniser les variables MQL directement avec les variables Python par le biais d'un dictionnaire local et d'exécuter les fragments de code Python directement à partir des constantes de chaîne dans le code d'EA.

J'ai essayé le test, en compilant bcc64 à partir de la ligne de commande et cela fonctionne bien dans 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;
}

Ce serait bien d'ajouter cette fonctionnalité à votre bibliothèque, j'étais sur le point d'écrire la mienne, mais malheureusement pour l'instant je suis occupé par la bibliothèque P-net pour python.

D'ailleurs, j'ai écrit sur ce nouveau réseau neuronal ici dans une branche, selon les résultats préliminaires des tests sur des exemples avec l'Iris de Fisher, il est entraîné trois ordres de grandeur plus rapidement que le DNN dans TensorFlow, avec des résultats de test égaux.

 
SanSanych Fomenko:

Le premier fichier est divisé en trois parties de façon aléatoire, c'est-à-dire que les échantillons de formation, de test et de contrôle sont mélangés par date. Cela ne se produit pas dans le commerce réel.

Mais le second est un échange d'imitation : nous échangeons toujours APRÈS la section de formation. Contrairement à ce que vous pensez, très souvent, les résultats du second fichier sont très différents de ceux du premier - le modèle est surentraîné et n'est pas adapté.

Je mets toujours les 3 premières parties dans l'ordre. Et si la 3ème est mauvaise, le modèle est surentraîné.
 

Gardez à l'esprit que toute sauvegarde de données retardera l'entrée en combat du modèle. Cela affecte directement la qualité des signaux reçus après.....

Personnellement, j'ai choisi la méthodologie suivante. J'ai inversé le modèle obtenu en utilisant des signaux d'achat et je l'ai testé sur la même partie du marché mais pour des signaux de vente. Ainsi, je ne perds pas un temps précieux et j'estime correctement les capacités du modèle. IMHO

 
SanSanych Fomenko:

Le premier fichier est divisé en trois parties de façon aléatoire, c'est-à-dire que les échantillons de formation, de test et de contrôle sont mélangés par date. Cela ne se produit pas dans le commerce réel.

Mais le second est un échange d'imitation : nous échangeons toujours APRÈS la section de formation. Contrairement à ce que vous pensez, très souvent, les résultats du second fichier sont très différents de ceux du premier - le modèle est surentraîné et n'est pas adapté.


Pour les systèmes de prévision, l'ordre dans lequel les données arrivent est important. Pour la classification, NON.