Questions des débutants MQL4 MT4 MetaTrader 4 - page 195

 
Artyom Trishkin:

Trouvez le point où le prix traverse la MA vers le haut. Ce sera le début de la plage de recherche.

Trouvez le point où le prix a traversé la MA vers le bas. Ce serait la gamme d'arrêt.

Prenez iHighest() uniquement dans cette plage.

Et comment implémenter une recherche de points MA, pour qu'elle ne recherche que 2 points extrêmes et non à l'infini. En mots je le comprends aussi, mais si ce n'est pas difficile comment l'implémenter en code.
 
GlaVredFX:
Et comment implémenter la recherche des points MA, pour que seulement 2 points extrêmes soient recherchés et non à l'infini. Je comprends aussi, mais si ce n'est pas difficile comment l'implémenter dans le code.

Un moyen : créer une variable au niveau du programme global de l'EA (déclarer une variable dans l'en-tête de l'EA) - dans cette variable, écrivez l'heure d'ouverture de la barre à laquelle le dernier croisement a été effectué. Cela permettra d'utiliser la troisième forme d'appel deCopyBuffer:

La référence des dates de début et de fin de l'intervalle de temps requis.

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

Ici, start_time est simplement l'heure de notre variable, et stop_time est l'heure de la dernière citation connue du serveur.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
Et comment implémenter la recherche des points de la MA, pour qu'elle ne cherche que 2 points extérieurs, et non à l'infini. En mots, je comprends aussi, mais si ce n'est pas difficile comment l'implémenter dans le code.

Vous devez parcourir la boucle jusqu'à ce que vous trouviez un moyen de vous éloigner de la MA.

Un point, cette section mise en évidence par le rectangle jaune, interrompra la boucle avant qu'elle n'atteigne le deuxième croisement prix-MA. Le maximum sera trouvé au premier croisement à droite.


P.S. Quelle est la différence entre les deux zones mises en évidence ?

 
Vitaly Muzichenko:

P.S. Quelle est la différence entre les deux zones mises en évidence ?

Ils peuvent être différents, c'est-à-dire que le premier point peut être supérieur ou inférieur au second.

Ce n'est qu'un exemple. Mais cela ne signifie pas qu'ils seront toujours identiques.



Qui peut donner des exemples de code avec des conditions similaires.. :

Valeur actuelle de MA> 0 bar.
Recherche du numéro de barre, Prix<MA, trouvé numéro de barre 1, écrire valeur dans tampon 2
Recherche duprochain numéro Prix>MA a trouvé la barre numéro 2, écrire la valeur dans le tampon 1.
Arrêtez la recherche.
Ensuite, entre les valeurs des tampons 1 et 2, recherchez le prix le plus bas Low.
Si la valeur MA actuelle < 0 bar
Recherche du nombre de barre, Price>MA, trouve le nombre de 1 barre, écrit la valeur dans le tampon 2.
Recherche duprochain numéro Price<MA a trouvé la barre numéro 2, écrit la valeur dans le buffer 1.
Arrêtez la recherche.
Ensuite, entre les valeurs des tampons 1 et 2, nous recherchons le prix le plus élevé High.

 
GlaVredFX:

Ils peuvent être différents - le premier point peut être supérieur ou inférieur au second.

C'est juste un exemple. Mais cela ne signifie pas qu'ils seront toujours les mêmes.



Qui peut donner des exemples de code avec des conditions similaires.. :

La valeur actuelle MA> 0 bar
Nous recherchons la barre numéro Price<MA, nous avons trouvé la barre numéro 1 et nous écrivons la valeur dans le tampon 2.
Recherche duprochain numéro Prix>MA a trouvé la barre numéro 2, écrire la valeur dans le tampon 1.
Arrêtez la recherche.
Ensuite, entre les valeurs des tampons 1 et 2, recherchez le prix le plus bas Low.
Si la valeur MA actuelle < 0 bar
Recherche du nombre de barre, Price>MA, trouve le nombre de 1 barre, écrit la valeur dans le tampon 2.
Recherche duprochain numéro Price<MA a trouvé la barre numéro 2, écrit la valeur dans le tampon 1.
Arrêtez la recherche.
Ensuite, entre les valeurs du tampon 1 et 2, nous recherchons le prix le plus élevé High.

Si nous suivons l'image, nous devons démarrer une boucle et chercher jusqu'à ce que la condition MA<Value soit trouvée.

Une fois qu'il est trouvé, nous remplissons le tableau avec les prix élevés. Nous exécutons le cycle jusqu'à ce que la condition MA>Prix soit trouvée, dès que nous trouvons cette place - nous brisons le cycle.

Et dans le tableau, nous recherchons les prix les plus élevés.

 
Vitaly Muzichenko:

Si vous suivez l'image, vous devriez exécuter une boucle et chercher jusqu'à ce que la condition MA<Value soit trouvée.

Une fois qu'il est trouvé, nous remplissons le tableau avec les prix élevés. Nous exécutons le cycle jusqu'à ce que la condition MA>Prix soit trouvée, dès que nous trouvons cette place - nous brisons le cycle.

Ensuite, nous recherchons les prix les plus élevés dans le tableau.

Vous avez raison et je l'ai aussi écrit de la même façon, mais comment l'implémenter dans le code, vous pouvez au moins nous donner un exemple de code de ceci :


lancer une boucle et effectuer une recherche jusqu'à ce que la condition MA<Price soit trouvée.

Dès que cette condition est trouvée,nous remplissons le tableau avec des prix élevés.

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

C'est exact et c'est comme ça que je l'ai écrit, mais comment l'implémenter dans le code ? Pouvez-vous au moins donner un exemple de code de ceci ?


exécuter une boucle et effectuer une recherche jusqu'à ce que la condition MA<Prix soit trouvée.

Dès que cette condition est trouvée,nous remplissons le tableau avec des prix élevés.

Je ne peux pas écrire le code maintenant, peut-être que quelqu'un d'autre l'écrira, c'est simple

 

C'est ce dont nous avons besoin, quelqu'un peut-il nous aider avec ce code.

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

Puis trouver la prochaine valeur où iLow>ma et retourner le numéro de barre No_2 .
Arrêtez la recherche et utilisez la fonction iHighest pour trouver le sommet entre ces barres
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

Ce n'est pas un code MQL5.

 
Vladimir Karputov:

Ce n'est pas un code MQL5.

Il s'agit d'une mise en page, il n'y a pas de différence entre 4 et 5.

:)
Raison: