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

 
Mihail Marchukajtes:

C'est le genre de programmeur que je suis. Personne ne peut l'expliquer correctement tant que vous ne l'avez pas compris... Bref, les gens !!!!! Écoutez. Voici l'important long post......


c'est une évolution ... faire ou mourir :) je suis juste comme ce programmeur

 
Mihail Marchukajtes:

En tout cas, les gens !!!!! Écoutez. A venir Important long post......

Maître, brûlez !

 

Vous savez tous très bien que j'ai un sentiment fervent pour l'Open Interest (OI) car il est le maillon clé pour déterminer la nature du volume échangé. Combiné avec le delta... mmmmm.... Juste un petit détail savoureux.... L'IO n'est certainement pas une panacée, mais améliorer la qualité des performances du modèle, même de 10 %, aura déjà un poids élevé !!!!. Et oh, miracle !!!! J'y suis finalement parvenu dans le courant de la journée, mais malheureusement, seul MT5 dispose de telles fonctionnalités, ce qui a été le facteur décisif pour passer de MT4 à 5. Un grand merci à Rafil qui a permis de gagner beaucoup de temps et de donner un bon départ à la migration. L'évaluation environnementale est déjà en cours de rédaction et il y a une semaine de statistiques. Bien sûr, ce n'est pas suffisant, mais nous pouvons commencer à le tester sur M5, en particulier sur Si, car l'influence du spread est insignifiante dans cette période par rapport à la volatilité de l'instrument en général. Eh bien... les données sont là, la seule chose est ce que je pensais que ce serait. Pour entraîner le modèle et voir ce dont la combinaison Delta+Volume+OI est capable. J'ai une bonne connaissance pratique de Мкуль5, mais après l'avoir trouvé, je pense avoir atteint la ligne d'arrivée et être confronté à un mur d'incompréhension dans une langue aussi merveilleuse et puissante. Le concept général du CT est le suivant.

Dans cet article, je vais essayer d'explorer les principales différences entre les valeurs théoriques et numériques du modèle.

Pour préparer l'ensemble d'entraînement, j'utilise le script d'application ci-dessous. Ce script décharge les signaux de la stratégie de base dans un fichier csv. Ensuite, nous construisons le modèle et le plaçons dans un autre indicateur. J'en ai deux. BuySi et SellSi, ce sont les mêmes indicateurs qui contiennent de l'IA. Pour les intrants, ces indicateurs concernent l'ensemble des indicateurs Delta+AD+OI. Indicateur de l'indicateur, surtout dans un seul paquet... Quel pourrait être le problème... Mais non... Ils sont.... et je pense être le seul à en savoir autant sur ce beau et merveilleux langage de programmation.... donc... où en étais-je... oh oui.... Le problème est le suivant :

Le script décharge une donnée dans un fichier, mais pendant le test au moment du signal, l'impression affiche d'autres valeurs. Par exemple, le même signal dans un fichier écrit une chose, mais en fait au moment du test sur l'entrée est complètement différent. Et c'est là que réside le paradoxe. L'initialisation de la poignée et l'accès au tampon lui-même ont été copiés du script. Mais BuySi charge des données adéquates au moment du test car je l'ai vérifié à la main. Et le plus intéressant est que OM charge le même fichier et l'entrée de AI, mais AD est standard, terminal un. Dans le fichier certaines valeurs, en fait d'autres. Je pense que cela a à voir avec ce même paramètre lorsque nous essayons d'appeler l'indicateur pour un instrument différent de celui qui est testé. Je pense que le problème se situe au niveau de la synchronisation des cotations et des valeurs des indicateurs. Je pense que cette solution peut nécessiter une certaine préparation préalable. C'est pourquoi je demande de l'aide aux gens. Pourquoi le script récupère-t-il les mêmes valeurs iAD mais que lors du test ces valeurs sont différentes et que par conséquent les signaux commencent à varier ? Lorsque les icônes sont sur le graphique, c'est-à-dire qu'elles sont calculées pendant l'initialisation, l'image se présente comme suit.

Très bien, à mon avis. L'influence de l'OM se fait sentir immédiatement, mais lorsque je l'exécute dans le testeur, l'image change... et pas pour le mieux.

De plus, le testeur effectue deux passages avec des signaux différents. Les inducteurs devraient pomper les tampons à temps. Le calcul de l'AI se fait avec un délai et l'erreur 4806 n'apparaît plus, mais les signaux de danse et la différence dans les données, code absolument identique avec l'indicateur iAD STANDARD Je suis assez épuisé d'avoir été trop paresseux pour écrire ce long post, en espérant de l'aide. Je pense que le problème se situe dans l'iCustom, lorsque l'indicateur est appelé sur un instrument différent de celui en cours. Juste la même chose a commencé à arroser OI, mais je l'ai ensuite forcé à charger à partir de fichiers spécifiques et tout est passé, mais que faire avec iAD ???

C'est ainsi que j'appelle le script, qui crée un fichier avec des données.

AD_H =iAD("BR-12.17",   0, VOLUME_REAL);  Sleep(1500);

puis j'accède au tampon comme ceci...

  double AD(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(AD_H,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

Et ensuite je calcule l'entrée comme ceci.

      double AD=(AD(i+1)-AD(i+PNT+1))*Cont;

Tout ceci est dans un script, mais cela fonctionne dans un indicateur avec IA, où la poignée est écrite de la manière suivante

AD_H =iAD("BR-12.17",   0, VOLUME_REAL);  

L'accès à la mémoire tampon est comme ça...

  double AD(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(AD_H,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

Le calcul des entrées est le suivant : ....

      double AD=(AD(i+1)-AD(i+PNT+1))*Cont;

C'est compréhensible, car tout a été copié. Mais pourquoi y a-t-il une telle différence dans le résultat final ? Je pense cependant que c'est parce que l'indicateur a été appelé avec un autre symbole. Il n'est pas nécessaire de préparer quoi que ce soit, comme la synchronisation ou toute autre vérification avant d'appeler l'indicateur par un autre symbole. Qu'en pensez-vous ? ? ???

 
Vizard_:

Maître, tirez !


OOO C'est évident... une foule sérieuse est arrivée. Je pense que le débat sera chaud :-)

 

Et maintenant j'ai compilé un indicateur et il sort sur l'imprimante exactement les données qu'il envoie au fichier. Mais pendant le test, le même signal sur l'entrée a d'autres valeurs. Comment cela se fait-il ?

 

Je vois qu'il n'y aura pas de film ????. Triste :-(

 

C'est juste une supposition, mais...

Si vous remplissez le fichier avec les valeurs AD générées à l'avance, puis que vous lisez ce fichier et l'utilisez pour vos tests, il se peut que vous anticipiez en utilisant la valeur de la barre zéro déjà générée à un moment où elle n'est pas encore connue dans l'EA lui-même.

 
Dr. Trader:

C'est juste une supposition, mais...

AD dépend du volume, donc la valeur de la barre zéro change constamment. Si vous remplissez le fichier avec des valeurs AD générées à l'avance, puis que vous lisez ce fichier et l'utilisez pour vos tests, vous risquez d'anticiper, en utilisant la valeur de la barre zéro déjà générée à un moment où elle n'est pas encore connue dans l'EA lui-même.


Non. Aucun fichier n'est écrit en utilisant AD, tout est repris directement du symbole. Je pense que cela peut être dû à un manque de vérification de la synchronisation. De plus, l'erreur 4806 était toujours présente. J'ai introduit un délai dans l'indicateur principal et l'erreur a disparu, mais le problème a persisté. :-(

 

Voici l'impression du terminal après la compilation.

2017.11.27 20:59:17.625 Acheter_Si (Si-12.17,M5)2017.11.23 11:05:00 1.0 -116.0 64.0 2292.0 -206.0 413 4

et ici de l'agent.

2017.11.27 20:59:38.318 2017.11.23 11:10:40 2017.11.23 11:05:00 1.0 -116.0 140.0 -1889.0 -993.0 1 4

Notez que c'est le même signal. Le temps 11:05:-116 est l'OI qui est pris du fichier, également le même. Il y a ensuite trois valeurs AD provenant de symboles différents. Ensuite, j'ai bien barré et le paramètre pont.

Pourquoi les données sur AD sont différentes. Vérification de la synchronisation insérée.... ?

 

Je ne comprends rien sans le code.

Nous devons créer un conseiller expert simple avec un ensemble minimal de fonctions pour lire simplement les valeurs de l'indicateur et les écrire dans le journal (ou mieux - dans un fichier csv, pour une meilleure comparaison ultérieure). Dans ce cas, les résultats seront différents, et le code doit être envoyé au Service Desk avec le code de l'Expert Advisor.
Vous pouvez également joindre le code au terminal -https://www.mql5.com/ru/forum/1111/page2096 - et une personne compétente pourraalors vérifier et confirmer ou expliquer ce qui ne va pas.

Raison: