Questions des débutants MQL5 MT5 MetaTrader 5 - page 132

 
uncleVic:

11110000000000000111111b=> 31457535 (décimal)

interdiction du commerce de 00 à 07 heures

heures d'ouverture entre 08h00 et 20h00

interdiction de 21 heures à 23 heures.

Merci.
 

Probablement, c'est une question factice, je ne suis pas encore très familier avec la syntaxe mql5 (ainsi que tout le reste). Une fonction peut-elle retourner plus d'une valeur, un tableau ou une autre structure ?

Quelque chose comme :

int testfunc(int x, int Y)

{

  z = x + y;

  n =  x * y;

  return(z, n);

}

test = testfunc(5,10);

Print(test.x,test.y);

 
Lone_Irbis:

Probablement, c'est une question factice, je ne suis pas encore très familier avec la syntaxe mql5 (ainsi que tout le reste). Une fonction peut-elle retourner plus d'une valeur, un tableau ou une autre structure ?

Non, vous pouvez décrire un tableau de manière globale et modifier ses valeurs dans une fonction.
 
zfs:
Non, le tableau peut être décrit globalement et ses valeurs peuvent être modifiées dans une fonction.
Merci, je vais faire un essai)
 

Le signal est actif dans les abonnements, je mets une coche pour activer l'abonnement dans les paramètres, puis OK, mais ensuite j'ouvre à nouveau les paramètres et pas de coche.

 
Lone_Irbis:

Probablement, c'est une question factice, je ne suis pas encore très familier avec la syntaxe mql5 (ainsi que tout le reste). Une fonction peut-elle retourner plus d'une valeur, un tableau ou une autre structure ?

Quelque chose comme :

Les structuressimples (ne contenant pas d'objets de classe, de chaînes de caractères et de tableaux dynamiques) peuvent être renvoyées par les fonctions.

 

Merci, j'ai réussi à résoudre le problème sans tableaux - en utilisant simplement des variables globales sans aucune valeur prédéfinie (il est toujours facile d'ouvrir une porte, comme toujours).

Cependant, j'ai une nouvelle question, peut-être moins typique : je sais que mql5 possède toutes sortes de fonctions intégrées pour le contrôle du testeur de stratégie. Mais je n'en trouve aucun qui permette de manipuler les résultats d'optimisation de manière préparée au préalable. Supposons que je veuille trouver une valeur moyenne de profit parmi tous les résultats qui ont toutes les valeurs de paramètres sauf Х qui est dans une certaine plage ?

Ou est-il possible de le faire uniquement à la main dans Excel ? Je sais comment le faire dans Excel, le cas échéant. Il y a juste l'idée d'une petite recherche (purement pour moi, par intérêt), pour laquelle je devrais fouiller dans une montagne de tableaux de manière très routinière et identique, et je veux l'automatiser d'une manière ou d'une autre...

 
Lone_Irbis:

Merci, j'ai réussi à résoudre le problème sans tableaux - en utilisant simplement des variables globales sans aucune valeur prédéfinie (il est toujours facile d'ouvrir une porte, comme toujours).

Cependant, j'ai une nouvelle question, peut-être moins typique : je sais que mql5 possède toutes sortes de fonctions intégrées pour le contrôle du testeur de stratégie. Mais je n'en trouve aucun qui permette de manipuler les résultats d'optimisation de manière préparée au préalable. Supposons que je veuille trouver une valeur moyenne de profit parmi tous les résultats qui ont toutes les valeurs de paramètres sauf Х qui est dans une certaine plage ?

Ou est-il possible de le faire uniquement à la main dans Excel ? Je sais comment le faire dans Excel, le cas échéant. Il y a juste une idée de petite recherche (purement pour moi, par intérêt), pour laquelle je devrais fouiller dans une montagne de tableaux de manière très routinière et identique, et je veux automatiser cela d'une manière ou d'une autre...

Lire ici : https://www.mql5.com/ru/docs/optimization_frames


Et ensuite, cherchez sur le forum des exemples d'utilisation.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - Документация по MQL5
 
MetaDriver:

Lisez-le ici : https://www.mql5.com/ru/docs/optimization_frames


Et ensuite, cherchez sur le forum des exemples d'utilisation.

Oui, j'ai déjà rencontré cette situation à plusieurs reprises, et des exemples comme celui-ci. Mais pour une raison quelconque, ça ne semblait pas être exactement ce que je recherchais. Mais peut-être que c'est juste que je ne sais pas encore comment les faire :)

Quoi qu'il en soit, ce n'est pas encore d'actualité tant qu'on ne peut pas faire fonctionner la malheureuse chouette...

La dernière question (du moins je l'espère) pour le futur proche est donc : comment obtenir le prix d'ouverture du dernier ordre d'une position correctement ?

Mes hiboux d'essai n'étaient pas vraiment les miens à l'origine, mais un hibou récemment trouvé par un auteur inconnu. Cette chouette a au départ un bug étrange : elle fonctionne correctement dans le testeur mais n'obtient pas la valeur du prix de la dernière commande dans la démo.

double FindLastPrice(long PositionID, bool IsSell) {

   int  i = 0, Total;
   long Ticket, OldTicket = 0, PosID, Magic, Type;
   double OrderPrice = 0;

   HistorySelect(0, TimeCurrent());
   Total = HistoryOrdersTotal();  

   for (i = 0; i < Total; i++) {
      Ticket = (int)HistoryOrderGetTicket(i);
      PosID  = HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID);
      Magic  = HistoryOrderGetInteger(Ticket, ORDER_MAGIC);
      Type   = HistoryOrderGetInteger(Ticket, ORDER_TYPE);
      

      if (IsSell) {
         if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == ORDER_TYPE_SELL)) {
            if (Ticket > OldTicket) {
                OrderPrice = HistoryOrderGetDouble(Ticket, ORDER_PRICE_OPEN);
                OldTicket = Ticket;
            }
         }
      }

      else {
         if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == ORDER_TYPE_BUY)) {
            if (Ticket > OldTicket) {
                OrderPrice = HistoryOrderGetDouble(Ticket, ORDER_PRICE_OPEN);
                OldTicket = Ticket;
            }
         }
      }
   }

   if(!OrderPrice) {
         Print("Ошибка ",GetLastError());
         Sleep(5000);
   }
   return(OrderPrice);
}

Il génère l'erreur 4753 (ordre non trouvé) et renvoie zéro dans la démo (il renvoie tout comme prévu dans le testeur). Et ce malgré le fait que le test Print suggère qu'il semble atteindre le traitementHistoryOrderGetDouble et a même un ticket qui n'est pas vide...

 

Dites-moi, 50 cotes de 1 $ par semaine ? Qui a 5000 cotes de 100 $ par semaine ?

Raison: