[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 582

 
Azerus:

La dernière fonction publiée par Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), ne prend en compte que les ordres ouverts :

J'ai essayé de l'élargir un peu en y incluant les ordres en attente (en ajoutant simplement d'autres types) : mais les ordres en attente ne sont pas pris en compte. Sont-ils comptés différemment ? La documentation ne dit rien à ce sujet.....


Les ordres en suspens n'ont pas de "perte potentielle totale des positions ouvertes dans la devise de dépôt".

La fonction GetPotentialLossInCurrency() renvoie la perte potentielle totale des positions ouvertes dans la devise de dépôt.

Elle fait référence aux positions sur le marché. Appuyez sur F1 sur ces fonctions de marché, relisez attentivement les informations :

tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
              if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
              if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
              pl+=OrderCommission()+OrderSwap();
 
Roman.:


Lesordres en suspens n'ont pas de "perte potentielle totale des positions ouvertes dans la devise de dépôt".

La fonction GetPotentialLossInCurrency() renvoie la perte potentielle totale des positions ouvertes dans la devise de dépôt.

Nous parlons de positions sur le marché. Appuyez sur F1 sur ces fonctions de marché, relisez attentivement les informations :

 

Question aux programmeurs :
sur une nouvelle barre, l'Expert Advisor vérifie si l'ordre sur l'euro est vivant (par exemple), si non - il fait une nouvelle transaction, si oui - il laisse tout comme c'est.
mettre une telle condition :

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!="EURUSD"||Tip>1){continue;}else{// Не наш ордер

      
   RefreshRates();
  double point5 =MarketInfo("EURUSD", MODE_POINT);//Запрос Point
 double bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Bid
 double ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Ask
  double SL5 = NormalizeDouble(bid5+(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5 = NormalizeDouble(bid5-(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS)); 
  double SL5v = NormalizeDouble(bid5-(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5v = NormalizeDouble(bid5+(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));  
 if ((iVolume("EURUSD",Period(),4)) > (iVolume("EURUSD",Period(),1))) { 
 ticket=OrderSend("EURUSD",OP_SELL,lot_EUR,bid5,Slip,0,0);// Открытие Sell
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5,TP5 ,0,CLR_NONE); 
 {Alert (GetLastError());} // Сообщение об ошибке
}else{ticket=OrderSend("EURUSD",OP_BUY,lot_EUR,ask5,Slip,0,0); // Открытие BUY
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE); 
 { Alert (GetLastError());} // Сообщение об ошибке
}}

        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.

Mais le code ne fonctionne pas. Où se trouve l'erreur ?

 
Cruc:

Voici une question pour les programmeurs :
sur une nouvelle barre, le conseiller expert vérifie si l'ordre EUR est vivant (par exemple, s'il ne l'est pas, il ouvre une nouvelle transaction, s'il l'est, il laisse tout en l'état.
J'ai posé une telle condition :

Mais le code ne fonctionne pas. Où se trouve l'erreur ?

Regardez ce qui se passe s'il y a une douzaine de commandes et que la vôtre est la septième (par exemple).

Vérifiez le premier - ce n'est pas le nôtre.

Vérifiez le deuxième, ce n'est pas le nôtre.

...

vérifier le septième - le nôtre

Vérifier le huitième, ce n'est pas le nôtre.

...

 


L'idée est que lorsque vous ouvrez un ensemble d'ordres sur une paire, vous pouvez fermer tous les ordres qui se chevauchent en un seul mouvement.

Modifier/supprimer une commande--->type---->Faire disparaître les commandes superposées

Il supprime les ordres superposés... Existe-t-il une telle fonction dans MQL ?

Oups, je l'ai trouvé : https://forum.mql4.com/ru/4822

 
ilunga:

voir ce qui se passe s'il y a une douzaine de commandes et que la vôtre est la septième (par exemple)

Vérifiez le premier - ce n'est pas le nôtre.

Vérifiez le deuxième, ce n'est pas le nôtre.

...

vérifier le septième - le nôtre

vérifiez le huitième, ce n'est pas le nôtre, établissez la commande

...


Il n'y a qu'un seul ordre ouvert sur cette paire. Je ne vérifie que pour le symbole EURUSD donné, mais je ne dois pas avoir défini la condition correctement.

si(OrderSymbol()!="EURUSD"||Tip>1){continue;}seulement{

nous avons besoin de if(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


Il n'y a qu'un seul ordre ouvert pour cette paire. Je ne vérifie que pour le symbole EURUSD donné, mais j'ai dû me tromper de condition.

si(OrderSymbol()!="EURUSD"||Tip>1){continue;}seulement{

besoin si(OrderSymbol()= Symbol("EURUSD"){

Si vous n'avez qu'un seul symbole dans un conseiller expert, vous pouvez simplement vous souvenir de son ticket et le vérifier à chaque fois, sans passer par toutes les commandes.
 
ilunga:
si vous n'en avez qu'un seul dans votre EA, vous pouvez simplement vous souvenir de son ticket et vérifier chaque fois qu'il est fermé ou non, sans passer par tous les ordres.

Merci beaucoup pour la recommandation, j'ai presque tout compris, mais je ne me souviens pas si l'ordre est déclenché, alors le ticket prend la valeur -10 ?
 
Roman.:


Les ordres en suspens n'ont pas de "perte potentielle totale des positions ouvertes dans la devise de dépôt".

La fonction GetPotentialLossInCurrency() renvoie la perte potentielle totale des positions ouvertes dans la devise de dépôt.

Elle fait référence aux positions sur le marché. Appuyez sur F1 sur ces fonctions de marché, relisez attentivement les informations :


Je comprends très bien que la fonction GetPotentialLossInCurrency() parle des positions ouvertes. J'ai une question : pourquoi les ordres en attente ne peuvent-ils pas être comptabilisés également ?

La documentation :

double OrderOpenPrice(  )

 Возвращает цену открытия для выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

double OrderStopLoss(   )

 Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Il n'est dit nulle part que OrderOpenPrice et/ou OrderStopLoss ne s'appliquent qu'aux ordres ouverts.

 
Cruc:

Merci beaucoup pour la recommandation, j'ai presque trouvé la solution, mais je ne me souviens pas si l'ordre est déclenché, est-ce que le ticket prend une valeur de -10 ?
Le billet reste tel qu'il était