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

 
makssub #:
Bonjour. Veuillez indiquer comment trouver le prix d'ouverture de l'ordre le plus proche du prix actuel. MQL4. Avez-vous des exemples ?

Nous passons en revue toutes les positions ouvertes et comparons le nombre de pips entre le prix actuel et l'ouverture d'une transaction.

Vous pouvez prendre n'importe quel exemple, juste au-dessus il y a un code - recherche de commandes dans une boucle.

 
MakarFX #:

Qu'est-ce que OrdersClose ?

Voir ici.

Je l'ai, merci.

 
PapaYozh #:


Il n'y a pas besoin de fantasmer. L'essentiel de ce qui se passe est que vous appelez une méthode, qui est un constructeur avec un ensemble différent de paramètres. Aucun objet n'est créé dans ce cas.

Vous devez comprendre la différence entre un appel de constructeur et un appel de méthode/fonction.

PapaYozh #:

Un appel similaire au constructeur qui n'aboutira pas non plus au résultat souhaité :

Pour les besoins de l'argumentation, ajoutez un pointeur à la signature d'une méthode (constructeur ? qui est appelé comme une méthode ?) en passant un pointeur par référence

 
Taras Slobodyanik #:

Nous passons en revue toutes les positions ouvertes et comparons le nombre de pips entre le prix actuel et l'ouverture d'une transaction.

Vous pouvez prendre n'importe quel exemple, juste au-dessus il y a un code - recherche de commandes dans une boucle.

Désolé, je ne l'ai pas encore écrit correctement. Je vais réessayer)

Il existe une grille d'ordres ouverts. Je dois trouver le prix d'ouverture (OrderOpenPrice) de l'ordre le plus proche du prix actuel. Afin de continuer à construire la grille, mais mes commandes sont construites de façon presque chaotique.

Je comprends comment écrire le dépassement, mais je suis incapable de l'exprimer correctement dans la langue (je suis comme un chien, je comprends tout)).

Si vous avez des exemples ou des liens vers des exemples, publiez-les, s'il vous plaît. MQL4

 
Igor Makanu #:

Vous devez comprendre la différence entre un appel de constructeur et un appel de méthode/fonction.

Note sur le sujet : dans la signature d'une méthode (constructeur ? qui est appelé comme une méthode ?) ajouter le passage d'un pointeur par référence.

En Java, c'est bon.

Vous pouvez également appeler le constructeur parent à partir du constructeur enfant, la seule condition étant que le constructeur parent soit appelé par la première commande du constructeur enfant.

En MQL, le problème est que, s'il n'y a pas de constructeur vide pour le parent, le constructeur du parent est implicitement appelé lorsque l'enfant est créé.

--

PS.

Et si le parent a un constructeur sans paramètres et un constructeur avec paramètres, lequel est appelé implicitement par le constructeur descendant avec paramètres ?

 
Igor Makanu #:


pour le sujet - dans la signature de la méthode (constructeur ? qui est appelé comme une méthode ?) ajouter passer un pointeur par référence


Ça ressemble à une béquille.

N'est-ce pas ?

 

Bonjour à tous. C'est peut-être une question stupide, mais je n'ai pas encore trouvé de solution.

J'ai créé un indicateur. Il a des boutons sur le graphique et lorsque j'appuie dessus, la ligne est dessinée et le bouton devient actif.

Comment faire en sorte que l'activité et l'emplacement du bouton restent actifs, lorsque je change d'horizon temporel ?

Lors de la commutation du TF, la fonction Deinit fonctionne, et elle a la suppression de tous les objets. C'est une sorte de prérequis, pour tout effacer du tableau.

J'ai essayé de stocker l'état du bouton dans une variable, mais comme je l'ai remarqué dans les indicateurs, ils sont remis à zéro si nous changeons le TF.

Ce n'est pas comme ça dans EA, la valeur des variables internes n'y est pas mise à zéro. Il s'avère que si l'indicateur a calculé certaines valeurs et les a sauvegardées dans des variables internes, elles seront remises à zéro à l'interrupteur TF. Pourquoi et comment l'éviter.

 
makssub #:

Désolé, je l'ai encore mal écrit. Laissez-moi essayer à nouveau)

Il existe une grille d'ordres ouverts. Je dois trouver le prix d'ouverture (OrderOpenPrice) de l'ordre le plus proche du prix actuel. Afin de continuer à construire la grille, mais mes commandes sont construites de façon presque chaotique.

Je comprends comment écrire le dépassement, mais je suis incapable de l'exprimer correctement dans la langue (je suis comme un chien, je comprends tout)).

Si vous avez des exemples ou des liens vers des exemples, publiez-les, s'il vous plaît. MQL4

D'abord la différence est égale à 1000 avant le cycle. Dans la boucle, si le prix d'ouverture moins le prix actuel est modulo inférieur à la différence, alors la différence est égale à la valeur obtenue et le ticket est stocké dans une variable.
 
Igor Makanu #:

Vous devez connaître la différence entre un appel de constructeur et un appel de méthode/fonction.


Au fait, quelle est la différence, hormis le fait qu'elle est appelée implicitement lors de la création de l'objet ?

 
void ClosseAll()
{
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderType() == OP_BUY)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Bid, slip))
             Print("Не удалось закрыть ордера на покупку!");
         }
       if (OrderType() == OP_SELL)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Ask, slip))
             Print("Не удалось закрыть ордер на продажу!");
         }
     }
  }
}

Bonne journée ! !!

Veuillez m'aider à écrire un code pour fermer les ordres min et max dans un EA de grille lorsqu'un certain niveau de drawdown est atteint.

J'ai écrit deux fonctions pour calculer le profit des ordres max et min.

//+----------------------------------------------------------------------------+
//| Расчет профита максимального ордера в сетке                                |
//+----------------------------------------------------------------------------+
double GetProfitMaxOrder()
{
  int max_ticket = 0;
  double max_ticket_profit = 0 ;
  {
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
    {
    if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
     {
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
       {
        if(OrderType() == OP_BUY || OrderType() == OP_SELL)
        {
          if(OrderTicket() > max_ticket) max_ticket = ticket;
          {
           max_ticket_profit =  OrderProfit();
          }
        }
       }
     }
    }
  }
  return( max_ticket_profit);
}
//+----------------------------------------------------------------------------+
//| Расчет профита минимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
double GetProfitMinOrder()
{
  int min_ticket=INT_MAX;
  double min_ticket_profit = 0;
  {
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
    {
     if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
     {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
           {
            if(OrderTicket() < min_ticket)
              min_ticket = OrderTicket();
              {
               min_ticket_profit = OrderProfit(); 
              }
           }
        }
      }
    }
  }
  return(min_ticket_profit);
}

J'ai également écrit une fonction qui calcule le montant de ces commandes. Il ne semble pas y avoir de problème ici.

La question est de savoir comment fermer uniquement ces deux ordres. J'ai trouvé la fonction ClosseAll().

La question est de savoir comment modifier la fonction OrderTicket() qui ferme tous les ordres.

pour attacher les variables max_ticket et min_ticket qui déterminent les tickets de seulement les commandes min et max dans la grille

Ou est-ce que VOUS avez VOTRE solution à cette question