Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1171

 
Igor Zakharov:

Est-ce que ça remonte l'histoire ?

C'est probablement le cas. Mais je ne suis pas sûr à 100%. Comment vérifier cela, en modifiant le nombre de barres par l'imprimante ?

Igor Zakharov:

Vous n'avez pas de nouveau calcul pour ce cas.

Merci, ça y ressemble.

Igor Zakharov:

Et les nouveaux éléments dutampon indicateur qui apparaissent sont remplis de déchets.

On dirait que ce ne sont pas seulement les nouveaux, mais aussi les anciens. J'ai l'impression que non seulement les flèches sont dessinées de manière aléatoire, mais que la ligne de l'indicateur se casse alors qu'elle ne devrait pas. Veuillez m'indiquer comment organiser le recalcul en cas d'échange d'historique ou où chercher un exemple.

 
Alexey Viktorov:

J'ai fait une erreur en insérant cet add-on séparément. Vous ne devez mettre les flèches que lorsque le tampon change. Dans le même temps, n'oubliez pas de mettre une valeur vide dans le tampon dans tous les autres cas.

Il serait même préférable de mettre une valeur vide au départ, et de remplir un des tampons avec une flèche lorsque la tendance change.

Merci de votre réponse.

J'ai vérifié l'indicateur original et il s'avère que ce n'est pas moi qui ai fait une erreur, mais qu'il était mal écrit à l'origine. C'est à dire que même sans mes modifications, il se plante aussi lors du changement d'historique.

 
C'est la première fois que je pose une question et que je n'ai pas de réponse. Une sorte d'aide sélective pour les nouveaux arrivants.
 
novichok2018:
C'est la troisième fois que je pose une question et que je reçois une réponse muette. Il s'agit d'une sorte d'aide sélective pour les débutants.

la première chose qui attire l'attention est que vous créez un objet graphique de ligne de tendance avec le nom LowLine et ne le supprimez pas plus tard ou ne créez pas d'objets similaires avec des noms différents...

Vous ne pouvez pas exécuter ObjectCreate() avec le même nom plusieurs fois - cela ne fonctionnera que la première fois, puis il y aura une erreur.


Il y a aussi un problème avec la détermination des fractales, vous essayez de trouver la fractale sur la barre #2 après l'ouverture de la barre, habituellement vous effectuez un cycle sur les barres avec un appel de l'indicateur de fractale et vous interrompez le cycle quand la première fractale est trouvée, et vous obtenez le numéro de la barre sur laquelle la fractale a été trouvée.

 
Igor Makanu:

Il y a aussi un problème avec la définition des fractales, vous essayez de trouver une fractale sur la barre d'ouverture #2, habituellement vous faites un cycle sur les barres avec l'appel de l'indicateur de fractale et vous interrompez le cycle quand la première fractale est trouvée, et vous obtenez le numéro de la barre sur laquelle la fractale a été trouvée.

Merci !

En effet, je ne comprends pas comment obtenir les numéros des barres où la fractale est apparue, car elle apparaît deux barres plus tard. C'est pourquoi je l'attrape sur la deuxième barre. Alert affiche le nombre de fractales dans une période donnée, mais comment puis-je définir le point de la deuxième fractale pour tracer la ligne de tendance ? La manière de procéder selon vos recommandations n'est pas claire.

L'indicateur fractal appelé dessine des fractales sur tout l'historique disponible. J'essaie de résoudre la tâche consistant à tracer la ligne de tendance par une fractale tombant dans une certaine période de la journée, en tenant compte des fractales du jour précédent et en reconstruisant automatiquement la ligne en fonction de la dernière fractale. Et il y a un manque de connaissances.

 
novichok2018:

Merci !

Vraiment, je ne comprends pas comment obtenir les numéros des barres où la fractale est apparue, car elle apparaît avec deux barres de retard. C'est pourquoi je l'attrape sur la deuxième barre. Alert affiche le nombre de fractales dans une période donnée, mais comment puis-je définir le point de la deuxième fractale pour dessiner la ligne de tendance ? La manière de procéder selon vos recommandations n'est pas claire.

L'indicateur fractal appelé dessine des fractales sur tout l'historique disponible. J'essaie de résoudre la tâche consistant à tracer la ligne de tendance par une fractale tombant dans une certaine période de la journée, en tenant compte des fractales du jour précédent et en reconstruisant automatiquement la ligne en fonction de la dernière fractale. Et il y a un manque de connaissances.

Tu es sûr que tu dois attraper la deuxième barre ?

Voici les tests :

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

MQL5 : Exemples.

Vladimir Karputov, 2018.03.19 05:54

  • 2.3. iFractals. Deux facteurs importants à prendre en compte

Il y a deux facteurs à prendre en compte lorsque l'on travaille avec des fractales :

Facteur 1

Lafractale sur les barres de "rates_total-5" à"rates_total-3" ne peut pas être redessinée - cela découle de la conception de l'indicateur"Fractals.mq5" (le code ouvert de l'indicateur se trouve dans [data folder]\MQL5\Indicators\Examples\Fractals.mq5) - car les barresentre "rates_total-5" et"rates_total-3" sont déjà formées

//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

Fractales

Fig. 1. C'est ainsi que l'indicateur "Fractals" fonctionne. Numérotation des fichiers à partir de la position de l'indicateur "Fractals.mq5".

Cela signifie que lorsque nous recevons des données dans l'Expert Advisor depuis l'indicateur iFractals, sur les barres "rates_total-5" et "rates_total-4" (numérotation des barres à partir de la position de l'indicateur "Fractals.mq5") il y aura une fractale, qui est garantie de ne pas être re-rendu.


Et voici le moment, où la fractale est formée sur la barre "rates_total-5" - au moment, où il y a une nouvelle barre à droite, le 2 janvier, 03:00 (numérotation des fichiers à partir de la position de l'indicateur "Fractals.mq5") :

Fractales, 5 bars

Fig. 2. Le moment où la fractale est formée sur la barre "rates_total-5".

Le deuxième facteur

L'indicateur fractal utilise EMPTY_VALUE au lieu de "0.0" comme valeur vide. L'exception est la première initialisation, lorsque les tampons indicateurs sont initialisés avec zéro (ceci n'est pas fait par l'indicateur "Fractals.mq5", mais par MQL5 lors de la création d'un tableau et de sa liaison avec un tampon indicateur).


 
novichok2018:

La manière de le faire n'est pas claire non plus dans votre recommandation.

Voici une fonction pour trouver une fractale, juste pour un conseiller expert, cela a fonctionné pour moi.

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov:

Tu es sûr que tu dois attraper la deuxième barre ?

Voici les tests :


Oui, merci. Pas de redécoupage sur la troisième barre. Seulement, cela ne change pas l'essence du problème.

 
Igor Makanu:

Voici une fonction pour trouver une fractale, juste pour une EA, elle a fonctionné pour moi.

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

Merci, ça marche.

Je ne comprends pas comment refléter l'apparition d'une nouvelle fractale dans le code. Parce que barfrup_1 est toujours plus petite que barfrup_2, donc le saut de numérotation de barfrup_1 lorsqu'une nouvelle fractale apparaît ne donne rien, car elle reste inférieure à barfrup_2.

Une dernière chose : je ne comprends pas comment extraire les valeurs élevées pour barfrup_1 et barfrup_2.

 
novichok2018:

Une dernière chose : je ne comprends pas comment extraire les valeurs élevées pour barfrup_1 et barfrup_2.

Lancez un indicateur fractal sur le graphique et un EA de test avec cette fonction.

et réinterpréter les valeurs trouvées en passant à ma fonctionMODE_UPPER et MODE_LOWER

novichok2018:

Merci, ça marche.

Seulement, je ne comprends pas comment rendre l'occurrence d'une nouvelle fractale dans le code.

Vous devez vous souvenir de l'heure de la barre ; lorsqu'une nouvelle barre apparaît, la numérotation change, tandis que l'heure d'ouverture de la barre est toujours constante.

Par exemple, lorsque vous avez lancé mon code, rappelez-vous l'heure de la barre où la fractale a été détectée, puis lancez-le à nouveau - trouvez la barre et comparez l'heure de la barre avec celle dont vous vous souvenez - si l'heure est différente, cela signifie qu'il s'agit d'une nouvelle fractale.