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

 
Mihail Marchukajtes:

Alexei, merci beaucoup. Je vais certainement tout vérifier et vous faire part du résultat. Quant à l'anticipation, elle est absolument sans importance et ne se produira pas si l'EA écrit comme l'indicateur lit. S'il n'y a pas de différence entre eux, cela n'aura aucune importance. Alternativement, lorsqu'une nouvelle barre apparaît, nous attendons le premier changement d'OI et enregistrons la nouvelle valeur pour la première barre précédente. Nous pouvons même enregistrer non pas une nouvelle valeur, mais l'ancienne qui était la dernière pour la première barre. C'est-à-dire qu'en fait, nous commencerons à l'écrire à la fin de la mesure précédente.

L'important n'est pas l'OI que nous attribuons à la barre minute, mais la façon dont l'indicateur sera lu dans le fichier.

Pensez également non seulement à la formation, mais aussi à l'utilisation du modèle lorsque les données seront extraites du marché - les données les plus fiables y seront disponibles. Pour l'instant les données seront sauvegardées à l'ouverture de la bougie, c'est-à-dire que sur la barre zéro il n'y aura pas de changement après l'ouverture (si j'ai bien compris :) ). Si vous avez besoin de données sur une barre de fermeture, vous pouvez la modifier dans tous les cas, la seule différence étant la valeur de la dernière ou de l'avant-dernière barre.

 

néocognitron - une sorte de réseau convolutif mais sans professeur

https://habr.com/ru/post/214317/

Qui comprend comment cela fonctionne, s'il vous plaît expliquez-moi

 
Aleksey Vyazmikin:

En outre, pensez non seulement à la formation, mais aussi à l'application du modèle lorsque les données seront extraites du marché - afin de disposer des données les plus fiables. Pour l'instant, les données seront enregistrées à l'ouverture de la bougie, c'est-à-dire que sur la barre zéro, il n'y aura pas de changement après l'ouverture (si j'ai bien compris :) ). Si vous avez besoin de données sur une barre de fermeture, vous pouvez le faire plus tard. La seule différence est la dernière ou l'avant-dernière barre à partir de laquelle l'EA doit obtenir des données.

Bien que le conseiller expert commence à travailler à l'ouverture de la barre, il obtient toujours les données de la première barre. Dans mon cas, elle est même prise à partir de la deuxième barre ; eh bien, c'est mon bug car nous ne devrions pas attendre 30 secondes pour que les valeurs soient mises à jour sur la première barre ; la deuxième barre a déjà été calculée depuis un bon moment. C'est pourquoi écrire la première valeur OI dans l'open bar n'est pas si effrayant. Il s'avère que j'écris la valeur actuelle dans l'historique. Il n'y a pas de retour en arrière. Et ce n'est pas grave, nous ne le prenons pas sur une copie. Le plus important est que l'indicateur le lise correctement. Vous avez une fonction supplémentaire dans votre indicateur pour lire un fichier qui contient la condition "True Date". Pour le chargement correct de l'historique depuis le fichier, j'ai dû ajouter la ligne suivante

 if(New_Data==true)
            {
               ArrayResize(oi,x+2,1000);
               if(cnt==0)
               {
               Arh_Time=StringToTime(str);///////////// Если честно в обще не понял зачем ты так это всё разделил
                  oi[x].time=Arh_Time;                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
               }

               else if(cnt==1)
               {
                  oi[x].oi=Arh_oi;   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и
                  New_Data=false;
                  x++;
               }
            }

Et l'indicateur a commencé à fonctionner avec les données enregistrées par minute et par tick, le tout dans un seul fichier. J'ai même vérifié comment les différentes échéances sont construites et tout s'est bien adapté, mais j'ai dû changer cette ligne dans le corps principal également

for(int s=f; s<count_size; s++)
            {
               //Print("Test_02");
               if(oi[s].time>time[i])
               {
                  //Print("Test_03");
                  if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже
                  //Print("s=",s);
                  f=s;
                  break;
               }
               if(s+1==count_size)
               {
                  BufOI[i]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
                  //Print("OI=",SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST));
                  if(BufOI[i]<1)BufOI[i]=BufOI[i-1];
                  if(BufOI[i]<1 && BufOI[i-1]<1)BufOI[i]=100;
                  f=s;
               }
            }

J'ai changé cette ligne dans le corps principal, sinon j'ai mis l'EA sur le graphique et j'attends l'ouverture.

Voici un indicateur et ne remerciez pas :-) !!!! Je plaisante, mais merci beaucoup. Que diriez-vous de 37 livres ? Vous voulez gagner de l'argent ?

Dossiers :
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Si le conseiller expert travaille à l'ouverture de la barre, même si elle est retardée, est-il correct de lui fournir des données à la fermeture de la bougie, c'est-à-dire de regarder dans le futur ? C'est pourquoi les données les plus récentes avant cette bougie sont utilisées, c'est-à-dire un petit délai, au lieu de l'anticipation.


Où se trouve le calcul des 5 ticks ? Il arrive parfois qu'une transaction ne soit pas conclue dans la minute qui suit, et que vous manquiez une barre, c'est pourquoi j'ai supprimé la comparaison pour le changement de volume OI, les données ont donc été écrites immédiatement à l'ouverture d'une nouvelle bougie. J'ai peut-être oublié, je dois le tester avec des données, je n'avais pas de données hier et c'est un jour de semaine :(

Il y aura un gap et je devrais réécrire sa valeur à partir de la deuxième barre. Mais ma question reste sans réponse : la condition de nouvelle barre sera-t-elle remplie lorsque la boule s'ouvrira et que quelques ticks passeront, par exemple, et ce n'est qu'alors que l'OI changera ?
 
Malheureusement, ni la première ni la deuxième mesure ne sont enregistrées en mode temps normal. Lors de la recompilation de l'indicateur, l'historique est chargé mais seulement jusqu'à la troisième barre, ni la deuxième ni la première ne sont mises à jour, bien qu'elles soient en fait dans le fichier.
 
Mihail Marchukajtes:

Les données sont toujours extraites de la première barre, bien que l'EA commence à fonctionner à l'ouverture de la barre. Dans mon cas, c'est même à partir de la deuxième barre, mais c'est mon bug car je n'ai pas besoin d'attendre 30 secondes pour que les valeurs soient mises à jour sur la première barre, la deuxième barre a déjà été calculée et depuis longtemps. C'est pourquoi écrire la première valeur OI dans l'open bar n'est pas si effrayant. Il s'avère que j'écris la valeur actuelle dans l'historique. Il n'y a pas de coup d'œil. Et ce n'est pas grave, nous ne le prenons pas sur une copie. Le plus important est que l'indicateur le lise correctement. Vous avez une fonction supplémentaire dans votre indicateur pour lire un fichier qui contient la condition "True Date". Pour le chargement correct de l'historique depuis le fichier, j'ai dû ajouter la ligne suivante

Et l'indicateur a commencé à fonctionner avec les données enregistrées par minute et par tick, le tout dans un seul fichier. J'ai même vérifié comment les différentes échéances sont construites et tout s'est bien adapté, mais j'ai dû changer cette ligne dans le corps principal également

J'ai changé cette ligne dans le corps principal, sinon j'ai mis l'EA sur le graphique et j'attends l'ouverture.

Voici un indicateur et ne remerciez pas :-) !!!! Je plaisante, mais merci beaucoup. Que diriez-vous de 37 livres ? Voulez-vous gagner de l'argent ?

Si vous n'utilisez pas de barre de zéro, vous pouvez bien sûr faire une anticipation. J'en ai fait un sur mesure ici, la façon dont je travaille avec les données.

La seule chose qui me perturbe est.

if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже

Cette inégalité ne peut être respectée. En effet, l'heure du premier tick peut ne pas coïncider avec l'heure d'ouverture de la bougie. Sauvegarde de l'heure à partir du fichier,

Arh_Time=StringToTime(str);

tronquer l'heure à la minute près à partir de la variable NewTime.

Et à propos de la récompense - je pensais l'avoir déjà gagnée :)


Mihail Marchukajtes:
Oui, il y aura un écart et vous devrez réécrire la valeur de la deuxième barre. Mais ma question reste sans réponse : la condition d'une nouvelle barre sera-t-elle remplie lorsqu'une boule s'ouvre et passe quelques ticks, par exemple, et qu'ensuite l'OI est modifié ?

La vérification d'une nouvelle barre se produit après un changement de volume, donc nous devrions arriver à la partie du code où l'enregistrement a lieu.


Mihail Marchukajtes:
Malheureusement, il n'écrit pas la première ou la deuxième mesure en mode raltime. Quand je recompile l'indicateur, l'historique se charge mais seulement jusqu'à la troisième barre, ni la deuxième ni la première ne sont mises à jour, bien qu'elles soient dans le fichier.

Il n'écrit pas où ? Le conseiller expert n'écrit pas ? Essayez l'ancienne version de l'EA où il écrit plusieurs fois par minute et voyez si l'indicateur fonctionne correctement avec elle.

 
Aleksey Vyazmikin:

Si vous n'utilisez pas la barre de zéro, vous pouvez bien sûr faire une anticipation. J'ai fait mon propre truc ici, la façon dont je travaille avec les données.

Seulement je suis confus.

Cette inégalité ne peut être respectée. En effet, l'heure du premier tick peut ne pas coïncider avec l'heure d'ouverture de la bougie. Sauvegarde de l'heure à partir du fichier,

tronquer l'heure à la minute près à partir de la variable NewTime.

Et à propos de la récompense - je pensais l'avoir déjà gagnée :)


Vérifier la présence d'une nouvelle barre après le changement de volume, il faut donc arriver à la partie du code où l'écriture a lieu.


Où n'est-il pas écrit ? L'EA n'écrit pas ? Essayez l'ancienne version de l'EA où il écrivait plusieurs fois par minute, est-ce que l'indicateur fonctionnera correctement avec elle.

Je m'occupe de l'EA maintenant, il continue à changer la valeur de la première barre dans le fichier pour une raison quelconque. Je pense que le nouveau bar est toujours meilleur. Si je ne l'avais pas vérifié maintenant, j'aurais trébuché.

Et ainsi de suite à chaque recompilation. Qu'est-ce que HZ ? J'ai déjà essayé plusieurs choses, parfois il se charge, parfois non...

 
Mihail Marchukajtes:

Maintenant que j'ai affaire à l'EA, il continue à changer la valeur de la première barre dans le fichier pour une raison quelconque. On dirait que le nouveau bar est toujours plus sombre. Je l'ai vérifié maintenant et cela ressemble à cela quand je recompile.

Et ainsi de suite à chaque recompilation. Qu'est-ce que HZ ? J'ai essayé plusieurs choses - parfois ça le charge, parfois non...

Mon EA n'écrit pas du tout votre EA - je dois l'essayer. J'ai déjà essayé et cela ne fonctionne pas, je ne veux pas qu'il s'ouvre ou se ferme.

 
Aleksey Vyazmikin:

Mon EA n'écrit pas du tout votre EA - je dois le comprendre. Ou envoyez-moi une version de travail juste pour que Si puisse écrire.

Vous devez spécifier le contrat à terme actuel partout. Bien sûr, ça ne fonctionne pas dans Splice. Si j'essaie d'utiliser une alternative, je montrerai la version actuelle de l'indicateur, qui ne charge que la deuxième barre lors de la compilation, alors que la première barre change toujours, je comprends que c'est l'OM actuel.

Dossiers :
 

Alexey, est-il possible de faire en sorte que l'indicateur lise les lectures du fichier pour la première barre lorsqu'une nouvelle barre apparaît et ainsi la synchronisation la plus complète sera réalisée. En fait, il ne se tiendra pas sur le graphique, et il sera appelé périodiquement de signal en signal... Le problème est que l'EA utilise le carnet du marché et que l'indicateur reçoit des données de la bourse, ce qui entraîne une énorme divergence en temps réel. Je pense que nous devrions utiliser le suivi des livres de marché et l'indicateur commencera à fonctionner avec ces entrées. Profit !!!!!

Je pense que la seule source d'obtention de l'OM doit être l'EA et la duplication des demandes à l'échange n'est pas acceptable, sinon on se donne la peine de négocier. Qu'en pensez-vous ?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...