Problème avec le montant total des ordres ouverts - page 3

 
Vous devez montrer l'ensemble de votre code modifié.
 
Imprimez vos variables avant et dans les instructions if et découvrez pourquoi.
 
WHRoeder:
Imprimez vos variables avant et dans les instructions if et découvrez pourquoi.

Ok, merci, je vais faire cela et faire des recherches plus approfondies. J'ai également trouvé ce bout de code qui m'intrigue parce que le SL et le TP sont séparés de l'OrderSend. Je vais examiner cela également.

ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

Bonjour à tous

J'ai résolu la plupart de mes problèmes et l'EA fonctionne bien dans le testeur, mais j'ai toujours des problèmes avec OrdersTotal. En mode Démo, il ouvre parfois les deux ordres Stop en attente, mais la plupart du temps seulement l'achat ou la vente. Je veux que les deux ordres en attente s'ouvrent en même temps (en quelques secondes), mais seulement si aucun autre ordre ou ordre en attente n'est ouvert. Je pense que ce qui se passe, c'est que parfois il ouvre les deux ordres en attente avant d'avoir eu la chance de calculer le nombre d'ordres, et d'autres fois il réalise qu'un ordre en attente a été envoyé, et n'ouvre pas l'autre. Je pensais que si je mettais les ordres entre crochets, il les exécuterait tous les deux lorsque la condition if serait remplie... Je sais aussi maintenant qu'il continuera à ouvrir les ordres en attente lorsque je les supprimerai tant que la dernière bougie sera formée, c'est-à-dire tant que la variable Time correspondra à la bougie Time[0], les ticks n'ayant aucune importance.

Voici ce bout de code :

extern datetime StartTime1 = D'2016.03.15 15:05';
int start(){
int buy_ticket=0, sell_ticket=0, buystop_ticket=0, sellstop_ticket=0, total=0;
   for(int i= OrdersTotal()-1; i>= 0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()==Symbol())
        {
         total++;
         if(OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if(OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if(OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if(total==0 && Time[0]==StartTime1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
     }

Alors, y a-t-il une meilleure façon ou une façon plus facile pour moi de faire cela ? Merci.

 
Trader3000:

Bonjour à tous

J'ai résolu la plupart de mes problèmes et l'EA fonctionne bien dans le testeur, mais j'ai toujours des problèmes avec OrdersTotal. En mode Démo, il ouvre parfois les deux ordres Stop en attente, mais la plupart du temps seulement l'achat ou la vente. Je veux que les deux ordres en attente s'ouvrent en même temps (en quelques secondes), mais seulement si aucun autre ordre ou ordre en attente n'est ouvert. Je pense que ce qui se passe, c'est que parfois il ouvre les deux ordres en attente avant d'avoir eu la chance de calculer le nombre d'ordres, et d'autres fois il réalise qu'un ordre en attente a été envoyé, et n'ouvre pas l'autre. Je pensais que si je mettais les ordres entre crochets, il les exécuterait tous les deux lorsque la condition if serait remplie... Je sais aussi maintenant qu'il continuera à ouvrir les ordres en attente lorsque je les supprimerai tant que la dernière bougie sera formée, c'est-à-dire tant que la variable Time correspondra à la bougie Time[0], les ticks n'ayant aucune importance.

Voici ce bout de code :

Alors, y a-t-il une meilleure façon ou une façon plus facile pour moi de faire cela ? Merci.

Vérifiez-vous la valeur de buystop_ticket et sellstop_ticket ? S'il n'y a qu'une seule ouverture, la seconde ne sera jamais ouverte (sauf si vous supprimez la première manuellement).
 
Trader3000 J'ai également trouvé ce bout de code qui m'intrigue parce que le SL et le TP sont séparés de l'OrderSend. Je vais également examiner ce point.
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
Lorsque les courtiers ECN ont commencé, l'envoi d'ordre échouait avec un SL/TP défini. La plupart ont corrigé ce problème depuis la version 600.
 
zirkoner:
Vérifiez-vous la valeur de buystop_ticket et sellstop_ticket ? S'il n'y a qu'un seul ouvert, le second ne le sera jamais (sauf si vous supprimez le premier manuellement).

Merci pour la réponse. En fait, les ordres d'arrêt d'achat et de vente s'ouvrent environ 50 % du temps. Les autres 50 % du temps, soit l'achat, soit la vente sont envoyés. Mais j'ai découvert quelque chose. J'ai demandé la dernière erreur et dans les cas où les deux sont envoyés, il n'y a pas d'erreur, mais quand un seul s'ouvre, j'obtiens l'erreur 130 sur celui qui ne s'est pas ouvert. Il semble donc que mes arrêts ne soient pas valides, mais je ne sais pas pourquoi. Voici le code pour SL :

extern int StopLossOriginal=11;

int start(){
int stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;
   if(StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point=Point*10,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if(total==0 && (Time[0]==time1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      Print("Buystop ticket =",buystop_ticket);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
      Print("Sellstop ticket =",sellstop_ticket);
     }

J'ai également ajouté la fonction Print. Est-ce que c'est ce que vous vouliez dire par "Vérifiez-vous la valeur de buystop_ticket et sellstop_ticket ?" ? " ? Elle renvoie deux valeurs à savoir :

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1 : Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1 : Buystop ticket =49644335



 
WHRoeder:
Lorsque les courtiers ECN ont commencé, l'envoi d'ordres échouait lorsque le SL/TP était défini. La plupart ont corrigé ce problème depuis la version 600.
Merci pour votre réponse. J'ai également essayé mais cela n'a pas fait de différence. Je suis sur la version 950.
 
Trader3000:

Merci pour la réponse. En fait, les ordres d'arrêt d'achat et de vente s'ouvrent environ 50 % du temps. Les autres 50 % du temps, soit l'achat, soit la vente sont envoyés. Mais j'ai découvert quelque chose. J'ai demandé la dernière erreur et dans les cas où les deux sont envoyés, il n'y a pas d'erreur, mais quand un seul s'ouvre, j'obtiens l'erreur 130 sur celui qui ne s'est pas ouvert. Il semble donc que mes arrêts ne soient pas valides, mais je ne sais pas pourquoi. Voici le code pour SL :

J'ai également ajouté la fonction Print. Est-ce que c'est ce que vous vouliez dire par "Vérifiez-vous la valeur de buystop_ticket et sellstop_ticket ?" ? " ? Elle renvoie deux valeurs à savoir :

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1 : Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1 : Buystop ticket =49644335



Vous devez ajouter RefreshRates() entre vos 2 OrderSend().
 
zirkoner:
Vous devez ajouter RefreshRates() entre vos 2 OrderSend().
Whoot Whoot ! Ça a marché. Merci beaucoup.