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

 

J'ai l'impression que nous perdons un peu le contrôle du code. ....

        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close

Non, ce n'est certainement pas le bon endroit.

   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  } 

Cette "gestion des erreurs" n'améliore en rien la situation. Vérifiez à nouveau.

bool Fun_New_Bar()                              // bool             

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

Ce n'est pas créé pour le plaisir ! Il doit être utilisé pour réinitialiser les drapeaux exécutés sur une nouvelle barre.

if(Bid==Close[1]+3*Point)  

Qu'avons-nous appris sur la comparaison des doubles et si cela a un sens ici ?

 

Vous avez donc décidé de supprimer votre message auquel je fais référence... Bravo, c'est très utile !

 

Désolé mais hier il y a eu un problème avec internet (mql4.com ne fonctionne plus). J'ai essayé de corriger quelque chose et ... effondrement

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy
#define MAGICMA2  2001        // red strategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+
bool New_Bar = false;

bool Fun_New_Bar()                              // bool             

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

//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

//--- FOR BLUE---------------------------------------------------------
int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//--- FOR RED--------------------------------------------------------------
int OpenOrders_BULL6(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2)    // magic ma 2 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }



//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
   return(true);
   } 

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
//--------------------------- blue bull4 magicma1 
void OpenBULL41()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      return(true);
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }      
  }
  
void OpenBULL42()
  {
   int    result;
   
   for(int i=1;i<=OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(Ask>OrderOpenPrice()+2*Point)  
            {
             result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
             return;
            }
          if (result == -1)
             {
             int e = GetLastError();
             Print(e);
             }    
        }
     }
  }  
//--------------------------- red bull6 magicma2 
void OpenBULL61()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  }
  
void OpenBULL62()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }     
  }

void OpenBULL63()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }    
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose_BULL4()
{

   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)          // add: -1
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);

      }
   }
} 

void CheckForClose_BULL6()
{

   if(OrderOpenPrice()+8*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);

      }
   }
}  
  
//+------------------------------------------------------------------+
//| flag                               |
//+------------------------------------------------------------------+ 
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())
{
   SignalBULL41Executed=true;
   return(SignalBULL41Executed);
}


  
  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
if(BULL4())             
  if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
  {
    OpenBULL41();//do open buy position
    SignalBULL41Executed=true;
    if ( SignalBULL41Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
  {
    OpenBULL42();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL42Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
// ----------------bull6  
if(BULL6())             
  if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
  {
    OpenBULL61();//do open buy position
    SignalBULL61Executed=true;
        if ( SignalBULL61Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
  {
    OpenBULL62();//do open buy position
    SignalBULL62Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
  {
    OpenBULL63();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }   

  }
//+------------------------------------------------------------------+
 

Il n'est pas facile de vous aider. Pourquoi n'essayez-vous pas d'implémenter une seule stratégie pour le moment, mais avec unefonction appropriée, Open(), Close(), Count(), NewBar(), Signal().

Le bloc ci-dessous est en dehors de la fonction de démarrage. Je ne suis pas sûr que ce soit souhaité.

Fun_New_Bar();
if (New_Bar==false);               // <-- ???
bool SignalBULL41Executed=false;   // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false;   //     its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())                  // <-- Your Fun_New_Bar() function doesn't return anything,
{                                  //     you set the global New_Bar variable with the function. 
   SignalBULL41Executed=true;      // <-- You should set it to false on a new bar.    
   return(SignalBULL41Executed);   // <-- ???
}
 

Je pense la même chose que vous, des petits pas. Prenons une seule option BULL4
Parfois, il ressemble à Ea pour mon codebase.

https://www.mql5.com/en/code/9156 - intéressant

Je les comprends (mais je ne les ressens pas), c'est un drapeau etje comprends son but.

Que pensez-vous des petits pas?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy


//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

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

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }
//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid==Close[1]+3*Point)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
  }
//+------------------------------------------------------------------+
 

Oui, de petits pas, donc les erreurs sont gérables...
Voulez-vous mettre en évidence quelque chose de spécifique de la base de code EA ?

Je ne reverrai pas ce problème - je ne vous aiderai plus si vous continuez à ignorer les étapes de correction que j'ai - ou que quelqu'un d'autre - vous a conseillé de suivre :

if( Bid==Close[1]+3*Point)

Le glissement est de 0 ? Vous obtiendrez probablement une erreur, mais le traitement de l'erreur fixe la rattrapera :-)

result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

Ce n'est pas faux, mais ce n'est pas idéal et dans le pire des cas, cela n'apporte pas ce que vous voulez dans la boucle. Au mieux, ne commencez même pas à utiliser des boucles de 0 à OrdersTotal. Lisez ceci : Boucles et fermeture ou suppression de commandes

for(int i=0;i<OrdersTotal();i++)

Quel est le spread de votre courtier et combien de chiffres avez-vous pour le symbole que vous voulez négocier ? Je ne suis pas sûr que vous utilisiez correctement Point (lire sur la première page de votre fil).

 
kronin:

Oui, de petits pas, donc les erreurs sont gérables...
Voulez-vous souligner quelque chose de spécifique de la base de code EA ?

Je pense que non, rien à éclaircir, je comprends ce que j'ai écrit.

Je ne le reverrai pas - je ne vous aiderai plus si vous continuez à ignorer les étapes de correction que je - ou quelqu'un d'autre - vous a conseillé de faire :

Oui. Je sais ce que fait NormalizeDouble, je pense que j'ai compris ( si j'ai : euro/usd = 1.2390022129.....09.... Et nous avons besoin de : 1,29893 end ! pas l'infini ) mais je n'arrive pas à écrire ça, est-ce que ça pourrait être ça ?

if ( NormalizeDouble ( abc(),0 ) )

bool abc()

{

bool z,y,z ;

x=Bid ;

y=Fermeture[1]

z=x-y+3*Point

return(z) ;

}

ou ?

Si ( NormalizeDouble ((Close[1]-Bid) +3*point),0 ) ;

Le glissement est de 0 ? Vous obtiendrez probablement une erreur, mais le traitement d'erreur fixe l'attrapera :-)

Je peux avoir +1 sans problème result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue) ;

la gestion des erreurs, bien, nous voyons ce qu'il y aura après

Cette méthode n'est pas mauvaise, mais elle n'est pas idéale et, dans le pire des cas, elle ne fait pas ce que vous voulez dans la boucle. Au mieux, ne commencez même pas à utiliser des boucles de 0 à OrdersTotal. Lisez ceci : Boucles et fermeture ou suppression des commandes

TRES BON ARTICLE ! Je devrais les lire dès le début :)

Quel est le spread de votre courtier et combien de chiffres avez-vous pour le symbole que vous voulez négocier ? Je ne suis pas sûr que vous utilisiez correctement le point (lu sur la première page de votre fil de discussion).

Je me souviens de ceux-ci. J'ai Admiral Market Bid=1,29000 Ask = 1,29001. C'est un problème que je connais, mais je n'ai pas de résolution en ce moment, je n'ai pas trouvé le bon exemple.

Je suis en train d'écrire un code...

 
Wodzuuu:

Oui. Je sais ce que fait NormalizeDouble, je pense que je comprends ( si j'ai : euro/usd = 1.2390022129.....09.... Et nous avons besoin de : 1,29893 fin ! pas l'infini ) mais je ne peux pas écrire ces, pourrait être ceux-ci ?


if (NormalizeDouble( abc(),0 ) )

bool abc()

{


Vous ne pouvez pas NormalizeDouble() un bool, l'indice est dans le nom de la fonction et dans la documentation aussi . . .

doubleNormalizeDouble(double valeur,intchiffres)

 
RaptorUK:

Vous ne pouvez pas normaliser un bool avec NormalizeDouble(), l'indice se trouve dans le nom de la fonction et dans la documentation.

C'est dommage que nous ne puissions pas normaliser le vrai pour qu'il soit très vrai :-(

Wodzuuu:
Oui. Je sais ce que fait NormalizeDouble, je pense que je comprends ( si j'ai : euro/usd = 1.2390022129.....09.... Et nous avons besoin de : 1,29893 fin ! pas l'infini ) mais je ne peux pas écrire ces, pourrait être ceux-ci ?

Non, vous n'avez pas à normaliser Bid ou Close[1]. Ce que je voulais dire, c'est que vous ne devez pas les comparer pour l'égalité.

Imaginez :
Close[1] = 1,31933
Nouvelle_Barre
Tick1, Bid = 1.31935
Tick2, Bid = 1.31934
Tick3, Bid = 1.31937
Tick4, Bid = 1.31937
Tick5, Offre = 1.31942


Votre code recherche bien un tick où Bid est 1.31936.

if( Bid==Close[1]+3*Point)

Vous manquerez votre signal. Cela ne se produira pas si vous utilisez > .

Wodzuuu:
Je peux avoir +1 sans problème result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue) ;

Cela ne l'améliore pas beaucoup. D'après ce que j'ai compris, tous vos calculs en Points devraient être des Pips. Cependant, je n'ai pas d'expérience avec les courtiers ECN, donc cela pourrait fonctionner.

Wodzuuu:

Ce n'est pas mauvais, mais pas idéal et dans le pire des cas, cela ne fait pas ce que vous voulez à l'intérieur de la boucle. Au mieux, ne commencez même pas à utiliser des boucles de 0 à OrdersTotal. Lisez ceci : Boucles et fermeture ou suppression de commandes

TRÈS BON ARTICLE ! Je devrais les lire dès le début :)

D'accord et il y a beaucoup de très bons articles plus, écrit par le même auteur. Aussi le livre n'est pas un mauvais endroit pour commencer.

Wodzuuu:

J'ai Admiral Market Bid=1,29000 Ask = 1,29001. C'est un problème que je connais, mais je n'ai pas de résolution en ce moment, je n'ai pas trouvé le bon exemple.

Sur le site de votre courtier, il est indiqué que pour l'EURUSD, le spread minimal est de 0,1. Le spread moyen est de 0,5. <-- Ceci est exprimé en pips ! Donc 0,1 est 1 point. 0,5 correspond à 5 points.
Donc dans votre cas, un Pip est 10*Point. Le spread va confondre tous vos mini calcul où vous n'ajoutez que 3 points à un prix.
Cherchez "adjust for 5 digit broker" et vous devriez trouver de nombreux exemples.

 

HI :)

Si ce code était mauvaisparce que je passais des signaux, il s'est amélioré.Je pense que le problème est entièrement à un autre endroit, pas dans le signe d' égalité '=='......... le '>=' est une meilleure idée bien sûr.

if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)

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

Problème de DIGIT.

J'ai trouvé ceci

https://www.mql5.com/en/forum/140097 par WHRoeder

https://www.mql5.com/en/forum/123736 par WHRoeder

Qu'est-ce que Digit ? dans https://docs.mql4.com/predefined/variables/digits et https://docs.mql4.com/convert/doubletostr

Parce que vous êtes l' expert, j'aurais dû dire quelque chose, cela pourrait être important.
Maintenant, j'utilise laplate-forme MT4 et je vois 4 chiffres après la virgule (Bid-Ask= 0,0001 habituellement). Pour le moment, nous avons programméen MQL4 et nous laissons faire.
Dans MT5, je vois5 chiffres après la vir gule. Il y a unedifférence entre MQL4 etMQL5. Pour le moment, cette différence n'a pasd'importance pour moi. Il est importantque notre EA fonctionne bien.
Je ne veux pas en parler pour le moment (sauf si nécessaire)
.

Et j'ai écrit un programme pour moi, c'est bien :) et vous ?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+

// nothing yet, one moment

//+------------------------------------------------------------------+
//| These are adjusted for 5/4 digit brokers                           |
//+------------------------------------------------------------------+

double  MyPips;        // slippage and others

int init()
  {
    if (Digits == 5)    // Adjust for five (5) 
    {                
         MyPips=Point*10; 
    } 
    else                // Adjust for four (4, and ..)
    {
         MyPips=Point*1;  
    }
  }
 
//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

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

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }

//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid>=Close[1]+MyPips*3)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

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);
}

//+------------------------------------------------------------------+
//|  close                               |
//+------------------------------------------------------------------+

void CloseBULL4()
{
   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 ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )               
            Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  
      } 
}

//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
     
   if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();   
  }
//+------------------------------------------------------------------+