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

 
Mihail Marchukajtes:
Standard avec icustom... Mais il lit les données du fichier où chaque tick est écrit, et l'indicateur lit les données quand une nouvelle barre apparaît et il s'avère qu'il prend une valeur erronée.

Tout d'abord, toutes les tiques ne sont pas écrites

  if ((interest!=inter))
  {

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(interest,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }

OI est écrit seulement s'il a changé et s'il a changé plus de 10 (100 cycles d'écriture de lignes identiques multipliés par 0,1 seconde d'attente après chaque écriture) secondes auparavant. En fait, beaucoup de ticks sont sautés, de sorte qu'une synchronisation exacte n'est plus possible pendant la lecture. Bien que je ne travaille pas avec des ticks - spécifier dans le testeur tous les ticks ou seulement ceux dans lesquels l'achat/la vente de l'instrument (actif) a eu lieu ?

Il est préférable de créer un symbole basé sur les résultats d'une minute fermée - il y a moins de données parasites, la synchronisation dans l'indicateur est plus pratique.


Quant à l'indicateur, supposons que quelque chose a été dessiné correctement sur l'historique.

Et ensuite, sur la barre de zéro, la situation suivante se produira

  BufOI[0]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
 LastUPdate=FileGetInteger("OpenI\\"+FileName1,FILE_MODIFY_DATE,true);
  if ((LastUPdate!=UPdate))
     {
       int h=FileOpen("OpenI\\"+FileName1,FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON,",");
       string str=FileReadString(h);                            // читаем очередную строку из файла

    BufOI[1]=StringToDouble(str);
       FileClose(h);
   BufOI[0]=BufOI[1];

 UPdate=LastUPdate;   

Nous prenons le tic-tac des données de l'OM sur le serveur et il n'est pas présent dans le testeur - et il n'est pas utilisé.

Ensuite, s'il y a une nouvelle date de modification du fichier, qui est mise à jour une fois toutes les 15 minutes en direct, mais pas dans le testeur, nous lisons les données du fichier (la dernière ligne) FileName1=_Symbol+FileNames+"_TMP.csv" et nous assignons les données à la première barre et fermons le fichier et assignons la valeur à la barre zéro. Eh bien, il est clair que cette variante ne fonctionnera pas dans le testeur.

Vous avez besoin de deux modes de l'indicateur - pour l'historique et pour le temps réel, je pense.


Avez-vous vérifié l'exactitude des données sur l'historique - il semble étrange lorsque vous lisez les données du fichier...

         while(!FileIsEnding(h))
           {
            ArrayResize(oi,ct+2,1000);
            string str=FileReadString(h);                            // читаем очередную строку из файла
            if(cnt==0) oi[ct].time=StringToTime(str);                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
            else if(cnt==2) oi[ct].oi=StringToDouble(str);   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и 

            cnt++; // увеличиваем счетчик прочитанных строк
            if(FileIsLineEnding(h)) {cnt=0; ct++;}
           }

Il s'avère que les données ont été lues

 
Aleksey Vyazmikin:

Pour commencer, toutes les tiques ne sont pas écrites

L'OI n'est écrit que s'il a changé et s'il a changé plus de 10 (100 cycles d'enregistrement des mêmes lignes multipliés par une attente de 0,1 seconde après chaque enregistrement) secondes auparavant. En fait, beaucoup de ticks sont sautés, de sorte qu'une synchronisation exacte n'est plus possible pendant la lecture. Bien que je ne travaille pas avec des ticks - spécifier dans le testeur tous les ticks ou seulement ceux dans lesquels l'achat/la vente de l'instrument (actif) a eu lieu ?

Il est préférable de créer un symbole basé sur les résultats d'une minute fermée - il y a moins de données parasites, la synchronisation dans l'indicateur est plus pratique.


Quant à l'indicateur, supposons que quelque chose a été dessiné correctement sur l'historique.

Et ensuite, sur la barre de zéro, la situation suivante se produira

Nous prenons le tic-tac des données de l'OM sur le serveur et il n'est pas présent dans le testeur - et il n'est pas utilisé.

Ensuite, s'il y a une nouvelle date de modification du fichier, qui est mise à jour une fois toutes les 15 minutes en direct, mais pas dans le testeur, nous lisons les données du fichier (la dernière ligne) FileName1=_Symbol+FileNames+"_TMP.csv" et nous assignons les données à la première barre et fermons le fichier et assignons la valeur à la barre zéro. Eh bien, il est clair que cette variante ne fonctionnera pas dans le testeur.

Vous avez besoin de deux modes de l'indicateur - pour l'historique et pour le temps réel, je pense.


Avez-vous vérifié l'exactitude des données sur l'historique - il semble étrange lorsque vous lisez les données du fichier...

Il s'avère que les données ont été lues...

Je suis tout à fait d'accord avec vous. Et il écrit plusieurs valeurs en une minute, ce n'est pas à chaque tic, mais quand même. Ensuite, il construit n'importe quel TF à partir de ces données.

A propos du fichier ТМP qui était ma propre écriture. J'ai fait en sorte que l'indicateur soit mis à jour à l'arrivée de chaque nouvelle bougie et cela s'est avéré plutôt correct sur le compte réel. Mais à un certain moment, il prendra soit la dernière valeur de la bougie précédente, soit la première valeur de la bougie déjà ouverte. J'ai demandé à l'auteur de le changer pour une bougie minute mais cela ne s'est pas réalisé.

Je me souviens que pour chaque signal, je devais recompiler l'EA pour initialiser correctement l'indicateur et obtenir les bons résultats. Cela pourrait modifier le signal actuel. C'est ce qui était vraiment dérangeant.....

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 
Mihail Marchukajtes:

Je suis tout à fait d'accord avec vous. Et les données qu'il écrit plusieurs valeurs dans une minute, ce n'est pas chaque tick, mais quand même. Ensuite, il construit n'importe quelle TF à partir de ces données

Alors quel est l'intérêt d'écrire plusieurs OI en une minute si vous prenez les données de l'indicateur - il n'y aura pas moins de TF. Mais oui, je me trompe, il y a une sortie de la boucle, si l'écriture est réussie, mais toujours un intervalle minimum de 0,1 seconde. Construisez-vous le modèle sur des tics ?

Mihail Marchukajtes:

J'ai écrit sur le fichier TMP. J'ai fait en sorte que l'indicateur se mette à jour lorsqu'une nouvelle bougie arrive et cela a fonctionné correctement pour de vrai. Mais à un certain moment, il prendra soit la dernière valeur de la bougie précédente, soit la première valeur de la bougie déjà ouverte. J'ai demandé à l'auteur de le changer pour les indicateurs minute, mais il n'y a pas eu de résultat.

Pour une véritable transaction, cette ligne dans l'indicateur est suffisante - pourquoi lire les données du fichier quand vous pouvez les prendre sur le marché ?

BufOI[rates_total-1]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);

L'historique s'affiche-t-il correctement dans le visualiseur ?

 
Mihail Marchukajtes:

Je me suis souvenu que pour obtenir des résultats réels sur l'entrée NS, je devais recompiler l'Expert Advisor à chaque signal pour que l'indicateur s'initialise correctement et donne les bons résultats. Cela pourrait modifier le signal actuel. C'est ce qui m'ennuyait vraiment....

C'est étrange. Peut-être devrions-nous refuser tout indicateur pour l'EA et lire directement depuis le fichier dans la structure et rechercher la valeur dans la structure du tableau ?

S'il vous plaît, videz les archives de XI sur Si pendant quelques jours - il est difficile de raisonner dans l'abstrait.
 
elibrarius:

J'ai aussi eu une idée similaire, mais pour l'instant je suis occupé par autre chose. J'espère pouvoir l'expérimenter bientôt.
Elle présente également l'inconvénient de permettre au modèle d'apprendre à partir de 10 fois moins de données. Il me semble que dans ce cas, la capacité de généralisation va diminuer.

Vous pourriez le faire d'une manière différente - apprendre sur 9/10, et couper sur le 1/10 restant d'un échantillon.

 
Aleksey Vyazmikin:

Vous pouvez également procéder d'une autre manière : apprenez sur 9/10 et coupez sur le 1/10 restant de l'échantillon.

Aleksey Vyazmikin:

Donc, quel est l'intérêt d'écrire OI plusieurs fois en une minute, si vous prenez les données de l'indicateur - il n'y aura pas moins de TF. Et oui, je me trompe, il y a une sortie de la boucle ici, si l'écriture est réussie, mais toujours un intervalle minimum de 0,1 seconde. Le modèle est construit sur des tics ?

Ainsi, pour le compte réel, cette ligne est suffisante dans l'indicateur - pourquoi lire les données du fichier, si elles peuvent être prises sur le marché ?

S'est-il correctement dessiné dans le visualiseur du testeur de stratégie ?

Oui, mais en cas de défaillance de la connexion, il y aura un trou. Il n'y a pas de contrôle de la plénitude de l'histoire. Je suis tout à fait d'accord pour les minutes.

Archives de l'OI

http://fayloobmennik.cloud/7399404

 
Mihail Marchukajtes:

Oui, mais en cas d'échec de la connexion, il y aura un trou. Il n'y a pas de vérification de l'exhaustivité de l'histoire. Pour ce qui est des minutes, je suis tout à fait d'accord.

Archives de l'OI

http://fayloobmennik.cloud/7399404

Alors, comment les données seront-elles écrites dans le fichier si la connexion est interrompue ?

 
Romain:

Les données fondamentales comportent de nombreux indicateurs qui donnent des valeurs numériques.
Même ici, sur le site web, le calendrier des actualités donne des statistiques sur les événements.
Oui, je suis d'accord, dans les déclarations vocales, les valeurs numériques sont absentes.
C'est pourquoi ces données devraient probablement être classées dans la catégorie 0 1.
L'essentiel est d'enseigner la différence entre un discours positif ou négatif ;))
Mais là, c'est aussi une idée, pour la réflexion !)

pour utiliser la fondation, il manque quelques chiffres

autant que je me souvienne, je n'ai pas trouvé d'agrégats monétaires, il y en a plusieurs.

certains d'entre eux n'ont pas été mis à la disposition du public depuis environ 2010.

 
Mihail Marchukajtes:

Oui, mais en cas d'échec de la connexion, il y aura un trou. Il n'y a pas de vérification de l'exhaustivité de l'histoire. Pour ce qui est des minutes, je suis tout à fait d'accord.

Archives de l'OI

http://fayloobmennik.cloud/7399404

Êtes-vous d'accord qu'au moment de l'ouverture de la barre minute, l'OI doit être pris pour l'entrée précédente ? Par exemple, à l'heure d'ouverture à 10h00, nous prenons l'OM comme étant 23:49:55.

Je pense qu'il est préférable d'utiliser l'indicateur sur M1 et de prendre toutes les informations nécessaires à partir de la barre zéro et de faire différentes comparaisons dans le Conseiller Expert en considérant la demande d'informations du tampon de l'indicateur avec le décalage requis.

Quelle est la troisième valeur du fichier - la première est la date, la deuxième est OM et la troisième est OI ? Je pensais que c'était un delta mais ça ne marche pas.

J'ai essayé de modifier l'indicateur comme je l'ai écrit ci-dessus, il lit et affiche l'OM, la vitesse de travail est beaucoup plus rapide maintenant, essayez juste de le vérifier.

Oui, et la lecture du fichier devrait fonctionner s'il y a des données dans le fichier, mais le marché est fermé et n'a pas été vérifié.

Dossiers :
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Alors, comment les données seront-elles écrites dans le fichier lorsque la connexion sera interrompue ?

Si la connexion est globalement coupée par le courtier, alors rien ne peut être fait. Le conseiller en sauvegarde des données est sur le serveur de l'UPU et je peux dire que les données ont été écrites sans aucune perte.
Raison: