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

 
Encore une fois, il y a plusieurs façons de sélectionner les ordres, par exemple, je pourrais utiliser des booléens pour vérifier si un ordre est ouvert ou fermé. Exemple : L'ordre est envoyé, cinq booléens sont mis à true. Lorsque les moyennes mobiles commencent à se croiser, les booléens sont mis à faux. Si certaines variables booléennes sont vraies et que certaines moyennes mobiles se croisent, certaines variables booléennes sont déclarées fausses et un certain lot de l'ordre est fermé. Il existe d'autres moyens, mais je n'y ai pas beaucoup réfléchi. Je souhaite simplement vous fournir une solution. J'espère qu'elle était satisfaisante. Je crois que je trouverais un moyen plus simple de procéder, mais là encore, je n'y ai pas réfléchi. C'est toujours important, mais pas aussi difficile à coder que MF ou MM dans cette stratégie. Merci.
 
Si j'ai un compte en direct avec lequel j'ai déjà négocié et qu'il n'y a pas d'ordres ouverts en direct sur ce compte, si je lance votre EA sur l'EURUSD M30, que va-t-il se passer ?
 

Au fait, j'ai exécuté votre EA dans le testeur de stratégie et je me suis retrouvé avec un fichier journal de 11 Go d'erreurs ... par exemple ...

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30 : Erreur OrderModify 1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30 : close #6 buy 0.01 EURUSD at 1.36028 sl : 1.31028 at price 1.35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30 : ticket 6 inconnu pour la fonction OrderModify

Impossible de modifier le ticket n°6 car il vient d'être fermé . . .
 
WhooDoo22:
Je pense qu'il y a plusieurs façons de sélectionner les commandes, Toutes les méthodes de sélection des commandes devraient utiliser la fonction OrderSelect(). Cela dit, je ne vois pas pourquoi cela échouerait car l'EA exécute clairement la fonction OrderClose() pour tous les ordres sans erreur dans le testeur de stratégie.

Votre orderClose ne fonctionne clairement pas. Si vous aviez vérifié vos codes de retour, vous l'auriez su. Votre orderSelect ne fonctionne pas, mais vous ne vérifiez pas.

si I n'est pas un numéro de ticket, votre orderSelect échoue et tout le reste aussi.

Si I est un numéro de ticket, le numéro de ticket suivant n'est PAS i+1 (sauf dans le testeur).

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

Simon,

Si j'ai un compte Live...

RE : Je vous déconseille fortement d'utiliser le volume I sur un compte réel ! Bien sûr, c'est à vous de faire le choix, mais en votre nom, je vous déconseille fortement de l'exécuter sur un compte réel tant que son évolution du volume I au volume II n'est pas terminée. Le volume I est encore en cours de développement et ne doit pas être exécuté avant qu'il ne soit complètement codé. Je ne suis pas sûr de ce qui se passerait car je ne l'ai pas testé moi-même sur un compte LIVE. Je comprends son manque d'achèvement et j'ai choisi de répondre à ses exigences essentielles avant de commencer à le tester sur un compte LIVE.


Au fait,...

RE : Je crois que je comprends ce qui se passe dès le départ avec cette erreur... Cette erreur reflète une erreur dans le bloc de code "EMERGENCY SL". Je n'ai jamais vraiment concentré ma puissance sur ce bloc, car il n'est pas aussi difficile à coder. Je l'ai partiellement codé et n'ai pas achevé sa maturité. Le bloc de code "EMERGENCY SL" manque de personnalisation importante. Je suis convaincu que si vous supprimiez complètement les blocs de code "EMERGENCY SL" SELL et BUY, vous ne recevriez pas la liste d'erreurs de 11 gigas. La raison pour laquelle il y a 11 gigas au départ est que je crois que c'est la même erreur qui se répète encore et encore au cours de l'histoire testée.

Merci.


William,

Je dois dire que je n'ai pas autant d'antécédents de discussion de code avec vous que Simon, mais je souhaite continuer à avancer avec votre post (merci pour votre post ! Il est bienvenu.).

Qu'est-ce que vous souhaitez voir dans le volume I/II ?

Je suis strictement en train de faire des tests et d'ajouter du code essentiel pour les tests afin de garantir sa valeur commerciale. J'affinerai ensuite ce qu'il reste des problèmes de code pour assurer la sécurité des transactions sur LIVE/DEMO.

Merci.

 
RaptorUK:
Si j'ai un compte en direct avec lequel j'ai déjà négocié et qu'il n'y a pas d'ordres ouverts en direct, si j'exécute votre EA sur l'EURUSD M30, que se passera-t-il ? prendra-t-il des transactions ?

WhooDoo22:

Simon,

Si j'ai un compte en direct...

RE : Je vous déconseille fortement d'exécuter le volume I sur un compte réel ! Bien sûr, c'est à vous de faire le choix, mais en votre nom, je vous déconseille fortement de l'exécuter sur un compte réel tant que son évolution du volume I au II n'est pas terminée. Le volume I est toujours en cours de développement et ne doit pas être exécuté avant qu'il ne soit complètement codé. Je ne suis pas sûr de ce qui se passerait car je ne l'ai pas testé moi-même sur un compte LIVE. Je comprends son manque d'achèvement et j'ai choisi de répondre à ses exigences essentielles avant de commencer à le tester sur un compte LIVE.


Le point que j'essayais de faire et que je vous encourage à regarder est que s'il y a un historique de compte, ces lignes dans votre code empêcheront toute prise de position...

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


Les autres endroits où un ordre est placé en utilisant OrderSend() sont ceux où il y a un ordre existant ouvert... donc s'il y a d'anciens ordres dans l'historique, votre EA ne placera jamais aucune transaction... si vous aviez testé votre code sur Demo ou Live, vous l'auriez probablement découvert.

 

Simon,

Ce que j'essayais de dire...

RE : Compris. Pensez-vous qu'il soit possible d'utiliser la fonction OrderSelect() pour rechercher une variable unique du ticket, puis en dessous se trouvera le bloc de code contenant le "if (OrdersHistoryTotal()==0){". Cela ne fonctionnerait-il pas CAR la fonction OrderSelect() sélectionne la variable unique "ticket" et la fonction OrdersHistoryTotal() recherche l'historique des transactions de la variable unique "ticket" uniquement, en raison de la fonction OrderSelect() ci-dessus. L'instruction "if" recherche uniquement les ordres dans l'historique pour une variable spécifique, la variable unique du ticket.

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

Merci.

 
WhooDoo22:

Simon,

Ce que j'essayais de dire...

RE : Compris. Pensez-vous qu'il soit possible d'utiliser la fonction OrderSelect() pour rechercher une variable unique du ticket, en dessous se trouvera le bloc de code contenant le "if OrdersHistoryTotal()==0{". Cela ne fonctionnerait-il pas PARCE QUE la fonction OrdersHistoryTotal() recherche uniquement les transactions précédentes de la variable unique du ticket ? L'instruction "if" ne recherche que les ordres dans l'historique pour une variable spécifique, la variable ticket unique.

Merci.

Je pense que vous êtes un peu confus... vous avez dit"Cela ne fonctionnerait-il pas PARCE QUE la fonction OrdersHistoryTotal() recherche uniquement les transactions précédentes de la variable ticket unique ?"C'est faux, consultez la documentation, la fonctionOrderHistoryTotal() fait ceci ....

"Renvoie le nombre d'ordres fermés dans l'historique du compte chargé dans le terminal. La taille de la liste de l'historique dépend des paramètres actuels de l'onglet "Historique du compte" du terminal."


Cela n'a rien à voir avec les numéros de ticket, les variables de ticket, les nombres magiques ou quoi que ce soit d'autre... Cela renvoie le nombre total de transactions dans le pool d'historique... le seul facteur limitant est ce que vous avez choisi d'afficher dans l'onglet Historique du compte... Tout l'historique, les derniers mois... Tout l'historique, les 3 derniers mois, le dernier mois ou une période personnalisée.
 
Un autre point... si j'ai utilisé votre EA et qu'une transaction a été effectuée... alors j'ai besoin d'éteindre mon PC pendant quelques minutes, lorsque je redémarre MT4 et que votre EA démarre, il ne trouvera jamais l'ordre ouvert. . tous vos appels OrderSelect() sont sélectionnés par ticket ... soit en utilisant votre variable ticket ou votre variablei, qui n'ont aucun moyen de contenir le numéro du ticket de mon ordre ouvert.
 

Simon,

Je crois que tu t'embrouilles un peu...

RE : Le volume II doit commencer le processus d'envoi d'ordre basé sur une condition. Une fois que le premier ordre a été envoyé (sur la base de la condition), la fonction OrderClose() bloque l'exécution de toutes les transactions futures. Essayez de voir cela comme un cycle. Faites rouler la balle en fonction de la condition, puis le cycle est lancé une fois que le premier ordre (ordre de roulement de la balle) a été fermé. Le cycle continue à traiter les chiffres et à vérifier les conditions actives jusqu'à ce que les conditions futures soient remplies.

Merci de votre compréhension.

Raison: