Apprendre et écrire ensemble en MQL5 - page 34

 
Yedelkin:

Un simple script comme celui-ci me donne des résultats étranges

Peut-être que quelqu'un peut expliquer la raison ? Lorsque le nombre 254 est explicitement converti en uchar, cela fonctionne comme prévu.

Merci pour le message, nous allons examiner la question.
 
Rosh:
Merci pour le message, nous allons régler le problème.

Même histoire avec ushort :

void OnStart()
  {
   for(ushort i=32760;i<32775;i++)
     {
      switch(i>USHORT_MAX-2)
        {
         case   true:  Print(__FILE__," ",__FUNCTION__,": ",i,">(USHORT_MAX-2) - true");   break;
         case  false:  Print(__FILE__," ",__FUNCTION__,": ",i,">(USHORT_MAX-2) - false");  break;
        }
     }
  }
 

Comment faire en sorte que lorsqu'une condition se produit, la musique s'allume ? Heh-heh, c'est une application un peu étrange de mql)) Mais regarder l'image en attendant le bon moment est ennuyeux, et laisser tout le travail au robot n'est pas très judicieux. J'ai donc décidé de laisser la musique jouer quand je le veux, et ensuite je le ferai moi-même ;))

J'ai regardé dans le livre de référence, ou peut-être que je cherchais trop fort ou quelque chose, mais je ne l'ai pas trouvé).

 
Vérifiez la fonction PlaySound()
 
Rosh:
Vérifiez la fonction PlaySound()

Merci beaucoup.)
 

Question sur le suivi des requêtes.

La description de la fonction OrderSend() indique que "Lors du passage d'un ordre au marché, la réussite de la méthode OrderSend() ne signifie pas toujours l'exécution réussie de la transaction. Vous devez vérifier le ... la valeur du retcode". C'est-à-dire qu'on peut en déduire que si OrderSend()==true, on peut toujours obtenir une requote. Ok.

Mais dans l'exemple ("Envoi d'une demande de transaction avec traitement du résultat") à la section"Structure du résultat de la demande de transaction", le message concernant une requote n'est vérifié que si OrderSend() ==false.

Dans quels cas vérifions-nous les requêtes : à toute valeur renvoyée par OrderSend(), ou seulement si OrderSend() ==false ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - Документация по MQL5
 
Yedelkin:

Question sur le suivi des requêtes.

La description de la fonction OrderSend() indique que "lors du passage d'un ordre au marché, la réussite de la méthode OrderSend() ne signifie pas toujours que la transaction est réussie.

L'exécution réussie de la commande OrderSend() signifie uniquement que la demande est vérifiée et placée dans la file d'attente pour être exécutée. Mais son sort ultérieur n'est pas garanti - la commande peut être annulée pendant son traitement, par exemple en raison d'une politique de remplissage.

Mais en général, s'il y a eu une requote, OrderSend() a clairement échoué.

 
Rosh:

L'exécution réussie de OrderSend() signifie seulement que l'exactitude de la demande a été vérifiée et que celle-ci a été mise en file d'attente pour être exécutée. Mais son sort ultérieur n'est pas garanti - la commande peut être annulée pendant son traitement, par exemple, en raison de la politique de remplissage.

Mais en général, s'il y a eu une requote, OrderSend() a clairement échoué.

En d'autres termes, une requote signifie que la demande initiale n'a pas passé le contrôle d'exactitude ?
 
Yedelkin:
En d'autres termes, une requote signifie que la demande initiale n'a pas passé le contrôle d'exactitude ?

Eh bien, oui, le prix indiqué dans la requête ne correspondait pas et vous êtes invité à prendre en compte les nouveaux prix qui peuvent être obtenus à partir de la structure de réponse du serveur MqlTradeResult:

struct MqlTradeResult
  {
   uint     retcode;          // Код результата операции
   ulong    deal;             // Тикет сделки, если она совершена
   ulong    order;            // Тикет ордера, если он выставлен
   double   volume;           // Объем сделки, подтверждённый брокером
   double   price;            // Цена в сделке, подтверждённая брокером
   double   bid;              // Текущая рыночная цена предложения (цены реквота)
   double   ask;              // Текущая рыночная цена спроса (цены реквота)
   string   comment;          // Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
  };

 
Rosh:

Eh bien oui, le prix indiqué dans la requête ne correspondait pas et il vous est demandé de prendre en compte les nouveaux prix, qui peuvent être obtenus à partir de la structure de réponse du serveur MqlTradeResult:

OK !

J'en fais probablement un peu trop, mais voici une autre question. Avant d'envoyer une requête pour placer un ordre au marché (pour ouvrir une position), je remets le ticket de transaction à zéro, c'est-à-dire que je fais en sorte que result.deal=0. Peut-on s'attendre à ce que le serveur renvoie un ticket de transaction nul dans la structure de réponse MqlTradeResult, mais qu'un peu plus tard, la transaction soit exécutée et que la position soit ouverte ? Ou bien le retour d'un ticket de transaction nul par le serveur garantit-il que la position n'a pas pu être ouverte et qu'elle ne sera plus ouverte sur la base de cette demande ?