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

 
Wodzuuu :

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

Evet. Ancak, BULL4() işlevindeki if ifadesi doğru mu? Yani, hesapladığın o mumu mu arıyorsun?

Wodzuuu :

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

O senin, bu yüzden senin için iyi olmalı, beni oluşturmamalı.

Bazı yorumlar:

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

son hataları düzeltiyorum

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

ikinci alım ekliyorum

açma durumu:

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

BULL41 ile aynı kodu açın ve CheckForClose ve Kapatın (sadece pipler farklıdır)

Başlat işlevi şöyle görünür:

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

Ve şimdi bayrağa, sıfırlama sinyallerine ve başlatma işlevini değiştirmeye ihtiyacım var

Hayal gücüm diyor ki:

Yeni Çubuk:

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

ve başlangıç böyle görünüyor

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

Kod çalışıyor ama bazı hatalarım olabilir


	          
 

ResetSignals() işlevini özlüyorum, bu yüzden iyi çalışmıyor

 
Wodzuuu :

son hataları düzeltiyorum
...
...
...

Kod çalışıyor ama bazı hatalarım olabilir


CheckForCloseBULL41() işlevinde aksinin yanlış olduğunu söylemedim çünkü biçimlendirilmemiş. Hiçbir şeyi değiştirmedin. Aşağıdakilerle eşleşen birden fazla açık sipariş varsa, döngü tüm siparişlerden geçmediği için sorun yaşarsınız.

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

Yalnızca önceden açık olan belirli sayıda sipariş için yeni siparişler açtığınız sürece sinyal bayraklarına ihtiyacınız yoktur. Bu aynı zamanda kodun daha fazla sipariş açmasını da engeller.

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

Fun_New_Bar() işleviniz doğru değil.

 

1. başka sorun

Bu doğru değilse tekrar ararım.

 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. Yeni Bar sorunu

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

   return ( false );
   }

3. sıfırlama sinyali sorunu

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

2 ve 3 numaralı kötü noktaları yazarsam , onları düzeltmek için hiçbir fikrim olmayacak , Yapabilirsem en büyük talimatları isteyeceğim .

 

1. başka sorun
Sabit

2. Yeni Bar sorunu
Sabit

3. sıfırlama sinyali sorunu

 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;
     }
Yukarıdaki düzeltmeler bayraklar içindir. Ama açık soru şu ki, buna ihtiyacınız var mı? Yalnızca yeni bir sipariş açarsanız, belirli sayıda sipariş zaten açıksa, muhtemelen buna ihtiyacınız olmaz. Sarı işaretli ifadeyle kastettiğim buydu:
 if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )

Ancak endişelenmeyin, bayraklarla da çalışır ve daha sonra, eski oldukları ortaya çıktığında onları ortadan kaldırabilirsiniz.

 

Bayrağın gerekli olmadığını düşünüyorum , ancak bir gün yararlı olabilir .

Bir EA'da iki EA nasıl olur ?
EA BULL4'ün kopyalarını çıkardım ve BULL6 idex'ini ve aralık piplerini değiştirdim .
EA Bull4 + EA Bull6'yı kopyalayın çok yeni EA ( rakamdan () sonraki her şey ) start () ve magicma2 işlevinde değişiklikler yapın...

EA'm çok iyi çalışıyor , senaryolar birbirine karışmıyor . mutluyum .

Yardımınız için teşekkür etmek istedim , yardımınız ve özellikle Kronin desteğiniz olmasa yazmazdım .

Konu bence bitmiştir.

Saygılarımızla

 
Wodzuuu :

EA'm çok iyi çalışıyor , senaryolar birbirine karışmıyor . mutluyum .

Yardımınız için teşekkür etmek istedim , yardımınız ve özellikle Kronin desteğiniz olmasa yazmazdım .

Rica ederim. Güzel geri bildirim için teşekkürler.