Ce que RefreshRates() met à jour - page 6

 
Mikhail Nazarenko:

MT4 est une boîte noire et je ne peux juger de ce qui s'y passe qu'en effectuant des tests en conditions réelles. Au départ, je n'ai pas du tout utilisé sleep, mais quand j'ai eu des problèmes avec certaines barres d'heures, j'ai ajouté sleep et le problème a disparu. Je ne sais pas dans quel ordre et comment la série chronologique MT4 est mise à jour. Je ne sais pas trop quoi en faire, je vais en profiter pour régler mon problème et le partager avec les autres.

J'ai moi-même rencontré ce problème, tout va bien dans le testeur, mais sur le marché réel, il n'y a rien.

J'utilise le conseiller expert depuis lundi et je suis surpris.

J'ai ouvert plusieurs ouvertures rentables, puis je suis revenu en arrière pour acheter au lieu de vendre, et vice versa.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4 et MQL5, ou tous les conseils et discussions sur les algorithmes et les codes.

Vitaly Muzichenko, 2021.02.15 21:48

J'ai déjà lancé mt4 pour vérifier mon algorithme.

Je ne l'ai jamais essayé, mais je n'ai jamais vu un tel algorithme correctement. Code simple, seulement 2 tampons indicateurs



Le code est très simple

   double poi=Point();
   for(int i = limit-2; i>0; i--) {
      if(open[i+0] > close[i+0] && MathAbs(open[i+0] - high[i+0]) < 0.1 * poi)
         Dn[i] = high[i+0] + 30 * poi;
      if(open[i+0] < close[i + 0] && MathAbs(open[i+0] - low[i+0]) < 0.1 * poi)
         Up[i] = low[i+0] - 30 * poi;
   }
 
Vitaly Muzichenko:

J'ai moi-même été confronté à ce problème : tout va bien dans le testeur, mais sur le marché réel, c'est nul.

J'utilise l'EA depuis lundi et je suis surpris.

Je suis surpris. Certaines ouvertures sont correctes, mais après cela, je recommence à acheter au lieu de vendre et vice versa.


Le code de l'indicateur est simple.

C'est le même problème que j'avais avant de commencer ce fil. J'ai fait la fonction isRefresh() ci-dessus. Essayez-le. Ça a bien marché pour moi.

Et ce n'est pas un glissement ?

 
Vitaly Muzichenko:

Le code de l'indicateur est simple

L'indicateur ouvre-t-il des transactions ?

les flèches sont les mêmes - le problème se situe dans le code de l'EA

 
Mikhail Nazarenko:

Si vous commencez à enseigner, alors aidez, confirmez avec du code, des tests, un lien vers un sujet du forum ou de la documentation. Tout le reste n'est que masturbation du cerveau.

Veuillez clarifier ce qui n'est pas clair. Après lecture, il semble que la question principale soit résolue et qu'il reste à discuter de l'obsolescence de la 4).

Je n'ai eu aucun problème après avoir inséré un tel chargement de délais.

bool HistoryCheck(int TF)
  {
   int err=0;   
   int i=0;
   datetime d1=0,d2=0;
   while(i<10)
    { 
    if((d1=iTime(NULL,TF,0))==0 || (d2=iTime(NULL,TF,InpPeriod*2))==0)          
        PrintFormat("itime=0, %s, %s", TimeToString(d1),TimeToString(d2)) ; 
   err=GetLastError();    
   if(err==4066)    
    {
    	PrintFormat("Error=4066") ; 
    	 Sleep(500);     	
    }
   else break;	
      SleepA(100);
      i++;                 
    } // while
   if(i==10)
	 { Comment("Update failed. Go to the next attempt."); return(false); }
   PrintFormat("HistoryCheck %d , %s, %s",i,TimeToString(d1),TimeToString(d2)) ;
   Comment(""); 
   return(true);
  }

Si vous avez besoin d'accéder rarement et irrégulièrement à l'horizon temporel, vous devriez (mais pas nécessairement si le graphique est ouvert) effectuer à nouveau ce chargement avant de vérifier

  if((iTime(NULL,TF,0)+PeriodSeconds(TF))<TimeCurrent()
   || (iTime(NULL,TF,1)+PeriodSeconds(TF)*2)<TimeCurrent())
   HistoryCheck(TF)
Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
ChartOpen - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Nazarenko:

C'est la même chose que j'ai rencontrée avant d'ouvrir ce fil de discussion. Pour une raison quelconque, le terminal donne des données périmées sur le réel, j'ai écrit la fonction isRefresh() ci-dessus. Essayez-le. Ça a bien marché pour moi.

Mais ce n'est pas un glissement ?

Non, il s'ouvre sur une nouvelle barre 0 et le signal est recherché sur la barre fermée, c'est-à-dire 1.

C'est parfois le cas lorsqu'un EA n'obtient pas ce qui est attendu par iCustom(). Encore une fois : parfois, mais pas souvent.

En voici une autre, toute fraîche. J'ai correctement ouvert une position d'achat selon le signal et le prochain signal de l'indicateur est également d'achat (flèche ci-dessous). Mais l'EA viaiCustom() a reçu un signal de vente et a fermé la position d'achat et ouvert la position de vente, alors qu'il devrait y avoir une autre position d'achat ouverte.

Il y a un problème avec les séries temporelles, je ne l'ai pas encore compris, il a été trouvé il y a 4 jours et je ne vais probablement pas essayer de le découvrir. Je n'ai pas vu de problèmes dans le testeur

En ce moment même.

--- Et je viens de trouver


 

Et aussi, mais déjà au lieu d'une vente, un achat est ouvert. Comme je l'ai dit, ce n'est pas souvent, mais cela arrive.

Le code de l'indicateur est simple - il n'y a pas de code compliqué.


 
Aleksey Mavrin:

Veuillez clarifier ce qui n'est pas clair. Après avoir lu ceci, il semble que la question principale soit résolue et qu'il ne nous reste plus qu'à discuter de l'obsolescence du 4).

Je n'ai eu aucun problème avec ce chargement d'échéances

Si vous avez besoin d'accéder rarement et irrégulièrement à un horizon temporel, vous devriez (mais pas nécessairement si le graphique est ouvert) effectuer ce chargement à nouveau avant de vérifier, ou une telle vérification sera utile...

C'est exact,

Cela vient de l'aide :

L'accès aux données des indicateurs et des séries chronologiques se fait indépendamment du fait que les données demandées soient prêtes (accès dit asynchrone). Ces données sont essentielles pour le calcul des indicateurs personnalisés. En l'absence des données demandées, les fonctions telles que Copy...() renvoient immédiatement une erreur. Cependant, lors de l'accès à partir d'Expert Advisors et de scripts, plusieurs tentatives de réception de données sont effectuées, avec une petite pause, qui vise à fournir le temps nécessaire pour télécharger les séries chronologiques requises ou pour calculer les valeurs des indicateurs.


Si des informations sont demandées à partir d'un autre graphique (le nom de l'instrument et/ou la valeur de l'horizon temporel diffèrent de ceux du graphique actuel), il peut arriver qu'aucun graphique approprié ne soit ouvert dans le terminal client et que les données nécessaires doivent être demandées au serveur. Dans ce cas, l'erreur ERR_HISTORY_WILL_UPDATED (4066 - les données historiques demandées sont en cours de mise à jour) sera placée dans la variable _Last_error et la demande devra être réitérée après un certain temps (voir l'exemple ArrayCopySeries()).

 
Vitaly Muzichenko:

Et aussi, mais déjà au lieu d'une vente, un achat est ouvert. Comme je l'ai dit, ce n'est pas souvent, mais cela arrive.

Le code de l'indicateur est simple - il n'y a aucune complexité.


La méthode la plus fiable est d'écrire le journal. A chaque transaction, écrivez les valeurs des variables clés dans le fichier. Par expérience : la condition non stricte <=0 au lieu de <0 a introduit une terrible courbure.

 
Vitaly Muzichenko:

J'ai moi-même été confronté à ce problème : tout va bien dans le testeur, mais sur le marché réel, c'est nul.

J'utilise l'EA depuis lundi et je suis surpris.

Je suis surpris. Certaines ouvertures sont correctes, mais après cela, je recommence à acheter au lieu de vendre et vice versa.


Le code de l'indicateur est simple

   double poi=Point();
   for(int i = limit-2; i>0; i--) {
      if(open[i+0] > close[i+0] && MathAbs(open[i+0] - high[i+0]) < 0.1 * poi)
         Dn[i] = high[i+0] + 30 * poi;
      if(open[i+0] < close[i + 0] && MathAbs(open[i+0] - low[i+0]) < 0.1 * poi)
         Up[i] = low[i+0] - 30 * poi;
   }


Pourquoi devrais-je ajouter 0 à [i + 0] ?

 
Aleksey Mavrin:

Veuillez clarifier ce qui n'est pas clair. Après avoir lu ceci, il semble que la question principale soit résolue et que nous devions encore discuter de l'obsolescence de la 4).

Je n'ai eu aucun problème avec ce chargement d'échéances

Si vous avez besoin de vous référer à l'horizon temporel de façon rare et irrégulière, alors ce chargement devrait (mais pas nécessairement si le graphique est ouvert) être refait avant la vérification, ou une telle vérification serait utile.

Merci, c'est le but. Le terminal donne-t-il vraiment une erreur 4066 après avoir accédé à une série chronologique non mise à jour via iTime ? J'ai rencontré iClose donnant des informations non mises à jour au lieu de zéro.