Problèmes de vérification des échanges ouverts - page 6

 

Je n'ai jamais essayé, mais je ne pense pas que ce soit valable...

OrderType()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
OrderMagicNumber()==(Mnumber1||Mnumber1))    // The orders magic number is the same as the magic number used in this ea

Je pense que vous devez faire ça...

((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&     // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber2))    // The orders magic number is the same as the magic number used in this ea

La raison pour laquelle je pense cela est... Qu'est-ce que cela représente ? (OP_BUYSTOP||OP_SELLSTOP) Cela pourrait fonctionner si les variables étaient bool... mais je ne pense pas que cela puisse fonctionner avec int.

Une petite chose, vous n'avez pas besoin de l'OderSelect avant l'OrderDelete. En général, vous n'avez besoin de la fonction OrderSelect que lorsque vous utilisez une fonction Order qui n'utilise pas de ticket int. Par exemple, OrderComment( ), OrderCommission( ), etc.

 
Ok merci Raptor, je viens de mettre à jour le code sur mon post. Je me suis souvenu que vous aviez mentionné que ce n'était pas bon d'utiliser des barres pour un compteur, alors je l'ai changé pour utiliser le temps de la barre. Je vais corriger la logique et voir si cela fonctionne.
 

Ok, j'ai réparé la logique. Mais il ne supprime toujours pas les ordres.


Comme je l'ai déjà dit, j'ai changé le compteur de barres en barres...


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour(TimeCurrent());


   if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true)      // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 

dazamate:
Ok merci Raptor, je viens de mettre à jour le code sur mon post. Je me suis souvenu que vous aviez mentionné que ce n'était pas bon d'utiliser les barres pour un compteur, alors je l'ai changé pour utiliser le temps de la barre. Je vais corriger la logique et voir si cela fonctionne.
"Bars n'est pas fiable (une fois que vous avez atteint le nombre maximum de barres sur le graphique, il ne change pas et le code se casse. Volume[0]==1 n'est pas fiable, si vous manquez un tick, le code se casse. Utilisez toujours le temps."

est vrai, mais il faut regarder le contexte dans lequel ce commentaire a été fait.... Les barres ne sont pas fiables...

int Bars 

Number of bars in the current chart

mais cela ne signifie pas que vous ne pouvez pas utiliser les numéros de barre au lieu du nombre d'heures. Par exemple, comment votre code va-t-il se comporter le vendredi soir et le dimanche ? La limite en suspens est-elle égale à 4 heures ou à 4 barres ?

Et que se passe-t-il si une transaction est effectuée à 22h00 ? 22 + 4 = 26 ?

if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true)      // Check to see if pending orders have expired
 

D'accord, je vois le problème avec la stratégie temporelle. Mais si nous utilisons les barres comme compteur, une fois que le graphique atteint le nombre maximum de barres, cela échouera également, n'est-ce pas ?

Je vais y revenir et voir ce que je peux trouver...

 

Ok, que diriez-vous de cette approche


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;
 
// * EVERYTIME A TRADE GETS TRIGGERED* 

bartraded = 0;


  if (Time0 == Time[0]) return; Time0 = Time[0];          // make sure each bar is only scanned once
       {   
//-----------------------------------------------------------------------------------------------------------------------------------------------
//TRADE COUNTER
   

   bartraded++;  // Each time a new bar opens add 1 to the counter

//------------------------------------------------------------------------------------------------------------------------------------------------
// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 'pendinglimit'

   if(bartraded > pendinglimit && Tradeopen()==true)      // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 
dazamate:

D'accord, je vois le problème avec la stratégie temporelle. Mais si nous utilisons les barres comme compteur, une fois que le graphique atteint le nombre maximum de barres, il échouera là aussi, non ?


Non, la barre H1 actuelle est toujours la barre 0 . . dans 60 minutes la barre H1 actuelle sera la barre 0 . .le problème des barres est si vous utilisez les barres, c'est-à-dire le nombre total de barres sur votre graphique, ou si vous regardez les barres à l'extrême gauche de votre graphique.

Le numéro de barre pour TimeHour(TimeCurrent () est 0, vous pouvez obtenir le numéro de barre pour le moment où votre transaction a été placée (vous devez le calculer et non le stocker ! ! !) en utilisant iBarShift puis faire quelque chose comme ceci ....

if (iBarShift(symbol, TF, Time_order_Placed)+1 >  pendinglimit) && Tradeopen()==true)  
 

OK, troisième fois, j'ai mis du temps à comprendre ce que vous vouliez dire. Voici donc ce que j'ai fait. Mais les commandes ne sont toujours pas supprimées > :(


static datetime tradeopened;


//Everytime a trade is opened I run
 tradeopened = TimeCurrent();


 if((iBarShift(hothand(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true)          // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&     // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))     // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 
Oui, je viens de relire ton commentaire et ce que j'ai fait est mal,
tradeopened = TimeCurrent()
ne me donne pas l'heure d'ouverture de la barre, devrais-je utiliser Time[0] ?
 

Essayez ceci ;-)

OrderDelete(OrderTicket( ) );                    // Delete it
Raison: