SEULEMENT BOUGIE / BAR - Comment cataloguer ou séparer les bougies ? - VEUILLEZ ME CORRIGER ! - page 5

 
Wodzuuu:

Question 1. Dois-je utiliser MyPips dans la bougie, dans ces fonctions ? bool BULL4()

Oui. Cependant, l'instruction if est-elle correcte dans la fonction BULL4() ? Je veux dire, cherchez-vous la bougie que vous calculez ?

Wodzuuu:

ET J'AI ÉCRIT UN PROGRAMME pour moi, c'est bien :) et pour vous ?

C'est le vôtre, donc il doit être bon pour vous, pas pour moi.

Quelques commentaires :

bool CheckForCloseBULL4()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            
   else return(false);   // <-- the else here is wrong. Use {} if you are unsure what is processed where
}


int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)   // <-- do it like you do it in the other loops!
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;  // <-- break? Why not using always the same code for the same thing? 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) //     Look at the for loop you used in CheckForCloseBULL4().       
        {
         if(OrderType()==OP_BUY) buys++; // <-- why this additional if? Simplify it to: 
        }                                //     if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY) buys++;  
     }
   return(buys);
  }
[Supprimé]  

Je corrige les dernières erreurs

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            else return(false);                                                                              // <-- the else is correct now
}

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)                                                                     // Loop is correct and use the same code
     {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY)buys++;
     }
   return(buys);
  }

J'ajoute un deuxième achat

d'achat à l'ouverture :

bool BULL42send()
   {
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
      else return(false);
   }

Open et CheckForClose et Close le même code que pour BULL41 (pips difrent seulement)

La fonction de démarrage ressemble à ça :

void start()
  {
   if(BULL4() && BULL41send() && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
     }
   if(BULL42send() && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }
//+------------------------------------------------------------------+

Et maintenant, j'ai besoin d'un drapeau, de réinitialiser les signaux et de changer la fonction de démarrage.

Mon imagination dit :

Nouvelle barre :

bool New_Bar = false;

bool Fun_New_Bar()
   {
   static datetime New_Time=0;
   New_Bar=false;   
   if(New_Time!=Time[0])
      {
         New_Time=Time[0];
         New_Bar=true;
      }
   }

et la fonction de démarrage ressemble à ça

void start()
  {
   bool SignalBULL41Executed=false;
   bool SignalBULL42Executed=false;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

Le code fonctionne mais j'ai peut-être quelques erreurs


	          
[Supprimé]  

Il me manque ResetSignals() pour que cela ne fonctionne pas bien.

 
Wodzuuu:

Je corrige les dernières erreurs
...
...
...

Le code fonctionne mais j'ai peut-être quelques erreurs


Je n'ai pas dit, l'autre est faux dans la fonction CheckForCloseBULL41(), parce que ce n'était pas bien formulé. Vous n'avez rien changé. Si plusieurs des ordres ouverts correspondent à ce qui est indiqué ci-dessous, vous aurez des problèmes car la boucle ne passe pas par tous les ordres.

if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )

Vous n'avez pas besoin des drapeaux de signal tant que vous n'ouvrez de nouveaux ordres que sur un nombre spécifique d'ordres déjà ouverts. Cela empêche également le code d'ouvrir plus d'ordres.

if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Votre fonction Fun_New_Bar() n'est pas correcte.

[Supprimé]  

1. autre problème

si cela n'est pas correct, je vais chercher à nouveau.

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
        {
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
            {
            if(OrderOpenPrice()+8*MyPips < Ask)
               {
                  return(true);
               }
            }
         }
    }    
   return(false); 
}

2. problème de la nouvelle barre

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);            
      }

   return(false);
   }

3. problème de signal de réinitialisation

void start()
  {
   bool SignalBULL41Executed;
   bool SignalBULL42Executed;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

si j'ai écrit les mauvais points 2 et 3, je n'aurai aucune idée pour les réparer, je demanderai les plus grandes directions si je peux.

 

1. autre problème
Fixé

2. Problème de la nouvelle barre
Corrigé

3. problème du signal de réinitialisation

void start()
  {
   bool SignalBULL41Executed;  //<-- if defined inside the start function, the flags get reset with every tick.
   bool SignalBULL42Executed;  //    define it outside in global scope.
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position   //<-- As far as I remember, you defined this as bool. Do only set the flag, if the function returns true.
       SignalBULL41Executed=true;            //    change to: if(OpenBULL41())SignalBULL41Executed=true;
     }
Les corrections ci-dessus concernent les drapeaux. Mais la question est de savoir si vous en avez besoin. Si vous n'ouvrez qu'un nouvel ordre, si un nombre spécifique d'ordres est déjà ouvert, vous n'en avez probablement pas besoin. C'est ce que je voulais dire avec l'expression "marqué en jaune" :
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Mais ne vous inquiétez pas, cela fonctionne aussi avec les drapeaux et vous pouvez les éliminer plus tard, lorsqu'il s'avère qu'ils sont obsolètes.

[Supprimé]  

Je pense que le drapeau n'est pas nécessaire, mais peut être utile un jour.

Comment avoir deux EAdans un seul EA ?
J'ai fait des copies de l' EA BULL4 et changé l' idex de BULL6 et l'espacement des pips.
Copier l'EA Bull4 + l'EA Bull6 en une nouvelle EA (tout ce qui se trouve après le chiffre ()) Faire les changements dans la fonction start () et magicma2...

Mon EA fonctionne très bien, les scénarios n'interfèrent pas entre eux . Je suis content.

Je tenais à vous remercier pour votre aide, sans votre aide et surtout votre soutien Kronin je ne l' écrirais pas .

Le sujet est terminé à mon avis.

Salutations

 
Wodzuuu:

Mon EA fonctionne très bien, les scénarios n'interfèrent pas les uns avec les autres . Je suis content.

Je voulais vous remercier pour votre aide, sans votre aide et surtout votre soutien Kronin je ne l' aurais pas écrit .

Vous êtes le bienvenu. Merci pour le bon feedback.