Question OrderModify() - page 3

 

Simon,

J'essaie de réfléchir à la façon dont je pourrais procéder, mais rien ne me vient. J'ai parcouru le dictionnaire de MetaEditor à la recherche de voies possibles. J'envisage d'utiliser les fonctions OrderSymbol() et OrderSelect() de concert. Si vous me donnez une option pour un indice, je vais évidemment la prendre. Quel est l'indice ? ;) Je considère qu'il s'agit plus d'une discussion que d'un défi. Si vous considérez qu'il s'agit d'un défi, je n'accepterai aucun indice. J'ai pleinement confiance en mes capacités.

Je vous remercie.

 

Pourquoi utiliseriez-vous MarketInfo() ? pour vous dire quoi ?


Avant de pouvoir coder cela, vous devez comprendre comment le faire et être capable de l'exprimer en utilisant un langage simple, pas du code.


Le code nécessaire pour répondre à cette exigence contient de nombreux aspects de ce que vous deviez faire avec le code que vous avez mis dans la base de code.


C'est l'heure du coucher pour moi maintenant... alors voici un conseil pour vous aider à démarrer, vous avez plusieurs commandes, vous devez donc les parcourir toutes pour trouver la bonne... ou peut-être plus d'une, couvrir autant d'options que vous pouvez voir.

Si vous ne trouvez pas de solution, faites-le moi savoir et je trouverai ce que je pense être une solution et je la posterai... alors vous pourrez la lire, la comprendre et la démolir et me demander de justifier toute partie qui vous semble fausse ou inutile.

Dans tous les cas, je suis convaincu que vous apprendrez au cours du processus.

 

Simon,

Richard Bhauer m'a envoyé une version révisée de ce que j'ai posté plus tôt. Ce n 'est certainement PAS mon style de codage préféré, mais je pense que c'est impressionnant. J'ai pensé le partager avec vous pour voir si ce code a un lien avec une méthode que vous promouvez pour la sélection et la fermeture des ordres. Merci encore à Richard. De plus, si j'ai pensé à essayer OrderSymbol(), c'est parce que j'ai écrit des EA utilisant de multiples fins d'ordres OrderSend("GBPUSD"...) ; ou n'importe quelle paire de devises. J'ai supposé que je pouvais simplement essayer un processus similaire pour fermer des ordres. Apparemment, le travail de sélection de l'ordre (afin de le fermer) est effectué dans la fonction OrderSelect(). Dans le message précédent, vous avez mentionné, à titre d'indication, d'essayer d'exécuter une boucle pour localiser le bon numéro de ticket (je suppose que la boucle est exécutée en premier et que lorsque le ticket est trouvé, on passe au bloc de code suivant contenant d'abord la fonction OrderSelect(). La fonction OrderSelect() contient la variable utilisée dans le bloc de code précédent de la boucle pour trouver le bon numéro de ticket. La fonction OrderSelect() utilise cette variable pour sélectionner le billet. Une fois le billet sélectionné, tout le reste est assez simple. Je lirai votre réponse dans la matinée.

Merci.

Dossiers :
 
WhooDoo22:

Apparemment, le travail de sélection de l'ordre (afin de le fermer) est effectué dans la fonction OrderSelect().

Lisez la documentation des fonctions suivantes, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice(), elles ont toutes la déclaration suivante :Remarque : l'ordre doit être préalablement sélectionné par la fonctionOrderSelect().

OrderClose() n'a pas cette déclaration car vous passezle numéro de ticket à OrderClose() comme premier paramètre . . . avec toutes les fonctions listées ci-dessus vous ne le faites pas, donc pour les utiliser vous devez d'abord sélectionner l'ordre qui vous intéresse, c'est le travail de OrderSelect() . . puis vous pouvez trouver la taille de sa position avec OrderLots() ou son prix d'ouverture avec OrderOpenPrice(), mais il faut d'abord le sélectionner.


Vous devez saisir ce concept et le comprendre.... . .

WhooDoo22:

Dans le post précédent, vous avez mentionné comme un indice, d'essayer d'exécuter une boucle pour localiser le numéro de ticket correct (je suppose que la boucle est exécutée en premier et quand le ticket est trouvé, descendez au bloc de code suivant contenant d'abord la fonction OrderSelect(). La fonction OrderSelect() contient la variable utilisée dans le bloc de code précédent de la boucle pour trouver le bon numéro de ticket.

Comment trouver le bon numéro de billet à l'intérieur d'une boucle ? Vous ne savez pas quel est le bon numéro de billet... Quelles informations pouvez-vous utiliser ?
 

Simon,

Les fonctions suivantes, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() doivent être préalablement sélectionnées par la fonction OrderSelect().

La fonction OrderClose() ne doit pas être préalablement sélectionnée par la fonction OrderSelect() car la fonction OrderClose() passe le numéro de ticket comme premier paramètre.

Le but de la fonction OrderSelect() est de sélectionner une commande.

Concepts compris, je vais revoir la documentation.

Comment allez-vous trouver..

RE : Je travaille toujours sur ce sujet.

Merci

 

Simon,

Il semble que vous ne cessiez de souligner le "numéro de billet". Je comprends cela. Mais voilà, je ne connais que deux façons d'isoler les tickets en utilisant la fonction OrderSelect(). Je peux utiliser la méthode "Order pool", où il n'y a pas de variable spécifique au numéro de ticket OU je peux utiliser l'autre méthode, où je peux utiliser un nom de variable de ticket spécifique "ticket", "bababab22", "lambchops", n'importe quoi, pour isoler le ticket. Je pense que la méthode du "Groupement de commandes" est la plus pratique, et j'envisage donc d'utiliser cette fonction de cette manière. Cela me plaît.


De plus, j'ai parcouru la révision de Robert et j'ai remarqué que lorsqu'il fermait des ordres, il utilisait simplement la fonction OrderSelect(), (celle où l'on sélectionne dans un pool d'ordres) et la seule condition "si" utilisée en plus du signal de fermeture évident était la taille du lot et si l'ordre était d'achat ou de vente. C'est tout. J'aime ça, mais ce n'est pas la tâche actuelle. Dans cette tâche, oui bien sûr, je pourrais taper la même chose, mais rien ne serait appris. Ce qui est difficile actuellement, c'est comment puis-je apprendre ce que vous souhaitez enseigner, si je ne sais pas ce que vous essayez de m'enseigner. Je crois que si vous pouviez être plus direct dans vos pensées, je pourrais saisir plus rapidement ce que vous souhaitez partager. Je vais essayer d'être plus compréhensif.

Merci.

 
WhooDoo22:

Simon,

Il semble que vous ne cessiez de souligner le "numéro de billet". Je comprends cela. Mais voilà, je ne connais que deux façons d'isoler les tickets en utilisant la fonction OrderSelect(). Je peux utiliser la méthode "Order pool", où il n'y a pas de variable spécifique au numéro de ticket OU je peux utiliser l'autre méthode, où je peux utiliser un nom de variable de ticket spécifique "ticket", "bababab22", "lambchops", n'importe quoi, pour isoler le ticket. Je pense que la méthode du "Groupement de commandes" est la plus pratique, et j'envisage donc d'utiliser cette fonction de cette manière. Cela me plaît.

Dans ce cas, vous ne pouvez pas stocker le numéro de ticket dans une variable car les ordres sont placés manuellement, donc le code ne connaît pas les numéros de tickets jusqu'à ce qu'il les découvre, donc vous pouvez seulement utiliser la première option en utilisant une boucle et OrderSelect().

Sauvegarder les numéros de tickets est un gros inconvénient et devrait être évité à moins que vous ne soyez obligé de le faire, ce qui signifie qu'il n'y a pas de moyen possible de l'éviter... pourquoi ? parce que votre code doit être capable de récupérer après un redémarrage de MT4, ce qui signifie sauvegarder les informations sur les tickets dans des fichiers et idéalement copier les fichiers sur un second PC pour une couverture de sauvegarde supplémentaire. Ensuite, lorsque le code redémarre, il doit lire le fichier, récupérer les numéros de tickets et essayer de reprendre là où il s'est arrêté.... Ce genre de complexité n'est pas nécessaire pour la plupart des gens, mais ils pensent souvent que sauvegarder les numéros de tickets est l'option la plus simple... et qu'ils n'ont pas vraiment besoin de sauvegarder les informations dans des fichiers, etc... puis quand tout va mal, ils regrettent de ne pas l'avoir fait.

OK, j'ai codé ma version du code pour répondre à mes exigences, j'ai ajouté quelques vérifications pour détecter les ordres multiples USDJPY et modifier et fermer tous les ordres USDJPY ... voici quelques captures d'écran pour montrer comment la version finale s'est déroulée.


Les ordres que j'ai placés manuellement...

Toutes les commandes

Les ordres USDJPYi modifiés par mon code (notez le TP & SL) et fermés, ainsi que le numéro de ticket. Notez également le mélange d'ordres d'achat et de vente.

Commandes fermées USDJPYi

Les autres ordres...

Commandes restantes

 

Simon,

Dans ce cas, vous ne pouvez pas stocker le numéro de ticket dans une variable...

RE : Donc, vous allez avec la route "pool de commande" pour cet exemple, correct ?

// order pool example

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Sauvegarder les numéros de tickets est un gros inconvénient...

RE : D'accord.

sauvegarder les informations sur les tickets dans des fichiers et, idéalement, copier les fichiers sur un second PC pour une couverture de sauvegarde supplémentaire...

RE : Oui, mais la sauvegarde des informations sur les tickets dans des fichiers est un groupe de blocs de code distinct pour ma situation actuelle. Je ne commencerais pas à coder avant que les principes de base ne soient écrits.

J'ai codé ma version du code pour répondre à mon exigence...

RE : Oui, je peux voir ça. Cela semble bien. :)


Après avoir terminé cette tâche, je vais continuer avec le volume II. Il ne va pas s'écrire tout seul ;)

Merci.

 
WhooDoo22:

Simon,

Dans ce cas, vous ne pouvez pas stocker le numéro de ticket dans une variable...

RE : Donc, vous allez avec la route "pool de commande" pour cet exemple, correct ?


Y a-t-il une autre option ?
 

Simon,

Non, pas à ma connaissance. Il semble n'y avoir que deux options et celle-ci me semble la meilleure pour le volume II. En outre, elle semble moins compliquée, et cela ne me dérange pas du tout ;)

Donc, pour en revenir à cette tâche, je comprends que vous avez utilisé la méthode du pool d'ordres pour sélectionner l'ordre sur la paire usdjpy, mais quelle condition avez-vous utilisée pour isoler l'ordre sur usdjpy ?

Merci.