YALNIZCA MUM / BAR - Mum nasıl kataloglanır veya ayrıştırılır? - LÜTFEN DÜZELT BENİ! - sayfa 4

 

Kod üzerinde biraz kontrolümüzü kaybettiğimize dair bir his var....

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

Hayır, burası kesinlikle doğru yer değil.

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

Bu 'hata işleme' hiçbir şeyi daha iyi yapmaz. Tekrar kontrol et.

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

Bu eğlence için yaratılmamıştır! Yürütülen bayrakları yeni bir çubukta sıfırlamak için kullanılmalıdır.

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

Çiftleri karşılaştırmak hakkında ne öğrendik ve bunun burada bir anlamı var mı?

 

Demek bahsettiğim gönderisini silmeye karar verdin... Aferin, bu çok yardımcı oldu!

 

Üzgünüm ama dün internette sorun oldu (mql4.com çalışmayı durdurdu). Bir şeyi düzeltmeye çalışıyordum ve ... çöküyordu

 //+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#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
  }   

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

Sana yardım etmek kolay değil. Neden şimdilik sadece bir strateji uygulamaya çalışmıyorsunuz, ancak uygun bir Open(), Close(), Count(), NewBar(), Signal() işleviyle .

Aşağıdaki blok, başlatma fonksiyonunun dışındadır. Bunun istendiğinden emin değilim.

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

Ben de senin gibi düşünüyorum , küçük adımlar . Sadece bir seçeneği ele alalım BULL4
Bazen kod tabanımda Ea gibi görünüyor

https://www.mql5.com/en/code/9156 - ilginç

Bunları anlıyorum (ama hissetmiyorum), ben bir bayrak ve amacını anlıyorum

ne düşünüyorsun? küçük adımlar hakkında

 //+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#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
     }
  }
//+------------------------------------------------------------------+
 

Evet, küçük adımlar, yani hatalar yönetilebilir...
Kod tabanı EA'dan belirli bir şeyi vurgulamak ister misiniz?

Bunu bir daha görmeyeceğim - Düzeltme adımlarını daha fazla görmezden gelirseniz size artık yardım etmeyeceğim, ben - veya bir başkası - yapmanızı tavsiye ettim:

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

Kayma 0 mı? Muhtemelen bir hata alırsınız. Ancak sabit hata işleme onu yakalayacaktır :-)

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

Bu yanlış değil, ideal değil ve en kötü durumda döngü içinde istediğinizi yapmıyor. En iyisi, 0'dan OrdersTotal'a kadar olan döngüleri kullanmaya bile başlama. Bunu okuyun: Döngüler ve Emirleri Kapatma veya Silme

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

Brokerlerinizin yayılımı nedir ve ticaret yapmak istediğiniz sembol için kaç haneniz var? Point'i doğru kullandığınızdan emin değilim (Konunuzun ilk sayfasını okuyun).

 
kronin :

Evet, küçük adımlar, yani hatalar yönetilebilir...
Kod tabanı EA'dan belirli bir şeyi vurgulamak ister misiniz?

Bence hayır, aydınlatacak bir şey yok, ne yazdığımı anlıyorum.

Bunu bir daha görmeyeceğim - Düzeltme adımlarını daha fazla görmezden gelirseniz size artık yardım etmeyeceğim, ben - veya bir başkası - yapmanızı tavsiye ettim:

Evet. NormalizeDouble'ın ne olduğunu biliyorum, anladığım kadarıyla (eğer varsa: euro/usd = 1.2390022129.....09..... Ve ihtiyacımız olan: 1.29893 bit! sonsuz değil) ama bunları yazamıyorum, olabilir mi? bunlar mı

if ( NormalizeDouble ( abc(),0 ) )

bool abc()

{

bool z,y,z;

x=Teklif;

y=Kapat[1]

z=x-y+3*Nokta

dönüş(z);

}

veya ?

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

Kayma 0 mı? Muhtemelen bir hata alırsınız. Ancak sabit hata işleme onu yakalayacaktır :-)

+1 problemim yok sonuç= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 1 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA1, 0 ,Blue);

hata halledilecek, güzel, sonra ne olacağını göreceğiz

Bu yanlış değil, ideal değil ve en kötü durumda döngü içinde istediğinizi yapmıyor. En iyisi, 0'dan OrdersTotal'a kadar olan döngüleri kullanmaya bile başlama. Bunu okuyun: Döngüler ve Emirleri Kapatma veya Silme

ÇOK İYİ BİR YAZI! Bunları en başında okumalıyım :)

Brokerlerinizin yayılımı nedir ve ticaret yapmak istediğiniz sembol için kaç haneniz var? Point'i doğru kullandığınızdan emin değilim (Konunuzun ilk sayfasını okuyun).

Bunları hatırlıyorum. Amiral Market Bid=1,29000 Ask = 1,29001 var. Bunlar benim bildiğim bir problem ama şu anda bir çözümüm yok iyi örneğini bulamadım.

kod yazıyorum...

 
Wodzuuu :

Evet. NormalizeDouble'ın ne olduğunu biliyorum, anladığım kadarıyla (eğer varsa: euro/usd = 1.2390022129.....09..... Ve ihtiyacımız olan: 1.29893 bit! sonsuz değil) ama bunları yazamıyorum, olabilir mi? bunlar mı


if ( NormalizeDouble ( abc(),0 ) )

bool abc()

{


Bir bool NormalizeDouble() yapamazsınız, ipucu işlev adında ve belgelerde de bulunur. . .

çift NormalizeÇift ( çift değer , int basamak )

 
RaptorUK :

Bir bool NormalizeDouble() yapamazsınız, ipucu işlev adında ve belgelerde de bulunur. . .

Doğruyu çok doğru olarak normalleştiremememiz üzücü :-(

Wodzuuu :
Evet. NormalizeDouble'ın ne olduğunu biliyorum, anladığım kadarıyla (eğer varsa: euro/usd = 1.2390022129.....09..... Ve ihtiyacımız olan: 1.29893 bit! sonsuz değil) ama bunları yazamıyorum, olabilir mi? bunlar mı

Hayır, Teklifi veya Kapat[1]'ı normalleştirmeniz gerekmez. Demek istediğim, sadece eşitlik için karşılaştırmamalısın.

Düşünmek:
Kapat[1] = 1.31933
Yeni_Bar
Kene1, Teklif = 1.31935
Tik2, Teklif = 1.31934
Tik3, Teklif = 1.31937
Tick4, Teklif = 1.31937
Kene5, Teklif = 1.31942


Kodunuz, Teklifin 1.31936 olduğu bir Onay işareti arar

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

Sinyalini kaçıracaksın. > kullanırsanız bu olmaz.

Wodzuuu :
+1 problemim yok sonuç= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 1 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA1, 0 ,Blue);

Bu onu daha iyi yapmaz. Puan cinsinden yaptığınız tüm hesaplamalar, anladığım kadarıyla Pip olmalıdır. Ancak, ECN brokerleriyle deneyimim yok, bu yüzden işe yarayabilir.

Wodzuuu :

Bu yanlış değil, ideal değil ve en kötü durumda döngü içinde istediğinizi yapmıyor. En iyisi, 0'dan OrdersTotal'a kadar olan döngüleri kullanmaya bile başlama. Bunu okuyun: Döngüler ve Emirleri Kapatma veya Silme

ÇOK İYİ BİR YAZI! Bunları en başında okumalıyım :)

Katılıyorum ve aynı yazar tarafından yazılmış daha birçok çok iyi makale var. Ayrıca kitap başlamak için fena bir yer değil.

Wodzuuu :

Amiral Market Bid=1,29000 Ask = 1,29001 var. Bunlar benim bildiğim bir problem ama şu anda bir çözümüm yok iyi örneğini bulamadım.

Broker web sitenizde EURUSD için minimum spreadin 0,1 olduğu belirtilmiştir. Ortalama yayılma 0,5'tir. <-- Bu pip cinsinden ifade edilmektedir! Yani 0,1 1 Noktadır. 0,5, 5 Puandır.
Yani sizin durumunuzda bir Pip 10*Puandır. Yayılma, bir fiyata yalnızca 3 puan eklediğiniz tüm mini hesaplamalarınızı karıştıracaktır.
'5 haneli komisyoncu için ayarla' araması yapın ve birçok örnek bulmalısınız.

 

SELAM :)

Sinyalleri ilettiğim için bu kod kötüyse , düzelmiştir . Sorunun tamamen farklı bir yerde olduğunu düşündüm , eşitlik işareti '=='......... '>=' elbette daha iyi bir fikir

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

Soru 1. MyPips'i bu işlevlerde mum içinde kullanabilir miyim? bool BULL4()

SAYI sorunu.

bunları buldum

https://www.mql5.com/en/forum/140097 WHRoeder tarafından

https://www.mql5.com/en/forum/123736 tarafından WHRoeder

Sayı nedir? https://docs.mql4.com/predefined/variables/digits ve https://docs.mql4.com/convert/doubletostr içinde

Uzman olduğun için bir şey söylemeliydim, önemli olabilir.
Şimdi MT4 platformunu kullanıyorum ve ondalık noktadan sonra 4 rakam görüyorum (Bid - Ask = genellikle 0.0001) . MQL4'te programladığımız şu anda olsun .
MT5'te ondalık noktadan sonra 5 basamak görüyorum . MQL4 ve MQL5 arasında fark vardır . Şu anda bu hız benim için önemli değil . EA için önemli olan iyi çalıştı.
Şu anda bunun hakkında konuşmak istemiyorum ( gerekmedikçe )

VE PROGRAM YAZDIM benim için güzel :) Peki ya Sen?

 //+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#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();   
  }
//+------------------------------------------------------------------+