Questions "pour" du conducteur de vélo - page 13

 

Simon,

"Votre boucle while n'a pas trouvé de ticket. . . . ."

Elle n'a pas "éventuellement" trouvé l'index du ticket dans le pool historique, elle l'a trouvé sinon les fonctions suivantes n'auraient pas été exécutées :)


" un index de pool != un numéro de ticket n'avons-nous pas déjà vécu cela ?"

Permettez-moi de clarifier maintenant,

Un numéro de ticket d'ordre est le numéro de ticket unique attribué à un ordre une fois que la demande a été envoyée.

Un numéro de position d'ordre est la position d'un ordre dans un index depool d'ordre(important à comprendre) similaire à un tableau.


"Pourquoi vous attendez-vous à ce que l'ordre USDJPY clôturé se retrouve à la même position dans un pool complètement différent, le pool historique ?"

Je ne devrais pas car c'est un pool distinct.

Dans le code que j'ai présenté-

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

ils 'agit apparemment de sélectionner l'ordre dans le pool historique, n'est-ce pas ? C'est du moins ce que j'ai compris de la documentation. De plus, j'ai récemment essayé d'ouvrir environ cinq ordres sur des paires de devises distinctes, j'en ai fermé un, puis j'ai activé l'EA et il a toujours exécuté toutes les fonctions, y compris Print(OrderCloseTime()) ;.


Merci.

 
WhooDoo22:

Simon,

"Votre boucle while n'a pas trouvé de ticket. . . . ."

Elle n'a pas "éventuellement" trouvé l'index du ticket dans le pool historique, elle l'a trouvé sinon les fonctions suivantes n'auraient pas été exécutées :)

Quelles sont les fonctions que vous utilisez qui utilisent un numéro de ticket ? Vos OrderSelects sont tous SELECT_BY_POS... POS signifiant POSition, donc je répète, votre while loop ne trouve pas un ticket, il trouve un index dans le pool d'ordres.


Ce que vous sélectionnez dans le pool d'historique est l'ordre à la position d'indexi. Comment pouvez-vous savoir que l'ordre que vous venez de fermer est à la positioni? La valeur dei est l'endroit où l'ordre USDJPY se trouvait dans le pool d'ordres... Les pools sont complètement séparés et ne sont liés d'aucune façon.
 

Simon,

"votre boucle while ne trouve pas un ticket, elle trouve un index dans le pool de commandes."

Oui, je crois que j'ai compris. Cela ne devrait pas être un problème.


"les pools sont complètement séparés et ne sont pas liés d'aucune façon".

Ceci est compris, mais le bloc de code de la fonction OrderClose() semble fonctionner comme prévu. Je vais ajuster le bloc de code pour sauvegarder la valeur du numéro du ticket de commande afin de poursuivre ce que vous souhaitez aborder. D'accord ?

D'abord, je vais poser cette question : Pourquoi le numéro de position du pool historique d'une commande ne serait-il pas le même que son numéro de position actuel ? Je crois que ce numéro est le même.


Merci.

 
WhooDoo22:

Simon,

"votre boucle while ne trouve pas un ticket, elle trouve un index dans le pool de commandes."

Oui, je crois que j'ai compris. Cela ne devrait pas être un problème.


"les pools sont complètement séparés et ne sont pas liés d'aucune façon".

Ceci est compris et pourtant le bloc de code de la fonction OrderClose() semble fonctionner comme prévu.

L'appel à la fonction OrderClose() n'a pas été modifié, il devrait donc continuer à fonctionner.


Cependant, cela ne fonctionne pas comme prévu car le concept est fondamentalement erroné... jusqu'à ce que vous compreniez pourquoi il est inutile de continuer...

 if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))


   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }
 
WhooDoo22:


D'abord, je vais poser cette question : Pourquoi le numéro de position du pool historique d'un ordre ne serait-il pas le même que le numéro de position du pool actuel ? Je pense que le numéro est le même.


Allez sur votre compte de démonstration avec lequel vous avez fait des tests... combien d'ordres ouverts avez-vous ? combien d'ordres avez-vous dans votre historique dans l'onglet Historique du compte ?
 

Simon,

La rubrique "Historique du compte" en contient 56.

"Commerce" (ordres ouverts) en contient trois.


J'attends que vous écriviez : "Je suppose que ça marche, WhooDoo. :)"

Hooold on, j'ai vérifié le numéro de ticket de la fonction Print() retournée et elle a retourné un numéro de ticket différent de celui de l'ordre USDJPY.

Cela ne fonctionne pas. Confirmé. Je suis content d'avoir essayé cependant, cette leçon valait la peine d'être discutée.

Merci.

 
WhooDoo22:

Simon,

La rubrique "Historique du compte" en contient 56.

"Trade" (ordres ouverts) en contient trois.

Si vous créez un nouvel ordre USDJPY et que vous exécutez votre code et qu'il trouve ce nouvel ordre, je vais avoir une valeur de 3, quelle position dans le pool historique votre ordre USDJPY prendra-t-il lorsque vous le fermerez ? il y en a déjà 56, donc la position 3 est déjà prise, ainsi que les positions 4, 5, 6, 7 ... 55. . 55
 

Simon,

57.

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      int usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

Merci.

Dossiers :
 
WhooDoo22:

Simon,

57.

Merci.

i est 3, alors comment la sélection de l'ordre en position 3 dans le pool historique va-t-elle permettre d'obtenir l'ordre en position 57 ? ?
 

Simon,

Il ne le fera pas. J'ai récemment redécouvert cela.

Merci.