L'EA ne fonctionne pas sur plusieurs paires, besoin d'aide - page 3

 
for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
              
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
              
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Mon Ea n'arrête pas d'ouvrir et de fermer des ordres, il semble ignorer quelque chose dans mon code, y a-t-il un problème avec ma fonction d' ordre de fermeture ?
 
Matt_Townsend: Y a-t-il un problème avec ma fonction de clôture des ordres ?

Oui - vous devez compter à rebours lorsque vous fermez des ordres :

for(int i=OrdersTotal()-1; i>=0; i--)
Vous pouvez lire pourquoi ici
 
honest_knave:

Oui - vous devez compter à rebours lorsque vous fermez des ordres :

for(int i=OrdersTotal()-1; i>=0; i--)
Vous pouvez lire pourquoi ici
Il s'agit toujours d'ouvrir et de fermer des transactions presque immédiatement, y a-t-il autre chose qui ne va pas dans le code ?
 
Matt_Townsend Y a-t-il autre chose qui ne va pas dans le code ?
Imprimez vos variables, et découvrez pourquoi.
 
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Pourquoi continuer ?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


serait plus logique
 
Keith Watford:
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Pourquoi continuer ?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


Cela aurait plus de sens.
Il ne ferme pas les ordres si le code contient ||, mais il fonctionne mieux avec le !=.
 
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


    double fastma, slowma;
    int    ticket, total;
    //---define Ma's
    
    fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
    slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
    
    total = OrdersTotal();
    //---Start operations
    
    if(total < 1)
    {
       if(fastma > slowma)
        {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Buy order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       if(fastma < slowma)
       {
         ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Sell order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       return(0);
    }
  
      
    for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Voici mon code tel qu'il est actuellement, il peut ouvrir des transactions sur n'importe quelle paire sur laquelle je l'ai configuré, mais il a aléatoirement certaines paires avec des transactions ouvertes. J'ai essayé de faire en sorte que le code fonctionne indépendamment sur n'importe quelle paire, mais malheureusement, le code n'ouvre aucune transaction tant que toutes les autres transactions ne sont pas fermées, et n'ouvre pas de transactions sur toutes les paires sur lesquelles il est configuré. Y a-t-il un moyen de faire faire cela au programme ? Il achète et vend comme je le souhaite.
 
Votre code
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Simplifié
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)
 
whroeder1:
Vous codez
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Simplifié
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)

Chaque graphique ne fonctionne toujours pas indépendamment, y a-t-il autre chose que je puisse faire ?

Et de la façon dont c'est codé, cela ne ferme plus les transactions.

 
Keith Watford 2016.12.14 03:10| 122.155.43.228ban FR

    total = OrdersTotal();
    //---Start operations
    
    if(total <= 1)
boucle dans les ordres ouverts et ne compte que les transactions qui ont le numéro magique et le symbole graphique de l'EA.
Raison: