Questions des débutants MQL5 MT5 MetaTrader 5 - page 475

 
alph:
Pouvez-vous me dire s'il existe un tel testeur de taux dans la vie réelle ? Et est-ce un bon ou mauvais résultat pour l'année avec depo 3000$ ?

Un testeur de stratégie ment toujours, même si la qualité de la simulation est de 99,9 % !

La seule option pour vérifier l'EA est de le mettre sur un serveur VPN en temps réel sur un compte de démonstration... Microsoft Azure donne presque un serveur gratuit pour un mois, vous avez besoin de $1 pour le chercher sur YouTube !...Il y a d'autres services VPN, mais ils ont 10 jours maximum d'utilisation gratuite.

 

Les gars ! Est-il possible d'interdire par programme le trading manuel dans un EA ?

 

Pouvez-vous me dire pourquoi ce bloc supprime tous les ordres stop en attente sur tous les symboles définis dans le terminal, en ignorant magic et _Symbol ?

//--------------------------------------------------------------------------------------------------------------
//       Блок удаления отложенников по типу ордера
//--------------------------------------------------------------------------------------------------------------
int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
  
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   {     
         if( OrderGetString(ORDER_SYMBOL) ==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--) 
               { 
               //----------------------------------------------------------------------
               MqlTradeResult result={0}; 
            MqlTradeRequest request={0};
            request.order=OrderGetTicket(i);
            request.symbol = _Symbol;
            request.magic = _magic;
            request.action=TRADE_ACTION_REMOVE;
            ticketmdf=OrderSend(request,result);
            
                  if(ticketmdf==true)
                  {
                     Print("Успешно удалён ордер");
                     Sleep(2000);
                     break;                    
                  }
                  if(ticketmdf==false)                     
                  {
                     Print("Ошибка при удалении ордера # ",+GetLastError());
                     Sleep(7000);
                  }
               }                            
            }                       
         }                        
   }
   return(true);  
}
 
Aleksandr Prishenko:

Pouvez-vous me dire pourquoi ce bloc supprime tous les ordres stop en attente sur tous les symboles définis dans le terminal, en ignorant magic et _Symbol ?

1. L'ordre doit être sélectionné en premier ;

2. La boucle doit être construite à partir du dernier ordre, c'est-à-dire for( i = ordres-1 ; i >= 0 ; i-- )

 
Aleksandr Prishenko:

Pouvez-vous me dire pourquoi cette unité supprime tous les ordres stop en attente sur tous les symboles définis dans le terminal, en ignorant la magie et _Symbol ?

Je dois sélectionner les commandes:

...
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
     {
      if(OrderSelect(ххх,ххх,хххх)==true)
        {
         if(OrderGetString(ORDER_SYMBOL)==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE)==type_ord)
           {
...
 
Vladimir Tkach:

Les gars ! Est-il possible d'interdire par programme le trading manuel dans un EA ?

Bien sûr que non.
 
Karputov Vladimir:

Vous devez choisir vos commandes:

L'affirmation est correcte. L'implémentation n'est pas correcte. Où obtenez-vous le ticket pour OrderSelect() ?
 

Est-ce que c'est la bonne chose à faire ?

Alexey Kozitsyn etKarputov Vladimir: merci pour les conseils !

int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
 int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   { 
   ResetLastError();    
  ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним  

      {      
         if( OrderGetString(ORDER_SYMBOL) ==_Symbol && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--)
               { 
 

Vous avez écrit plus haut : lorsque les ordres sont supprimés, le cycle doit être inversé. Lorsqu'un ordre est supprimé, les index des ordres restants sont décalés.

int dell_ord_by_type(int type_ord, int _magic)
{
   ulong nOrderTicket = 0;
   
   for(int i = OrdersTotal() - 1; i >= 0; i--)   //--- пробежим по списку ордеров
   {
      nOrderTicket = OrderGetTicket(i);
        
      if(nOrderTicket > 0 && OrderGetString(ORDER_SYMBOL) == Symbol() && OrderGetInteger(ORDER_MAGIC) == _magic && OrderGetInteger(ORDER_TYPE) == type_ord)   
      {  
         if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
         {       
            // удаляем
         }
      }
   }
        
   return(0);  
}
 
Au fait, pourquoi déclarer une fonction comme int si elle renvoie vrai dans votre version, et toujours ? )
Raison: