MMA_Breakout_strategy_volume I (sans MM ou MF) - codé par WhooDoo22 - page 4

 

Simon,

1. ... quel numéro de billet sélectionne-t-il ?

RE 1.. : J'ai eu un malentendu dans une utilisation de la fonction OrderSelect() en combinaison avec la fonction OrdersHistoryTotal(). Aucune des deux fonctions n'a de rapport avec l'autre. Ceci étant compris, je peux simplement supprimer la fonction OrderSelect() du début du premier bloc de code d'envoi de commande. Elle n'est pas nécessaire (rappelez-vous que ce code a été écrit strictement à des fins de test, et non pour fonctionner en démo ou en direct. Évidemment, il faut éventuellement le corriger pour qu'il puisse être utilisé sur des comptes démo et live).

Aussi, je crois avoir compris votre point répétitif, "vérifier les valeurs de retour avec la fonction GetLastError()". J'AI COMPRIS. Ha ha :)

2. Si vous avez compris OrderHistoryTotal() vous...

RE 2 : Je comprends l'objectif de la fonction OrderHistoryTotal(). J'avais une idée fausse de l'utilisation de la fonction OrderSelect() en combinaison avec la fonction OrdersHistoryTotal().

3. Si vous compreniez comment fonctionnent les accolades { } ...

RE 3 : Je crois que je comprends l'utilisation correcte des accolades. Je comprends également que les accolades peuvent être inutiles dans ce cas.

if(OrderType()==OP_BUY)  
   OrderModify(ticket,0,OrderOpenPrice()-5000*Point,0,0,Blue);

J'ai décidé d'utiliser des accolades inutiles pour m'assurer que l'expression ou les expressions de chaque bloc de code isolaient leurs appels de fonction à chaque bloc de code spécifique utilisé. C'est très ordonné, je ne veux pas que les blocs de code de l'EA sautent accidentellement leurs appels de fonction à cause d'un manque d'accolades.

4. Utilisation de la variable i comme numéro de ticket :

RE 4 : Je suis un peu surpris que vous ne compreniez pas mon interprétation de l'utilisation de la variable i comme un numéro de ticket fictif, et non comme un numéro de ticket. La variable i est simplement un chiffre qui est ajouté chaque fois que la fonction OrderClose() est exécutée. La variable i n'est pas définie comme un numéro de ticket réel. Je traite la fermeture partielle d'une commande. C'est le seul moyen que je connaisse pour accomplir cette tâche. Je serais ouvert à une solution différente. Avez-vous une meilleure solution ? :) Je pense qu'il pourrait y avoir une autre solution, mais pour l'instant, je ne vois pas de raison de changer le processus utilisé. Encore une fois, je suis ouvert aux idées productives.

5. ... si la commande OrderSend() échoue, leticket sera = -1 :

RE 5.. : Veuillez préciser à quelle fonction OrderSend() vous faites référence (soit le "rouleau à billes", le premier envoi d'ordre OU les envois d'ordre dans le cadre des appels de fonction de fermeture d'ordre) Cette clarification orienterait nos pensées dans la même direction et renforcerait la communication entre les deux membres de cette discussion.

1. Pourquoi le premier ou le deuxième (corrigez cette erreur s'il vous plaît) envoi d'ordre échoue ? (peut-être à cause d'une mauvaise utilisation de la fonction OrderSelect() et OrdersHistory...() ? Ceci sera corrigé).

2. Si l'envoi de la commande a échoué, pourquoi la variable ticket représente-t-elle -1 ? Je pense que si l'envoi de la commande a échoué, la variable ticket représenterait toujours 0 et non -1. Veuillez expliquer.

Merci.

 
WhooDoo22:

Simon,

RE 5.. : Veuillez préciser à quelle fonction OrderSend() vous faites référence (soit le "rouleau à billes", le premier envoi d'ordre OU les envois d'ordre dans le cadre des appels de fonction de fermeture de l'ordre).

1. Pourquoi l'envoi du 1er ou du 2ème (corrigez ceci plz) ordre échouerait-il ? (peut-être à cause d'une mauvaise utilisation de la fonction OrderSelect() et OrdersHistory...() ? Ceci sera corrigé).

2. Si l'envoi de la commande a échoué, pourquoi la variable ticket représente-t-elle -1 ? Je pense que si l'envoi de la commande a échoué, la variable ticket représenterait toujours 0 et non -1. Veuillez expliquer.

Merci.

Si OrderSend() échoue, pour quelque raison que ce soit ...."Retourne le numéro du ticket attribué à l'ordre par le serveur commercial ou -1 s'il échoue", extrait de la documentation. Vous utilisez la variable ticket pour conserver la valeur retournée. ... donc si l'OrderSend() échoue (pour quelque raison que ce soit), le numéro de votre ticket est maintenant -1... vous ne vérifiez pas, vous espérez juste le meilleur et vous utilisez ce que vous obtenez...


Vous utilisez la variablei comme numéro de ticket... . dans ce code. . .

OrderClose(i, 0.01, Ask, 30, CLR_NONE);

... d'après la documentation de OrderClose(), la première variable de l'appel de fonction est un int...ticket - Numéro unique du ticket de commande. Supposons que vous venez de fermer le ticket numéro34282694, qu'est-ce qui vous fait penser que faire i++ ; ensuite va vous aider de quelque manière que ce soit ? Peut-être pourriez-vous répondre à ce point particulier et expliquer comment cela fonctionne ?



"Je ne veux pas que les blocs de code de l'EA sautent accidentellement leurs appels de fonction à cause d'un manque d'accolades." ... sauter accidentellement ? Comment pensez-vous que cela puisse arriver ? Le CPU a une quinte de toux ou attrape un rhume ?


OK, donc vous dites que vous comprenez parfaitement tous les problèmes et pourtant, plutôt que d'écrire un code qui pourrait fonctionner dans le testeur de stratégie et aussi dans un environnement Live/Demo, vous avez spécifiquement choisi de paralyser votre code en l'écrivant de manière à ce qu'il ne fonctionne que dans le testeur de stratégie ? c'est ce que vous dites ?

 

Simon,

1. Si OrderSend() échoue, pour n'importe quelle raison . . .

RE 1. : Hypothétiquement, disons qu'une commande échoue... Si ce que vous dites est vrai, alors le nombre de tickets est soustrait de 1 (-1 du total des tickets). Donc, l'EA a envoyé et fermé 25 ordres réussis. Un signal arrive pour envoyer un ordre et la fonction OrderSend() échoue. Le nombre actuel de tickets est-il de 24 ? Si c'est le cas, la variable i indiquerait un faux compte de tickets parce que la variable i n'aurait pas soustrait 1 (-1). La variable i n'aurait simplement pas augmenté et il y a maintenant un faux compte de tickets. Le nombre correct de tickets est de 24 et le nombre de tickets de la variable i est de 25. La fonction OrderSelect() sélectionne maintenant le mauvais numéro de ticket. Sommes-nous d'accord ? :) Il semble donc que la solution évidente serait de soustraire 1 de la variable i si la fonction OrderSend() échoue. Ouf... J'essuie la sueur de mon front sur ce coup-là :).

2. le CPU a une quinte de toux ou attrape un rhume ?...

RE 2. : Typiquement, si j'ai un virus de la grippe, j'ai tendance à sauter quelques pensées sensées lorsque je parle. Je suppose qu'il en va de même pour les CPU :) L'humour mis à part, je crois que toute possibilité d'un appel de fonction qui serait sauté en raison de l'absence de "{ }", serait un problème simple à résoudre. Pourquoi ne pas être plus prudent ? S'il n'y a vraiment aucun risque qu'un appel de fonction soit ignoré, je ne vois pas pourquoi les accolades ne devraient pas être supprimées.

3. OK, donc vous dites...

RE 3 : Je crois que je comprends les problèmes que vous m'avez présentés jusqu'à présent.

4. que vous avez spécifiquement choisi de paralyser votre code en l'écrivant de manière à ce qu'il ne fonctionne que dans le Strategy Tester ?...

RE 4. : J'ai choisi de sacrifier ce que je croyais être le moins prioritaire et de garder ce que je croyais être le plus prioritaire. Ce choix a été fait en fonction des limites de temps et des niveaux de priorité.

Merci.

 
WhooDoo22:

Simon,

1. Si OrderSend() échoue, pour n'importe quelle raison . . .

RE 1. : Hypothétiquement, disons qu'une commande échoue... Si ce que vous dites est vrai, alors le nombre de tickets est soustrait de 1 (-1 du total des tickets). Donc, l'EA a envoyé et fermé 25 ordres réussis. Un signal arrive pour envoyer un ordre et la fonction OrderSend() échoue. Le nombre actuel de tickets est-il de 24 ? Si c'est le cas, la variable i indiquerait un faux compte de tickets parce que la variable i n'aurait pas soustrait 1 (-1). La variable i n'aurait simplement pas augmenté et il y a maintenant un faux compte de tickets. Le nombre correct de tickets est de 24 et le nombre de tickets de la variable i est de 25. La fonction OrderSelect() sélectionne maintenant le mauvais numéro de ticket. Sommes-nous d'accord ? :) Il semble donc que la solution évidente serait de soustraire 1 de la variable i si la fonction OrderSend() échoue. Ouf... J'essuie la sueur de mon front sur ce point :).

Si ce que j'ai dit est vrai ? lisez la documentation par vous-même, je vous ai donné un lien, cliquez dessus et lisez....

Vous ne comprenez pas du tout comment cela fonctionne... désolé, mais c'est le cas. Les numéros de tickets ne sont exécutés que de manière séquentielle dans le Strategy Tester... le nombre de tickets n'est pas soustrait... la variable que vous utilisez pour contenir le numéro de ticket = -1 vous ne soustrayez jamais la variable ticket de quoi que ce soit dans votre code... . .

"Le signal arrive pour envoyer la commande et la fonction OrderSend() échoue.Le nombre actuel de tickets est-il de 24 ?" Non, la variableticket contient le nombre -1, et non 25 ou 24, elle contient -1.) qui suivent échoueront parce qu'il n'y a pas de commande avec le numéro de ticket -1, c'est un numéro de ticket invalide... puis tous les appels OrderType() échoueront aussi parce que OrderSelect() a échoué... . . et ensuite OrderModify(ticket, . . .) échoue aussi... .

Comme vous l'avez dit, vous comprenez tous ces problèmes, mais vous avez choisi de les ignorer et de soumettre ce code au codebasee... Je suppose que je n'ai pas besoin de perdre plus de temps à essayer d'expliquer tout cela, car vous avez déjà une bonne maîtrise de la question. Désolé pour le dérangement, je ne prendrai pas plus de votre temps à essayer de vous aider.

 

Simon,

Je vais lire la documentation comme vous l'avez demandé.

1. la variable que vous utilisez pour contenir le numéro de ticket = -1

RE 1. : Quelle variable indiquez vous ? La variable i OU la variable ticket ?

2. la variable que vous utilisez pour contenir le numéro du ticket = -1

RE 2 : Peut-on également dire que "lorsqu'un envoi de commande échoue, le numéro de ticket est moins un (-1)" ?

si c'est le cas, si l'EA a envoyé et fermé 24 ordres réussis et a échoué à envoyer le 25ème ordre, le numéro de ticket actuel est moins un (-1). Correct ? :)

Évidemment, tout bloc de code contenant la fonction OrderSelect() échouera en raison de l'erreur "numéro de ticket invalide". Je pense que le numéro de l'erreur est 4108, comme vous l'avez écrit précédemment et comme la documentation l'indique également.

Je n'ai pas écrit "Je comprends tous ces problèmes". J'ai écrit,"Je crois que je comprends les problèmes que vous m'avez présentés jusqu'à présent."

3. "Comme vous l'avez dit, vous comprenez tous ces problèmes, mais vous avez choisi de les ignorer et de soumettre ce code au codebasee... Je suppose que je n'ai pas besoin de perdre plus de temps à essayer d'expliquer tout cela, car vous avez déjà une bonne maîtrise de la question. Désolé pour le dérangement, je ne prendrai pas plus de votre temps à essayer de vous aider."

RE 3 : Je n'ignore pas ces questions pour le moment. Ma discussion avec vous le montre. Je suis intéressé par tous les points que vous avez soulevés et que vous continuez à soulever. De plus, je respecte votre connaissance de la documentation MQL4 et j'apprécie votre désir d'aider. Cela n'est pas passé inaperçu et je vous en remercie.

Je vous remercie.

 

Bonjour à tous,

Dans ce code, je me rends compte que je ne peux pas modifier le prix du lot..... Pourquoi ?

tout le temps que j'ai essayé de le faire, j'ai eu une erreur....

Merci...et j'attends votre réponse....

Très bon travail WhooDoo22 !!!! ;)