Fermeture des demi-lots. - page 5

 
DomGilberto:

J'ai mis un ordre en attente "OP_BUYSTOP" mais j'avais l'impression qu'il se transformerait en "OP_BUY" lorsqu'il serait déclenché ?

Je pensais que le type d'ordre serait "OP_BUY" s'il avait été déclenché ?

Après tout, je ne suis intéressé qu'UNE FOIS que l'ordre a été déclenché ?

Pourquoi ces accolades sont-elles déroutantes ? Voulez-vous dire en termes d'emplacement de la parenthèse gauche ? Si c'est le cas, il semble que ce soit une question individuelle, car j'ai été corrigé plusieurs fois à ce sujet ?

Les accolades ne sont pas nécessaires, donc le fait qu'elles soient là peut créer une confusion pour les autres personnes qui essaient de lire votre code (moi).


Si vous avez seulement un BUYSTOP, votre code ne fera rien parce que ce n'est pas un OP_BUY....

DomGilberto:
Hmmm, il ne veut toujours pas fermer @ "Close_Half_Order" ? Je ne reçois pas non plus de message d'erreur ?

Cela a donc un sens alors que la commande est toujours en attente...

Votre ordre a-t-il le bon numéro magique ?

 
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Close_Half_Order Last Error = 4108
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: OrderClose error 4108
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: pending order #9 cannot be closed
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
J'ai supprimé la ligne "if(OrderType()==OP_BUY)" - Voici les nouvelles impressions dans le journal après le test ? Ticket invalide... (désolé de poser 101 questions à ce sujet !)
 
DomGilberto:
J'ai supprimé la ligne "if(OrderType()==OP_BUY)" - Voici les nouvelles impressions dans le journal après le test ? Ticket invalide... (désolé de poser 101 questions à ce sujet !)

RaptorUK:

Vous ne fermez pas un ordre en attente, que vous a dit votre rapport d'erreur ?

2013.07.31 17:45:46     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: pending order #9 cannot be closed

Vous ne pouvez pas fermer un ordre en attente, il est supprimé.

 
Mais je n'essaie pas de fermer un ordre en attente? J'essaie de fermer la moitié des lots sur un "OP_BUY" qui n'est pas en attente... ? Il y a manifestement quelque chose qui m'échappe...
 
DomGilberto:
Mais je n'essaie pas de clôturer un ordre en attente ? J'essaie de fermer la moitié des lots sur un "OP_BUY" qui n'est pas en attente... ? Il y a manifestement quelque chose qui m'échappe...
DomGilberto:

J'ai placé un ordre en attente "OP_BUYSTOP" mais j'avais l'impression qu'il se transformerait en "OP_BUY" lorsqu'il serait déclenché ?

Si vous avez un OP_BUYSTOP, votre code ne fait rien, ce qui est correct. Quand l'OP_BUYSTOP est déclenché, il se transforme en OP_BUY et votre code devrait fermer la moitié de la taille de sa position... tant qu'il a le symbole et le numéro magique corrects, n'est-ce pas ? Je suppose que oui, sinon le code n'aurait pas essayé de clôturer l'ordre en attente... Et si OpenOrdersThisPair(Symbol()) == 1 ?
 
Si je retire "OpenOrdersThisPair(Symbol()) == 1" du code, les messages sont exactement les mêmes dans le journal... Je suis perplexe... ?
 
DomGilberto:
Si je retire "OpenOrdersThisPair(Symbol()) == 1" du code, les messages sont exactement les mêmes dans le journal... Je suis perplexe... ?

Il est temps d'ajouter d'autres instructions Print(), de vérifier tout ce que vous n'avez pas déjà vérifié... vous êtes seulement déconcerté parce que vous ne savez pas pourquoi, trouvez pourquoi et vous ne serez plus déconcerté.

Lorsque vous avez trouvé pourquoi et que vous avez toutes ces instructions Print() que vous ne voulez plus imprimer dans l'onglet Journal/Experts, jetez un coup d'oeil à ceci qui vous permettra de les activer et de les désactiver : https://www.mql5.com/en/forum/135168/page2.

 

Ah, au fait, vous ne pouvez pas faire ça . . .

bool Close_Half_Order = OrderClose(OrderTicket(), half, FirstTarget_Buy, 3, CLR_NONE);

... sauf si FirstTarget_Buy == Bid Pour éliminer la possibilité que ce ne soit pas le cas, utilisez simplement Bid. Un achat est fermé avec une vente, une vente est exécutée à l'offre.

 
Ok, donc si je mets "Bid" ici, les lots sont maintenant fermés, mais pas au bon prix, et il semble fermer plusieurs moitiés pendant une position. (plutôt vers les 2/3 supérieurs de la zone de prix cible de 100%... pas tous au même prix qu'ils ferment...)

Comment suis-je censé clôturer la position au "FirstTarget_Buy " ?
 
DomGilberto:
Ok, donc si je mets "Bid" ici, les lots sont maintenant fermés, mais pas au bon prix, et il semble fermer plusieurs moitiés pendant une position. (plutôt vers les 2/3 supérieurs de la zone de prix cible de 100%... pas tous au même prix qu'ils clôturent...)

Comment suis-je censé clôturer la position au "FirstTarget_Buy " ?

Vous ne pouvez pas utiliser OrderClose() à un prix autre que Bid et Ask (Buy et Sell) ... c'est aussi simple que cela, vous ne pouvez pas.

Ce que vous pouvez faire :

ouvrir deux transactions pour la moitié de la position chacune et donner à chacune un TP différent

ou

surveiller le prix Bid/Ask et lorsqu'il a atteint ou dépassé "FirstTarget_Buy ", fermer la moitié de la transaction au prix Bid/Ask.

Raison: