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

 
Vyacheslav Kornev:

Merci pour l'aide, mais dans le trading réel, la façon de prendre le prix ne fait aucune différence... Après tout, vous devez placer à la fois l'indicateur et l'EA sur le graphique ?

Dans le trading réel, vous serez en mesure d'obtenir les données. Tant que vous ne supprimez pas accidentellement les lignes d'indicateurs...

 
Artyom Trishkin:

Avec un vrai, vous serez en mesure de recevoir des données. Si vous n'enlevez pas accidentellement les lignes indicatrices...


Alors, j'ai une autre question. J'ai un super EA. Mais il doit faire ceci : lorsqu'il franchit une ligne, un ordre supplémentaire est ouvert dans cette direction, puis il se ferme sur le bénéfice... Comment faire en sorte qu'après avoir clôturé sur le profit, l'ordre supplémentaire ne soit pas ouvert à nouveau, jusqu'à ce que la ligne de l'indicateur soit mise à jour ?

//==================Préparation d'une commande supplémentaire ============
double Lots2 ;
if((PriceHigh>PriceLow && Ask>PriceHigh && LBUY<LSELL)|| (PriceLow>PriceHigh && Ask>PriceLow && LBUY<LSELL) )
 

Bonjour, j'ai besoin d'un peu d'aide avec le code qui.. :

ouvre BUY si le fichier 11112222.txt contient 1 ;

ouvre VENDRE si le fichier 11112222.txt contient -1 ;

ferme tous les ordres si le fichier 11112222.txt contient 0 ;


Étant donné le fichier 11112222.txt, il ne peut y avoir que trois entrées : 1, -1 ou 0.


Je ne comprends pas ce qui ne va pas avec ce code ; pour une raison quelconque, si je vois 0 dans le fichier 11112222.txt, il ouvre l'ordre BUY, au lieu du code d'ordre fermé, je ne sais pas ce qui ne va pas.

Ay, il y a aussi un problème, lorsque l'EA est en cours d'exécution, il est presque toujours impossible d'ouvrir le fichier 11112222.txt, il dit que le fichier est occupé par une autre application, donc pour résoudre ce problème je mets FileClose(handle2) ; // Fermer le fichier texte ; mais cela n'aide pas et j'ai besoin que l'EA vérifie le fichier 11112222.txt pour 1, -1 ou 0 après qu'il ait été ouvert et ensuite le ferme, parce que le fichier est périodiquement utilisé par un autre programme pour mettre 1, -1 ou 0.

//=================================BUY=========================================
    int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
  if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
   {
    
       Print(FileReadString(handle2));
       FileClose(handle2); // закрытие текстового файла

                    //ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ      
                    if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
                     {
                        OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
                        FileClose(handle2); // закрытие текстового файла
                     }
                    else
                      Print("NE USPESHNO!!!");
                      FileClose(handle2); // закрытие текстового файла

   }
//=================================конец кода BUY=========================================
      
      
      
      
      
      
      
      
//=================================SELL=========================================
    int handle3 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
  if(handle3<0)//если в текстовом файле меньше 0, то есть -1, то открывать SELL
   {
    
       Print(FileReadString(handle3));
       FileClose(handle3); // закрытие текстового файла

                    if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на продажу
                        {
                           OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
                           FileClose(handle3); // закрытие текстового файла
                        }
                       else
                       Print("NE USPESHNO!!!");
                       FileClose(handle3); // закрытие текстового файла

   }
//=================================конец кода SELL=========================================
      
      
      
      
      
//=================================ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================
    int handle4 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
  if(handle4=0)//если в текстовом файле равно 0, то закрыть все ордера
   {
      
       Print(FileReadString(handle4));
       FileClose(handle4); // закрытие текстового файла
//-----------------код закрывает все ордера--------------------
   bool   result;
   int    error;

 while (OrdersTotal()>0)
 {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {   if(OrderType()==OP_BUY)  result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
           OrderDelete(OrderTicket());
          
           if(result!=TRUE) { error=GetLastError();
              Print("LastError = ",error, " ",Symbol()); }
           else error=0; }
   else Print( "Error when order select ", GetLastError());
         
         FileClose(handle4); // закрытие текстового файла
  }
//------------конец кода закрывающего ордера------------------
 

         FileClose(handle4); // закрытие текстового файла
      
      
   }
//=================================конец кода ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================


 
Санек:

Bonjour, j'ai besoin d'un peu d'aide avec le code qui.. :

ouvre BUY si le fichier 11112222.txt contient 1 ;

ouvre VENDRE si le fichier 11112222.txt contient -1 ;

ferme tous les ordres si le fichier 11112222.txt contient 0 ;


Le fichier 11112222.txt est donné et il ne peut avoir que trois entrées : 1, -1 ou 0.


Pour une raison quelconque, lorsque 0 est dans le fichier 11112222.txt, il ouvre un ordre BUY, alors qu'un code d'ordre de fermeture devrait être déclenché ; je ne comprends pas quelle est l'erreur.

Donc, il y a aussi un problème, lorsque l'EA est en cours d'exécution, il est presque toujours impossible d'ouvrir 11112222.txt, parce qu'il dit que le fichier est occupé par une autre application. Pour résoudre ce problème, je mets FileClose(handle2) ; // Fermer le fichier texte ; mais cela ne fonctionne pas et j'ai besoin que l'EA vérifie le fichier 11112222.txt pour 1, -1 ou 0, puis le ferme, parce qu'à chaque seconde un autre programme utilise ce fichier pour y mettre 1, -1 ou 0.

Parce que l'identifiant du fichier n'est pas le contenu du fichier.

Vous devez d'abord lire le contenu du fichier, et seulement ensuite définir la condition. C'est l'inverse, vous avez une condition par handle, puis vous lisez le fichier et le fermez.

 
Alexey Viktorov:

Parce que l'identifiant du fichier n'est pas le contenu du fichier.

Vous devez d'abord lire le contenu du fichier, et seulement ensuite poser la condition. Dans votre cas, c'est l'inverse, condition par handle, puis lecture du fichier et fermeture.

1) - Cette partie ouvre le fichier 11112222.txt pour y lire des données :

//=================================BUY=========================================
    int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения

2) - Ensuite vient la condition si handle2>0


  if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
   {

3) - C'est la partie que je ne comprends pas :


       Print(FileReadString(handle2));

4) - Cette partie ferme le dossier :


       FileClose(handle2); // закрытие текстового файла

5) - Comme la condition handle2>0 est remplie, c'est-à-dire que le fichier 11112222.txt contient 1, il ouvre un ordre d'achat:

  //ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ      
                    if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
                     {
                        OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
                        FileClose(handle2); // закрытие текстового файла
                     }
                    else
                      Print("NE USPESHNO!!!");
                      FileClose(handle2); // закрытие текстового файла

   }
//=================================конец кода BUY=========================================

Quelles parties ai-je mélangées ?
 

Salutations, j'essaie d'écrire un script pour fermer les ordres.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{  
   bool reasult;
   for (int i = OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS)>0)
      {
         if (OrderSymbol() != Symbol())
            continue;
         
         switch (OrderType())
         {
            case OP_BUY  :
               reasult = OrderClose(OrderTicket(), OrderLots(), Bid, 50, Red);
               if (!reasult) Print ("Ошибка закрытия ордера на покупку", GetLastError());
               break;
            case OP_SELL :
               reasult = OrderClose(OrderTicket(), OrderLots(), Ask, 50, Blue);
               if (!reasult) Print ("Ошибка закрытия ордера на продажу", GetLastError());
               break;
         }   
         
      }
   }
}

Si j'ouvre plusieurs ordres de vente et d'achat en alternance et que j'essaie de les fermer avec cet ordre, seuls quelques-uns sont fermés, les autres obtiennent l'erreur 129 (prix incorrect).

J'ai essayé de faire un script qui par exemple fait 10 tentatives * sur le nombre d'ordres, avec pause en cas d'erreur.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{ 
   int c=CountTrades()*10;
   
   for ( int a=1 ; a<=c; a++)
   {
   if (CountTrades()==0) { Print ("Orders are successfully closed! Break."); break;}
    Print("Try ", a, " out of ", c);
      
      bool reasult;
      for (int i = OrdersTotal()-1; i >= 0; i--)
      {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if (OrderSymbol() == Symbol()) 
            
            {      
            
            if (OrderType() == OP_BUY)  {
                  reasult = OrderClose(OrderTicket(), OrderLots(), Bid, 50, Red);
                  if (!reasult) {Print ("ERROR ", GetLastError());} 
                  }
            if (OrderType() == OP_SELL)  {
                  reasult = OrderClose(OrderTicket(), OrderLots(), Ask, 50, Blue);
                  if (!reasult) {Print ("ERROR ", GetLastError());}  
                  }              
            }   
            
         }
      }Sleep(1000);
   }   
}
//+------------------------------------------------------------------+
int CountTrades()
{
    int count=0;
    for (int i=OrdersTotal()-1; i>=0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol() == Symbol())
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 count++;
        }
    }
    
    return(count);
}

Il s'acquitte généralement de sa tâche après un certain nombre de tentatives, au terme desquelles la même erreur 129 est émise. Mais alors qu'il essaie, avec de nombreuses tentatives, de fermer les ordres qui peuvent être fermés manuellement, et que cela ne provoque pas d'erreurs, ils se ferment.

Qu'est-ce que je fais de mal ?

 
Andrey Sokolov:

Salutations, j'essaie d'écrire un script pour fermer les ordres.

Si j'ouvre plusieurs ordres de vente et d'achat en alternance et que j'essaie de les fermer avec cet ordre, seuls quelques-uns sont fermés, les autres obtiennent l'erreur 129 (prix incorrect).

J'ai essayé de faire un script qui par exemple fait 10 tentatives * sur le nombre d'ordres, avec pause en cas d'erreur.

Il s'acquitte généralement de sa tâche après un certain nombre de tentatives, au terme desquelles la même erreur 129 est émise. Mais alors qu'il essaie, avec de nombreuses tentatives, de fermer les ordres qui peuvent être fermés manuellement, et que cela ne provoque pas d'erreurs, ils se ferment.

Qu'est-ce que je fais de mal ?

            RefreshRates(); // Попробуйте добавить
            if (OrderType() == OP_BUY)  {
                  reasult = OrderClose(OrderTicket(), OrderLots(), Bid, 50, Red);
                  if (!reasult) {Print ("ERROR ", GetLastError());} 
                  }
            if (OrderType() == OP_SELL)  {
                  reasult = OrderClose(OrderTicket(), OrderLots(), Ask, 50, Blue);
                  if (!reasult) {Print ("ERROR ", GetLastError());}  
                  }  

En général, ce que vous écrivez n'est pas autorisé à négocier sur un compte réel, c'est seulement pour un testeur.

 
Vitaly Muzichenko:

En général, ce que vous écrivez ne doit pas être autorisé à trader sur un compte réel, c'est seulement pour le testeur.

            RefreshRates(); // Попробуйте добавить

Ça aide, merci.

 
Vitaly Muzichenko:

En général, ce que vous écrivez n'est pas autorisé à être négocié sur un compte réel, c'est seulement pour un testeur.


Pouvez-vous préciser pourquoi "pas autorisé à faire du commerce..." ?

 
Andrey Sokolov:

Pouvez-vous préciser pourquoi "pas autorisé à faire du commerce" ?

Il n'y a pas de vérification des erreurs, et si le serveur se ferme et génère une erreur critique, le conseiller expert continuera quand même à pilonner le serveur, et cela sent l'interdiction de continuer à faire du trading automatique.

Raison: