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

 
Pourquoi ne pas corriger le code qui fait l'objet de ce fil de discussion avant de passer à une autre version... vous apprendriez tellement de choses si vous le faisiez.
 
Simon,


Un autre point...

RE : Il est important pour moi de souligner que ma méthode de codage était la plus rapide que j'ai pu mettre en place pour confirmer mes idées sur la capacité et la valeur de trading des volumes I/II. Je n'ai pas assez de temps dans ma vie pour tout coder "correctement" dès la première fois. En général, je commence les projets par phases. Exemple : Phase 1. Couvrir toutes les bases fonctionnelles, Phase 2. Nettoyer le code, 3. Ajouter de la beauté au côté visuel externe de l'EA. Actuellement, je travaille toujours à la phase 1. Il y a simplement beaucoup plus dans cet EA qu'un EA typique d'ordre d'envoi et de fermeture. Beaucoup de temps et de réflexion ont été consacrés à ce test. Le test sera passé lors de l'évolution du volume I. Je suis sûr que vous reconnaîtrez son caractère unique.

Cela dit, j'envisage une autre option pour "faire rouler le ballon" pour la première fonction OrderSend(). Je ne suis pas encore sûr de la direction que je vais prendre. En fin de compte, je vais remplacer complètement la condition "if(OrdersHistoryTotal()==0){" par une condition fiable. Vous avez souligné l'importance d'y réfléchir. J'apprécie votre encouragement.

Je vous remercie.

 
RaptorUK:

Qu'est-ce qui est variable et comment peut-il s'agir d'un numéro de ticket quand on lui fait ça ?

J'ai 4 trades en direct en ce moment, leurs numéros de tickets ne sont pas séquentiels....

Je pense que je sais ce que vous voulez dire, mais comment est-ce possible, ++ est une bonne question.
 
WhooDoo22:
Simon,


Un autre point...

RE : Il est important pour moi de souligner que ma méthode de codage était la plus rapide que j'ai pu mettre en place pour confirmer mes idées sur la capacité et la valeur commerciale des volumes I/II. Je n'ai pas assez de temps à perdre dans ma vie pour tout coder "correctement" du premier coup.

Tu dois, au moins, faire en sorte que cela fonctionne correctement d'un point de vue fonctionnel... ce code est très, très loin de cela. J'ai dit "doit"... c'est incorrect. . c'est incorrect, vous avez le choix, vous pouvez continuer à écrire votre code et avoir des Go d'erreurs lorsque vous exécutez le ST et avoir un code qui ne fonctionnera pas sur Live ou Demo... si vous le souhaitez. . si vous le souhaitez.
 

Simon,

Vous devez, au moins,..

RE : Je ne me préoccupe pas du temps qu'il faudra pour atteindre un objectif, je continue simplement à avancer jusqu'à ce que le projet soit terminé. Mon choix serait de ne pas avoir des Go d'erreurs :) Je préférerais écouter les critiques constructives de mes collègues codeurs, répondre et proposer des solutions aux problèmes de codage présentés. Ces solutions pourraient potentiellement produire moins d'erreurs pour les volumes I/II.

Merci.

 
WhooDoo22:

Simon,

Vous devez, au moins,..

RE : Je ne me préoccupe pas du temps qu'il faudra pour atteindre un objectif, je continue simplement à avancer jusqu'à ce que le projet soit terminé. Mon choix serait de ne pas avoir de Go d'erreurs :) Je préférerais écouter les critiques constructives de mes collègues codeurs, répondre et proposer des solutions aux problèmes de codage présentés. Ces solutions pourraient potentiellement produire moins d'erreurs pour les volumes I/II.

Merci.



Ce que RaptorUK a donné là, était et est toujours une critique constructive et des solutions réciproques à vos codes.
 

Simon, je vais utiliser une variable booléenne pour résoudre ce problème. Cette condition booléenne est une solution commune qui résoudra ce problème jusqu'à ce que j'atteigne la phase 2. Je peux alors donner au signal d'envoi du premier ordre une condition unique reflétant mon style de codage. Je vous remercie pour votre contribution.

 
WhooDoo22:

Simon, je vais utiliser une variable booléenne pour résoudre ce problème. Cette condition booléenne est une solution commune qui résoudra ce problème jusqu'à ce que j'atteigne la phase 2. Je peux alors donner au signal d'envoi du premier ordre une condition unique reflétant mon style de codage. Je vous remercie pour votre contribution.

Non, ce n'est pas le cas... Votre codage montre que vous ne comprenez pas, et si vous ne comprenez pas, vous ne pouvez pas le réparer.
 

Simon, je crois que je comprends, qu'est-ce que vous croyez que je ne comprends pas ?

Jusqu'à présent, nous avons discuté de deux choses importantes:

1. fixer les blocs de code d'urgence.

2. supprimer la condition actuelle, "if (OrdersHistoryTotal()==0{" et remplacer la condition par une condition différente (ma solution actuelle est de remplacer la condition actuelle par une condition booléenne pour commencer les commandes).

//example

if(x==false){OrderSend()...; x=true;}

/* now, x is true and the code block will not execute again. Of course, I would add code to save variables and if connection 
   is lost from the terminal server, all variables are saved. Simple.
   I understand the code is incorrect, but I wrote this for you to understand its concept, not a completely typed up code. */

Cette idée de sauvegarder les variables est une solution commune pour la déconnexion du serveur et a été suggérée par ubzen. C'est à lui que revient le mérite de cette idée.

Merci.

 
WhooDoo22:

Simon, je crois que je comprends, qu'est-ce que vous croyez que je ne comprends pas ?

La première ligne de votre fonction start() est celle-ci....

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);

... quel numéro de ticket sélectionne-t-elle ? Eh bien, le ticket a été déclaré sans variable initiale, ce sera donc 0, donc vous essayez immédiatement de sélectionner le ticket 0, ce qui générera une erreur, si vous vérifiez la valeur de retour de cet OrderSend(), vous verrez que ce sera probablement l'erreur 4108 ERR_INVALID_TICKET . . si vous avez compris comment utiliser correctement OrderSend(), pourquoi faire cela ?


Si vous aviez compris OrderHistoryTotal(), vous ne l'auriez pas utilisé de la manière dont vous l'avez fait et vous n'auriez pas dit qu'il s'agit de ... " rechercher l'historique des transactions de la variable unique ticket seulement,".

Si vous aviez compris le fonctionnement des accolades { } , vous n'auriez pas ajouté d'accolades inutiles... Elles n'apportent rien, elles ne rendent pas votre code plus clair ou plus facile à lire.

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

peut être remplacé par . . .

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

L'utilisation de la variable i comme numéro de ticket montre que vous ne comprenez pas comment les numéros de tickets fonctionnent en dehors du Strategy Tester, c'est-à-dire dans un compte Démo ou Live... .


Vous ne vérifiez pas si vos fonctions commerciales ont fonctionné ou échoué, ce qui est essentiel dans votre code, car vous utilisez ce qui suit...

ticket = OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);

... si l'OrderSend() échoueticket will = -1 alors plus tard dans votre code lorsque vous essayez d'utiliser cette variable pour sélectionner et commander par le numéro de ticket -1, cela échouera évidemment .... . .

Raison: