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

 
dazamate:
Oui, je viens de relire votre commentaire et ce que j'ai fait est faux,
ne me donnera pas l'heure d'ouverture de la barre, devrais-je utiliser Time[0] ?


Oui, ou...

tradeopened = TimeHour(TimeCurrent());
 
OrderDelete(OrderTicket( ) );  

C'est réparé Raptor.


---------> http://clip2net.com/s/14aYs

 
dazamate:

C'est réparé Raptor.


---------> http://clip2net.com/s/14aYs

LOL, content d'avoir pu aider... . . :-)
 

J'ai finalement réussi à mettre l'ea dans un état où je peux commencer à ajuster la stratégie. Merci beaucoup, mais je doute que vous ayez fini d'entendre parler de moi, désolé de le dire.


Un grand merci également à WHRoeder
 

Alors ... vous pensiez que c'était fini lol


J'ai ajouté un code qui va suivre le stoploss à partir d'une valeur de moyenne mobile. Le code fonctionne bien sur les transactions d'achat mais pas sur les transactions de vente. Je n'arrive pas à repérer quoi que ce soit, peut-être que vous le pouvez.


// Trailing Stop Code 

   if(Tradeopen()==true && emastoptrail==TRUE)                                  // Trades are open and Trailing stop feature is turned on
    {
      for(int tnumber2 = OrdersTotal()-1; tnumber2 >= 0 ; tnumber2--)                   //scan through open orders
       {
        if (OrderSelect(tnumber2, SELECT_BY_POS) && 
            OrderMagicNumber()==Mnumber3)                                                // The orders magic number is the same as the magic number used the profit trade
            {                                          
          
            if(OrderType()==OP_BUY && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) > OrderStopLoss() ))       // The stop loss is less than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);  // Modify Stop to MA value
               }
            
            if(OrderType()==OP_SELL && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) < OrderStopLoss() ))       // The stop loss is more than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);   // Modify Stop to MA value
               }
            }
       }
     }
 

Eh bien, le code de trailing stop n'est peut-être pas le problème. Il y a un problème avec le code qui supprime les ordres en attente après un certain temps...


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

   if((iBarShift(Symbol(),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(OrderTicket( ) );                                            // Delete it
               }
        }
       
     }

Après l'ouverture de chaque transaction, j'exécute également ceci...

tradeopened = TimeHour(TimeCurrent());

Je commente ...

(iBarShift(Symbol(),60 ,tradeopened)

et il commence à 1000 et continue à compter à chaque nouvelle barre et ne se remet pas à zéro lorsque je l'exécute ...

tradeopened = TimeHour(TimeCurrent());


Cela fait que la vérification de la suppression des ordres en attente est toujours vraie et si la transaction n'est pas déclenchée dans la prochaine barre, l'ordre en attente est supprimé immédiatement -__-.

Ahhh HELP lol

 

Je pense que j'ai peut-être réglé le problème ....

Je l'ai modifié de façon à ce qu'une vérification supplémentaire pour supprimer la transaction consiste à reculer le temps maximum autorisé pour l'ouverture d'un ordre en attente et à voir s'il correspond au temps d'ouverture de la transaction :)

  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
              (iTime(   Symbol(), 60, pendinglimit) == tradeopened))
               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
dazamate:

Je pense que j'ai peut-être réglé le problème ....

Je l'ai modifié de sorte qu'une vérification supplémentaire pour supprimer la transaction consistait à reculer l'heure de l'ouverture maximale autorisée d'un ordre en attente et à voir si elle correspondait à l'heure d'ouverture de la transaction :)

Vous avez presque quelque chose qui ressemble à ce que j'envisageais....

Il y a un problème avec l'utilisation de la variable tradeopened ... s'il y a des transactions ouvertes et que l'EA s'arrête, vous perdez les informations contenues dans cette variable ... pourquoi ne pas la remplacer par OrderOpenTime( ) et faire quelque chose comme ceci ...

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

              (iBarShift(OrderSymbol(),PERIOD_H1 ,OrderOpenTime()) - pendinglimit) <= 0));    //  <----------- this . . .

               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
Le seul problème, c'est que j'utilisais la fonction ibarshift avant et pour une raison quelconque, elle produisait 1000+.
 

Aussi raptor j'ai besoin de prendre votre cerveau.... à nouveau :)


Il y a t-il un moyen de transformer une valeur de moyenne mobile en degrés ? Je suis juste en train de googler pour voir si je peux trouver des forums de maths. De cette façon, il serait facile de détecter les marchés latéraux et de dégager les tendances à la hausse et à la baisse.

Raison: