ouvrir des ordres avec un écart de 10pip - page 4

 
    //datetime lastTime  = 0;
    double highest_open_price=0;
    //int      lastTicket = -1; // None open.
    int      highest_Ticket = -1; // None open.
    for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(0, SELECT_BY_POS,MODE_TRADES)                 // Only my orders w/
    &&  OrderMagicNumber()  == 0           // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    //&&  OrderOpenTime()     >=  lastTime
    &&  ?????????()     >=  highest_open_price
    ){
      highest_open_price= ????????();
      highest_Ticket = OrderTicket();
    }

Comme je l'ai dit - simple substitution

 
GumRai:

Comme je l'ai dit - simple substitution



merci GumRai: mais ma question supplémentaire est que je crois que ? ????????() est OrderOpenTime()

Maintenant, comment puis-je le faire fonctionner avec ma logique de trading comme vous l'avez indiqué précédemment ?




      
rsi1=iRSI(NULL,0,14,PRICE_CLOSE,1);
rsi2=iRSI(NULL,0,14,PRICE_CLOSE,0); 
     
 if(rsi2>70 && Ask > High[1] + (10*pips2dbl) )
  {
      Opn_S=true;
     } 
     else 
   if(rsi2>70 && Ask < High[1] + (10*pips2dbl)) 
      {
      Opn_S=false;
     }

 Here you give value to Opn_S, but you do nothing with it







   lastTicket=OrderSend(Symbol(),OP_BUY,mylot(),Ask,0,0,0,"My Comment",magic,0,Green);

Ici, il n'y a pas de conditions pour ouvrir un ordre et vous écrasez la valeur de lastTicket.

Votre code n'a aucune logique, c'est juste 3 sections de code qui n'ont aucun rapport entre elles.

===========================================================================================================================




HHH

pourquoi je demande cela ? j'ai arrangé le résultat de la manière suivante : code...... ci-dessous, le résultat est celui que je voulais mais le problème est qu'il ouvre plusieurs ordres sur une seule ligne. voir les images du résultat ci-dessus.

// Orders accounting 
   datetime lastTime  = 0;
    double highest_open_price=0;
    lastTicket = -1; // None open.
    int      highest_Ticket = -1; // None open.
    for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(0, SELECT_BY_POS,MODE_TRADES)                 // Only my orders w/
    &&  OrderMagicNumber()  == 0           // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    &&  OrderOpenTime()     >=  lastTime
    &&  OrderOpenTime()     >=  highest_open_price
    ){
      highest_open_price= OrderOpenTime();
      highest_Ticket = OrderTicket();
    }





        
 if(Bid > High[1] && OrderOpenTime()     > highest_open_price)
  {
      Opn_S=true;
     }   
CurrentTime= Time[1];





if(Opn_S==true)               // No opened orders +
        {                                       // criterion for opening Sell
         RefreshRates();                   // Refresh rates     
         lastTicket=OrderSend(Symbol(),OP_SELL,mylot(),Bid,0,0,0,"My Comment",magic,0,Red);
         if(lastTicket>0)
      
           {
            Comment("Opened order Sell ","#",lastTicket);
            return(0);                                 // Exit start()
           }
         if(Fun_Error(GetLastError())==1) // Processing errors
            continue;                             // Retrying
         return(0);                                   // Exit start()
        }
      break;                                    // Exit while
     }
//--------------------------------------------------------------- 9 --------------------------------------
   return(0);                                       // Exit start()
  }


 

Il n'y a aucune logique car votre code est composé de 3 sections qui n'ont aucun rapport entre elles.

Je ne peux qu'en conclure que vous avez copié et collé des sections de code d'autres EA dans le vain espoir qu'elles fonctionnent ensemble.

"Je crois que ? ????????() est OrderOpenTime()".

Cela prouve que vous n'avez aucune idée de ce que fait la boucle et que vous ne l'avez pas écrite.

 

GumRai s'il vous plaît c'est mon code entier principalement ouvre seulement la vente. comme vous l'avez dit toutes ces déconnexions sont venues en raison de permettre à mon ea d'ouvrir la commande multiple et la chose de boucle avant est juste simple lopped mes ordres comme ceci


{
   int cnt;
   int NumTrades;   // Number of buy and sell trades in this symbol
   
   NumTrades = 0;
   for (cnt = OrdersTotal()-1 ; cnt >=0 ; cnt--)
     {
     if(OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)==true)
      if ( OrderSymbol() != Symbol()) continue;
      if ( OrderMagicNumber() != magic)  continue;
      
      if(OrderType() == OP_BUY )  NumTrades++;
      if(OrderType() == OP_SELL ) NumTrades++;
             
     }
    
  }




then getting my ea to work with my loop by just adding  if(NumTrades==0 && Opn_B==true) // No new orders +

this ensures my ea to open just 1 order on a giving chart but now i want to expand my ea to open more than one order i remove  NumTrades==0 

to let the ea open order unrestricted with my ordersend as little i know now i know we can loop through order for so many reason and when it comes
to the looping for highest order on the chart i dont know that well,but can do it if example is giving. please bear with my little coding knowledge and put me through

below is my ea please assist me 
 
j'attends votre réponse
 

Je ne sais pas si cet EA est simplement mal écrit, incomplet ou s'il s'agit d'un EA fonctionnel dont des morceaux de code ont été supprimés.

Vous dites qu'il ouvre principalement des ventes, mais je ne vois pas comment il peut ouvrir un achat.

La principale condition pour ouvrir un achat est

if(Opn_B==true)

Le seul autre endroit du code où Opn_B apparaît est le suivant

Opn_B=false

Il n'y a donc aucun endroit où il peut être défini comme vrai.

Par ailleurs,

   while(true) // Orders closing loop

Une boucle qui n'ouvre que des ordres - excellent commentaire.

   double highest_open_price=0;
   int    highest_Ticket=-1;
   for(int pos=OrdersTotal()-1; pos>=0; pos--)
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) // Only my orders w/
         && OrderMagicNumber()==0           // my magic number
         && OrderSymbol()==Symbol() // and my pair.
         && OrderOpenPrice()>=highest_open_price)
        {
         highest_open_price=OrderOpenPrice();
         highest_Ticket=OrderTicket();
        }
 
GumRai:

Je ne sais pas si cet EA est simplement mal écrit, incomplet ou s'il s'agit d'un EA fonctionnel dont des morceaux de code ont été supprimés.

Vous dites qu'il ouvre principalement des ventes, mais je ne vois pas comment il peut ouvrir un achat.

La principale condition pour ouvrir un achat est

Le seul autre endroit du code où Opn_B apparaît est le suivant

Il n'y a donc aucun endroit où il peut être défini comme vrai.

Par ailleurs,

Une boucle qui n'ouvre que des ordres - excellent commentaire.

Merci d'avoir examiné mon code et d'avoir repéré les recommandations et les corrections.

GumRai: c'est pourquoi je t'ai dit alors que beaucoup de gens peuvent ne pas le comprendre mais moi oui, et tu es capable de comprendre parce que tu comprends très bien le code,

En outre, j'ai ma raison pour que l'ea n'ouvre que les ventes, mon problème avec cette demande a rendu mon ea difficile, mais quand j'aurai la solution, je réorganiserai tout à nouveau.

J'ai supprimé les conditions de fermeture et les conditions d'achat, ce qui rend l'ea incomplète.

.pourquoi ? parce que je veux m'assurer qu'il remplit ces conditions...... ordre d'ouverture en

le prix d'ouverture le plus élevé dans le symbole graphique actuel et ouvrir 10pip au-dessus si c'est un achat/ouvrir 10pips en dessous si c'est une vente.

J'ai supprimé les conditions de fermeture parce que je ne veux pas que le backtest ferme des transactions pendant le test pour m'assurer que le code est correct avant que d'autres conditions soient mises en place.

Je n'ai pas encore trouvé de solution à ce problème, je vais donc organiser mon ea à nouveau avec les conditions de clôture appropriées. C'est pourquoi je vous demande de m'aider à résoudre ce problème, même si vous m'aidez.




 

Eh bien, je vous ai donné le code pour trouver l'ordre avec le prix ouvert le plus élevé.

Il suffit maintenant de vérifier si le prix est au moins 10 pips au-dessus de cette valeur et, si oui, d'ouvrir un autre ordre.

 

s'il te plaît GumRai: comment puis-je placer la boucle dans l'ea, parce que la façon dont je l'ai fait n'a pas fonctionné dans le backtest......

J'ai utilisé le highest_open_price et le highest_Ticket pour écrire certaines de mes conditions dans l'application, mais cela ne m'a pas donné le résultat souhaité lors du backtest.

Peut-être que quelque chose m'échappe ?


  double highest_open_price=0;
   int    highest_Ticket=-1;
   for(int pos=OrdersTotal()-1; pos>=0; pos--)
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) // Only my orders w/
         && OrderMagicNumber()==0           // my magic number
         && OrderSymbol()==Symbol() // and my pair.
         && OrderOpenPrice()>=highest_open_price)
        {
         highest_open_price=OrderOpenPrice();
         highest_Ticket=OrderTicket();
        }
 
Oui, vous ne montrez pas le code. Comment sommes-nous censés savoir ce que vous avez/n'avez pas fait ?