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

 
Wodzuuu :

EA'mı hala anlamayanlar için bir hikaye yaz : D hehehe


Olay mumlardır - alım satım veya kapanış için çeşitli seçenekler sunar .

Yazdıklarınızı okumaktansa kodunuza bakarak daha fazlasını anlıyorum. . . ;-)
 

İkinci işleviniz olarak TV şovlarını izlemek yerine, Kitabı okuyup anlamayı düşünmelisiniz. ;-)

Elde etmeye çalıştığınız şey basit ve birçok stratejide kullanılıyor, ancak kodunuz - ve hikayeleriniz - kafa karıştırıcı ve kısmen yanlış - en azından kod .... hikayelerden emin değilim.

 //Pseudo code

if (NewBar) ResetSignals();                 //Set all SignalxExecuted to false
if (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
  SignalBuy1Executed= true ;                //Set Signal to exectued to prevent a reuse in the same bar
}

if (SignalBuy2&&!SignalBuy2Executed&&OpenOrders()== 2 ){
//do open buy position
  SignalBuy2Executed= true ;                //Set Signal to exectued to prevent a reuse in the same bar
}

SignalBuy1=CheckForOpenBull42();          //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62();	  //Check for Signal2 condition is true	

if(OpenOrders()>0)CheckForClose();        //Check any order needs to be closed


//and so on.....

Neden şu an için yalnızca bir sinyal uygulamaya çalışmıyor ve gerekli işlevleri kodlamaya odaklanmıyorsunuz? Bir sinyal için iyi bir kodunuz varsa, diğer sinyalleri uygulamak muhtemelen kolaydır ve o zaman birçok fonksiyon zaten oradadır.

Daha sonra, basitleştirmek için Diziler ve diğer işlevleri kullanabilirsiniz, ancak yukarıdaki kodunuzun basitleştirilmesi şu anda en büyük sorununuz olmamalıdır.

 

Kronin Evet! beni anlıyorsun :), stratejilerin çoğu tek bir EA'da.
150 politika yazmam gerekiyor ve aynı anda aynı grafik üzerinde yürümeli ve tüm stratejileri bir kerede yürütmeli . 150 EA'yı aynı anda çalıştırdığımda bilgisayarım patlayacak - öyle düşünüyorum .

Bundan sonra, anlamsız çünkü yalnızca bir strateji EA'ya sahip olabilirsiniz ve birçoğu zaten içeride.

Tabii ki, strateji birbirine müdahale edemez ve biri çalıştırıldığında ikincisi de çalışabilir ve strateji 1, 3 ve 5'i çalıştırabilir ve aynı anda strateji (1,3,5) çalıştırabilirim.

Daha fazla hikaye yazmayacağım :)


Kodum yanlış - biliniyor , iki stratejiyi tek bir EA'ya koymaya çalıştım , kod iyi çalışıyor ama bütünlük iyi çalışmıyor

Kodunuz çok ilginç, çalışacağım , lütfen bana biraz zaman verin

 

Merhaba arkadaşlar, uzun bir çalışmadan sonra kod ve Kronin kodundan gelen bilgiler aracılığıyla yapılandırılır ve çalışır .
Kod , tek bir EA'da iki strateji sunar


1. Küçük bir mum satın alma senaryosu için mavi okla işaretlenmiştir , SATIN AL için iki seçenek vardır
2. Ortalama mum için satın alma senaryosu mumu kırmızı bir okla işaretlenmiştir , SATIN AL için üç seçenek vardır


1 puan = 1 pip'in uygun olduğu bir durumum da var ( sorunu çözmek daha sonradır )
( NewBar ) ResetSignals () if seçeneklerini kullanmayın çünkü hatanın nedeninin onlar olmadığını düşünüyorum

start() blue'daki bir PART 2 fonksiyonunu silerseniz , bir strateji işe yarayacak ve iyi çalışıyor
İki başlatma stratejisi içeren PART1 ve PART2 kodunu çalıştırırsanız , ancak bunlar çakışacaktır. bu hata

Kronin'e bir bakabilir misin?

 //+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA   20050610

//+------------------------------------------------------------------+
//| Check NEW BAR     WORK AT BARS  M15                                 |
//+------------------------------------------------------------------+
/*

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

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

int OpenOrders( string symbol)
  {
   int buys= 0 ,sells= 0 ;
//----
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ; 
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA)
        {
         if (OrderType()==OP_BUY) buys++;
        }
     }
//---- return orders volume
   return (buys);
  }

//+------------------------------------------------------------------+
//| Calculate candle      These is condidion                         |
//+------------------------------------------------------------------+

// scenario 1 / EA 1  /  startegy 1 / blue

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

// scenario 2 / EA 2  /  startegy 2 / red

bool BULL6()
   {
   if (Close[ 1 ]-Open[ 1 ]>= 6 * Point && Close[ 1 ]-Open[ 1 ]<= 7 * Point )
   return ( true );
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 3 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ( true );
     }
   return ( false );  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 4 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ;
     }
  }  
  
// Check for open for scenario 2 / EA 2  /  startegy 2
  
void OpenBULL61()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 4 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.61 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
//-----------------------------------  
 
void OpenBULL62()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 2 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.62 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
  
//----------------------------------- 
void OpenBULL63()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 2 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.63 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose()
{
   RefreshRates();
   if (OrderOpenPrice()+ 4 * Point < Ask)
   for ( int i = OrdersTotal ()- 1 ; i >= 0 ;i--)       // I Have do -1 in "OrdersTotal()-1"
   {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
       if (OrderSymbol() == Symbol ()) 
      {
         bool ticket = true ;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid, 1 ,Black);

      }
   }
} 
/*
void CheckForClose2()
{
   RefreshRates();
   if(OrderOpenPrice()+6*Point< Ask)
   for (int i = OrdersTotal(); i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
*/
                                       
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
      
//------------------                                                          PART1      
           bool SignalBULL41Executed= false ;
             if (BULL4() && !SignalBULL41Executed && OpenOrders( Symbol ())== 0 )
               {
               OpenBULL41(); //do open buy position
               SignalBULL41Executed= true ;
               }
               
             bool SignalBULL42Executed= false ;
             if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 )
               {
               OpenBULL42(); //do open buy position
               SignalBULL42Executed= true ;
               }  
               
             if (OpenOrders( Symbol ())> 0 )CheckForClose();  
            
//------------------                                                          PART 2
            
             bool SignalBULL61Executed= false ;
             if (BULL6() && !SignalBULL61Executed && OpenOrders( Symbol ())== 0 )
               {
               OpenBULL61(); //do open buy position
               SignalBULL61Executed= true ;
               }
               
             bool SignalBULL62Executed= false ;
             if (!SignalBULL62Executed && OpenOrders( Symbol ())== 1 )
               {
               OpenBULL62(); //do open buy position
               SignalBULL62Executed= true ;
               }  
               
           bool SignalBULL63Executed= false ;
             if (!SignalBULL63Executed && OpenOrders( Symbol ())== 2 )
               {
               OpenBULL63(); //do open buy position
               SignalBULL63Executed= true ;
               }                
               
//            if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();                    
            
  }
//+------------------------------------------------------------------+
 
Wodzuuu :

( NewBar ) ResetSignals () if seçeneklerini kullanmayın çünkü hatanın nedeninin onlar olmadığını düşünüyorum

Fun_NewBar() işlevinin kodlanma şekli, bunu yapmanıza izin vermez. . . bool türünde olması ve bir bool değeri döndürmesi için bunu böyle yapmanız gerekir. . .

 bool Fun_New_Bar()                
   {                                
   static datetime New_Time= 0 ;      
                     
   if (New_Time!=Time[ 0 ])           
      {
      New_Time=Time[ 0 ];                
       return ( true );       // <---- we have a new bar so the function returns true
      }

   return ( false );
   }
 

Evet haklısın bool döndürür ve int ( zaten düzeltilmiş ) var daha önce göremiyorum. Teşekkür ederim
Ama bu işlevi kullanmıyorum, metin olarak

Bunun beni örtüşen iki stratejiyi ayıran işlevler için geçerli olduğunu düşünmüyorum . ilişkiyi göremiyorum . Ya da belki yanılıyorum ?

 //Pseudo code

if (NewBar) ResetSignals();                 //Set all SignalxExecuted to false
if (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
  SignalBuy1Executed= true ;                 //Set Signal to exectued to prevent a reuse in the same bar
}
 

Biraz ilerleme kaydettiğini görmek güzel, ama daha gidilecek çok yol var :-)

RaptorUK'un yukarıda belirtilenleri düzeltmeniz gerekiyor. Sinyallerin sıfırlanması önemlidir, aksi takdirde EA yeni işlemler açarak çok yakında durur.
Uygulamanız yanlış. SignalExecuted'ı her onay işaretiyle sıfırlarsanız, bunun bir anlamı yoktur. OpenOrders'ı da filtrelediğiniz için belki daha fazla işlem açmaz. Ancak, stratejiniz birden fazla siparişin açılmasına izin verdiğinden, siparişleri kapatmak için bir algoritma da istediğinizi hayal edebiliyorum, bu nedenle SignalExecuted bayrağının yeni bir çubukta sıfırlanmasına ihtiyacınız var (uygulamanızla işe yaramaz ve buna ihtiyacınız yok) .

Sizi doğru anlarsam, BULL6 da doğruysa BULL4'ü çalıştırmazsınız. Veya başka bir deyişle, kırmızı strateji geçerli değilse yalnızca mavi strateji veya ortalama mum geçerli değilse yalnızca küçük mum.

 if (BULL4()&&!BULL6(){             // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.
   if (!SignalBULL41Executed && OpenOrders( Symbol ())== 0 ){
    OpenBULL41(); //do open buy position
    SignalBULL41Executed= true ;
  }
   if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 ){
    OpenBULL42(); //do open buy position
    SignalBULL42Executed= true ;
}
 

Sonraki adımlar:

 // Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 3 * Point )  					                       // <--- equal makes no sense here and you should not compare doubles for equality. 
                                                                                                  Read (again): https://www.mql5.com/en/forum/136997 
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue); // <--- what is your plan with res? You are aware, it does include the ticket 
                                                                                                  number or -1, aren't you?

       return ( true );                                                                   // <--- Even if OrderSend() fails you return true.
     }
   return ( false );  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 4 * Point ) 							// <--- OrderOpenPrice() from a somewhere selected order may or may not work here 
                                                                                                  (may because only one order is open), but it is not nice coded. 
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ;
     }
  }  

CheckForClose() işlevi hemen hemen aynı sorunlara sahiptir ve ayrıca sihirli sayı için filtre yoktur. Ayrıca burada, satın alma sayısındaki bir siparişten seçilen OrderOpenPrice() yanlış siparişin kapanmasıyla sonuçlanabilir (gerçekten çalıştığından emin değilim).
Lütfen Raptor'un bu başlığın ilk sayfasında yazdıklarını tekrar okuyun.

Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay

 
kronin :

Sonraki adımlar:

Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay

2 farklı stratejiyi, her biri kendi grafiğinde 2 ayrı EA'da çalıştırmak daha kolay olmaz mıydı?
 
RaptorUK :
Her biri kendi grafiğinde 2 ayrı EA'da 2 farklı strateji yürütmek daha kolay olmaz mıydı?

Evet, 2, 3, 4, 5 için... kabul edildi. Ama hikayelere ve buna göre: " 150 poliçe yazmam gerekiyor ve aynı grafik üzerinde aynı anda yürümeli ve tüm stratejileri aynı anda çalıştırmalı . Aynı anda 150 EA çalıştırdığımda bilgisayarım patlayacak . - Sanırım öyle . "
Sanırım bir EA'da daha fazla strateji yürütmeyi planlıyor....