Questions des débutants MQL4 MT4 MetaTrader 4 - page 29

 
yaaarik777:

Bonjour à tous ! Pouvez-vous m'indiquer comment définir la suppression d'un ordre dans un EA ?

La situation est la suivante :

Nous plaçons 2ordres en attente dans des directions différentes, dès que l'un d'eux se déclenche, l'autre est supprimé et n'est plus exposé.

Je vous serais très reconnaissant de toute aide.

Merci.

Par exemple :

//-------------------------------------------------------------------+
//   удаляет отложенные ордера по type                               +
//+------------------------------------------------------------------+

void DeleteOrders(int type)
{
  int cnt = OrdersTotal();
  for (int i=cnt-1; i>=0; i--) {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
        //По желанию
        if (OrderSymbol() != Symbol()) continue;
        //По желанию
        if (OrderMagicNumber() != mn) continue;
        
        if (OrderType() != type) continue;
        
        if (type == OP_BUYSTOP || type == OP_SELLSTOP)
            {
            bool Del_1 = OrderDelete(OrderTicket());
               if(!Del_1)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
        if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
            {
            bool Del_2 = OrderDelete(OrderTicket());  
               if(!Del_2)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
  }
}
//+------------------------------------------------------------------+
 

Et avant cela, déterminer qu'il y a une position et qu'il est temps de tuer l'ordre supplémentaire.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Удаление ордеров, противоположных позиции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
  bool eb, es;

  switch (op) {
    case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
    default:      eb=ExistPositions(sy, OP_BUY , mn);
                  es=ExistPositions(sy, OP_SELL, mn); break;
  }

  if (eb) {
    DeleteOrders(sy, OP_SELLLIMIT, mn);
    DeleteOrders(sy, OP_SELLSTOP , mn);
  }
  if (es) {
    DeleteOrders(sy, OP_BUYLIMIT, mn);
    DeleteOrders(sy, OP_BUYSTOP , mn);
  }
}
 
Vladimir Zubov:

Pour vous donner un exemple :

//-------------------------------------------------------------------+
//   удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type     +
//+------------------------------------------------------------------+

void DeleteOrders(int type)
{
  int cnt = OrdersTotal();
  for (int i=cnt-1; i>=0; i--) {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
        //По желанию
        if (OrderSymbol() != Symbol()) continue;
        //По желанию
        if (OrderMagicNumber() != mn) continue;
        
        if (OrderType() != type) continue;
        
        if (type == OP_BUYSTOP || type == OP_SELLSTOP)
            {
            bool Del_1 = OrderDelete(OrderTicket());
               if(!Del_1)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
        if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
            {
            bool Del_2 = OrderDelete(OrderTicket());  
               if(!Del_2)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
  }
}
//+------------------------------------------------------------------+

Quelle est la ségrégation par type ? Que fait-il ? Cela ferait-il une différence si c'était écrit de cette façon ?

if (type > 1 && type < 6)
   {
     bool Del_1 = OrderDelete(OrderTicket());
     if(!Del_1)
     Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
     else
     Print("Ордер успешно удален.");
   }
 
Pourquoi les barres sont-elles différentes dans mt4 et mt5 sur mon iPhone ? Bien que les heures d'ouverture et de fermeture des bars soient les mêmes. Il s'agit clairement d'un obstacle, car la ligne n'a pas été cassée hier à 14h00 sur MT4.
Dossiers :
image.png  82 kb
image.png  81 kb
 
Bonjour ! Pourriez-vous me dire, j'ai téléchargé la version mt4 636 sur android, mais il ne voit pas la liste des brokers. La version terminale n'est plus supportée ?(( Si oui, où puis-je en télécharger une qui fonctionne ?
 
MetaGSss:
Pourquoi les barres sont-elles différentes dans mt4 et mt5 sur mon iPhone ? Bien que les heures d'ouverture et de fermeture des bars soient les mêmes. Il vous empêche évidemment de franchir la ligne hier à 14h00 sur MT4.
Ils veulent que vous sachiez à l'avance où le prix va aller.
 
MetaGSss:
Pourquoi les barres sont-elles différentes dans mt4 et mt5 sur mon iPhone ? Bien que les heures d'ouverture et de fermeture des bars soient les mêmes. C'est clairement un obstacle, car hier sur mt4 la ligne n'a pas cassé à 14:00.
le spread est pour les personnes extrêmes bien sûr))))
 
MetaGSss:
Pourquoi les barres sont-elles différentes dans mt4 et mt5 sur mon iPhone ? Bien que les heures d'ouverture et de fermeture des bars soient les mêmes. Il y a manifestement une interférence car la ligne n'a pas été cassée hier à 14h00 sur MT4.
les symboles sont également légèrement différents)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

string payment // nom du fichier

)

; ...

Ou est-il également converti d'une manière ou d'une autre ?

Déclarez

bool PlaySound( dans l'en-tête du programme - vous aurez la possibilité d'activer et de désactiver le son dans le fichier défini extern bool Play = TRUE ;

en outre, que va imprimer Print ? Et à quelle condition ?

Quel est le but de cette action ? Jouer un son à la fermeture de l'ordre et écrire le commentaire (sur le TP ou le SL) ?






MerciA1exPit pour cette réponse détaillée et claire ... "Le but de l'action" est de sonner les événements de "fermeture des ordres à Takeprofit et Staploss" = un son différent pour chaque ...
 

Salutations. Je me suis renseigné, mais je n'ai pas encore trouvé de réponse. Pouvez-vous me dire pourquoi avec l'entrée suivante

if (x!=maxpr1){x=maxpr1 ; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1 ; OrderDelete(ticketUP);}

Le système génère constamment des erreurs

: ticket invalide pour la fonction OrderDeletefunction

: Erreur de suppression de commande 4051

Selon le livre de référence, c'est

Valeur invalide du paramètre de fonction

Bien que les paramètres semblent être les mêmes.

Bien que si vous supprimez la condition et laissez seulement

CommandeSuppression(ticketD) ;

CommandeDelete(ticketUP) ;

il supprime avec succès (mais j'en ai besoin par condition). Qu'est-ce que je fais de mal ? Voici le tout :

https://www.mql5.com/ru/forum/160683/page31#comment_3911573

Le conseiller expert lit les valeurs min et max des X dernières barres et place des ordres en fonction de ces valeurs. Ensuite, si le maximum ou le minimum a diminué, nous devons supprimer l'ordre correspondant et l'ouvrir en utilisant les nouvelles données.

Je viens de commencer à l'étudier et le supprimer plutôt que le modifier a été fait pour étudier la fonction et je me suis demandé pourquoi cela ne fonctionnait pas.