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

 
Koldun Zloy #:

Personne ne peut l'utiliser. Il y a de grosses erreurs dans votre code. Et il ne sert à rien de les corriger.

Vous ne prenez même pas la peine d'apprendre les bases de la langue, et vous essayez d'écrire quelque chose.

Soit vous le prenez au sérieux, soit vous l'abandonnez.

Veuillez expliquer quelles sont ses erreurs. En bref, ce à quoi vous devez faire attention. Et si le code fonctionne, quels sont ses "bugs" ?

 
Ivan Butko #:

Veuillez expliquer quelles sont ses erreurs. Pouvez-vous résumer brièvement ce à quoi il faut faire attention ? Et, si le code fonctionne, quels seraient ses "bugs" ?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь

D'après la documentation... la boîte de réception doit comporter un ticket, et non un index.

bool  OrderSelect( 
   ulong   ticket      // тикет ордера 
   );

S'il existe plusieurs commandes pour des symboles différents et que celui que nous recherchons est le deuxième de la liste, nous ne le trouverons pas. Ou bien il n'y a qu'un seul magik, mais nous devons le trouver par un autre symbole, nous obtiendrons une réponse incorrecte de la fonction...

 
Alexey Viktorov #:

d'après la documentation... la boîte de réception devrait avoir un ticket, pas un index

Merci Alexey pour le conseil ! Très mauvaise influence sur moi du fait d'être assis devant l'ordinateur la nuit. Je pensais avoir commencé avec le ticket de commande hier et avoir déjà écrit une ligne dans le code :

ulong  order_ticket=OrderGetTicket(i); // тикет ордера

et l'a ensuite "quitté".

Alexey, cette variante du code peut-elle être acceptée ?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(order_ticket==0)
         return false; // поэтому возвращаем значение ложь
      else // в противном случае
         return true; // возвращаем значение истина
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
  }

Je n'ai pas encore touché à Magic car le code est destiné à un EA à un seul caractère.

Salutations, Vladimir.

 
MrBrooklin #:

Merci, Alexei, pour le conseil ! Très mauvaise influence sur moi du fait d'être assis devant l'ordinateur la nuit. Je pensais avoir commencé avec le ticket de commande hier et avoir déjà écrit une ligne dans le code :

et l'a ensuite "quitté".

Alexey, cette variante du code peut-elle être acceptée ?

Je n'ai pas encore touché à Magic car le code est destiné à un EA à un seul caractère.

Cordialement, Vladimir.

Cette approche n'est pas acceptable pour moi. Ajoutez un contrôle pour Magik et un symbole, deux lignes de code et vous obtiendrez en retour une approche normale de la résolution d'une tâche. Et si vous ignorez mes principes, le code n'est pas tout à fait correct.

C'est plus logique.

//+------------------------------------------------------------------+
//| Функция  IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенный ордер есть */
      if(order_ticket > 0)
         return true; // поэтому возвращаем истину
     }
      return false; // если нет открытого отложенного ордера…
  }

Et dans ce code, tout ce que vous avez à faire est de remplacer le chèque en blanc

      if(order_ticket > 0)

pour vérifier la présence d'un magicien et d'un personnage

      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == Magic_Number)

et c'est déjà une fonction plus universelle...

 
Alexey Viktorov #:

d'après la documentation... la boîte de réception devrait avoir un ticket, pas un index

Si nous avons plusieurs commandes pour différents symboles et que celui que nous recherchons est le deuxième de la liste, nous ne le trouverons pas. Ou bien il n'y a qu'un seul magik, mais nous devons le trouver par un autre symbole, la réponse sera encore fausse...

Merci

 
Alexey Viktorov #:

Cette approche est inacceptable pour moi. Ajoutez un magicien et une vérification des symboles, deux lignes de code, et en échange une approche normale de la résolution du problème. Et si vous ignorez mes principes, le code n'est pas tout à fait correct.

C'est plus logique.

Et dans ce code, tout ce que vous avez à faire est de remplacer le chèque en blanc

pour vérifier la présence d'un magicien et d'un personnage

et c'est déjà une fonction plus polyvalente...

Bonjour à tous et bonne humeur !

UN GRAND MERCI, Alexey, pour votre approche patiente et votre explication claire de mes erreurs.

Salutations, Vladimir.

 
Ivan Butko #:

Veuillez expliquer quelles sont ses erreurs. Pouvez-vous résumer brièvement ce à quoi il faut faire attention ? Et, si le code fonctionne, quelles sont ses "erreurs" ?

Les erreurs consistent à mal comprendre les choses élémentaires.

Si vous ne les voyez pas vous-même, vous aussi : apprenez, apprenez et apprenez !

 
Koldun Zloy #:

Les erreurs de ne pas comprendre les choses élémentaires.

Si vous ne les voyez pas vous-même, vous aussi : apprenez, apprenez et apprenez !

Stop. Il s'agit d'un fil de discussion avec des questions de débutants. Alors, soit vous répondez aux questions posées dans le fil de discussion, soit vous passez votre chemin sans faire de morale.

Pour quoi vous êtes-vous montré ? Les gens veulent voir des réponses aux questions, pas un joli visage sur une photo.

 
Artyom Trishkin #:

Stop. Il s'agit d'un fil de discussion contenant les questions des nouveaux arrivants. Alors, soit vous répondez aux questions posées dans le fil de discussion, soit vous passez votre chemin sans faire la morale.

Pour quoi vous êtes-vous montré ? Les gens veulent voir des réponses aux questions, pas le bel homme sur la photo.

Je voulais juste savoir si la personne voulait apprendre quelque chose, alors je pourrais l'aider.

 
Koldun Zloy #:

Je voulais juste savoir si la personne voulait apprendre quelque chose, alors je pourrais l'aider.

Bien. La manière même de découvrir ce que l'on veut semblait étrange : "tu ne peux rien faire, tu dois apprendre et apprendre".

Mais, ainsi soit-il...

Raison: