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

 
Igor Petrov:

Merci beaucoup ! !!

Pouvez-vous me dire si cette fonction (CHARTEVENT_CLICK) peut être utilisée pour tester un EA?
 
Yuriy Vins:
Peut-on utiliser cette fonction (CHARTEVENT_CLICK) pour tester un EA?

Hélas, non.

 
ukrop1203:

J'ai téléchargé les données de MetaQuotes Software Corp dans le menu "History Center", qu'est-ce que les données du courtier ont à voir avec cela ?

Qui a téléchargé le terminal, c'est de là que les données sont tirées dans MT4. Et plus précisément, et très probablement, le compte sur lequel vous êtes connecté au moment du téléchargement, il en extrait l'historique.

 
Vladimir Baskakov:
Qu'est-ce que tu dis ?

Que les gens comme vous devraient être déchus de leur statut de vendeur. Va faire un apprentissage d'agent sanitaire.

 
Andrei Novichkov:

Que les gens comme vous devraient être déchus de leur statut de vendeur. Va faire un apprentissage d'agent sanitaire.

Passez une bonne journée.
 

Bonjour à tous,

J'ai mis un bouton de fermeture des ordres dans l'EA, mais il ferme tous les ordres dans le terminal. J'en ai juste besoin sur le tableau actuel. Pouvez-vous m'aider ?

//----------------------------------------------------------------------
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---            
   if(sparam== "CloseButton")
      {
      CloseAllOpenPositions(MaxSlippage); 
      ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);    
      }   
      if(sparam== "CloseBuy")
      {
      CloseAllBuy(MaxSlippage); 
      ObjectSetInteger(0,"CloseBuy",OBJPROP_STATE,false);    
      }         
         if(sparam== "CloseSell")
      {
      CloseAllSell(MaxSlippage); 
      ObjectSetInteger(0,"CloseSell",OBJPROP_STATE,false);    
      }         
//---      
  }
  
//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose = true;        
   int index = OrdersTotal()-1;   
   while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true)
      {
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {         
         checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), MaxSlippage, CLR_NONE); 
         
         if(checkOrderClose == false)
            {
            int errorCode = GetLastError();
            
            if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break;
            else continue;        
            }          
         }           
      index--;
     }     
  }
  //----------------------------------------------------------------------------
 
Carcass77:

Bonjour à tous,

J'ai mis un bouton de fermeture des ordres dans l'EA, mais il ferme tous les ordres dans le terminal. J'en ai juste besoin sur le tableau actuel. Pouvez-vous m'aider ?

Remplacer la fonction de fermeture

//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose=true;
   int index=OrdersTotal()-1;
   while(index>=0 && OrderSelect(index,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderSymbol()==Symbol())   //Добавил  
        {

         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            checkOrderClose=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),intMaxSlippage,CLR_NONE);

            if(checkOrderClose==false)
              {
               int errorCode=GetLastError();

               if(errorCode==1 || errorCode==2 || errorCode==5 || errorCode==6 || errorCode==64 || errorCode==65 || errorCode==132 || 
                errorCode==133||errorCode==139) break;
               else continue;
              }
           }

        }
      index--;
     }
  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov:

Remplacer la fonction de fermeture

Ça marche. Merci beaucoup.

 
J'ai également voulu ajouter une fonction de multiplicateur pour le pas avec chaque transaction. Des conseils ?
 
Carcass77:
J'ai également voulu ajouter une fonction de multiplicateur pour le pas avec chaque transaction. Des conseils ?

S'il s'agit d'augmenter la taille du lot d'un nouvel ordre par rapport à la taille maximale des ordres déjà ouverts, alors lors du comptage des ordres, n'oubliez pas la taille maximale des ordres.

comme ça :

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// lotmaxbuy_ и lotmaxsell_ вернет максимальные лоты по типам ордеров
int NumberOfOrders(int magic_,double &lotmaxbuy_,double &lotmaxsell_)
  {
   int i,ot,buy_=0,sell_=0,k=OrdersTotal();
   lotmaxbuy_=0.0; lotmaxsell_=0.0;
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if((OrderMagicNumber()==magic_) && (OrderSymbol()==_Symbol))
           {
            if(ot==OP_BUY) { buy_++;  lotmaxbuy_  = fmax(lotmaxbuy_,OrderLots());  }
            if(ot==OP_SELL){ sell_++; lotmaxsell_ = fmax(lotmaxsell_,OrderLots()); }
           }
        }
     }
   return(buy_+sell_);
  }
//+------------------------------------------------------------------+
Raison: