Her döviz çifti için EA - döviz çifti başına yalnızca bir kez hangi kod açılacak? - sayfa 3

 

Kapatma mekanizmasını şu şekilde değiştirdim:

 for ( int j = 0 ; j < OrdersTotal (); j ++) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ()) continue ;       // Another security    

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose ()

ile

 for ( int k = 0 ; k < OrdersTotal (); k ++) 
   {
       OrderSelect (k, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType () <= OP_SELL &&   OrderSymbol () == Symbol ()) 
      {
         if ( OrderType () == OP_BUY) 
         {   

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose (....)

ve şimdi her şey beklendiği gibi çalışıyor. Neden olduğunu anlamasam da. Çünkü ikinci koddaki ek satırları gerçekten anlamıyorum. Ama teşekkürler çocuklar!

 
grey.unit :

Kapatma mekanizmasını şuradan değiştiriyorum:

ile

ve şimdi her şey beklendiği gibi çalışıyor. Sağolun beyler!

Muhtemelen her zaman işe yaramayacaktır. . . bir döngü içinde açık emirleri kapatırken veya bekleyen emirleri silerken , geri saymak ZORUNDADIR . . . döngünüzü değiştirmeniz gerekir. Ve sembolü Symbol() için geri koymanız gerekir. . . aksi takdirde EURUSD için EA, GBPUSD için potansiyel olarak kapanış siparişleriyle sonuçlanacaktır. . . yapmanız gereken, devam etmekten kurtulmaktı. . . veya ==!= haline getirin
 
grey.unit :

Kapatma mekanizmasını şu şekilde değiştirdim:

ile

ve şimdi her şey beklendiği gibi çalışıyor. Neden olduğunu anlamasam da. Çünkü ikinci koddaki ek satırları gerçekten anlamıyorum. Ama teşekkürler çocuklar!

İkinci kodunuz doğru ama biraz komik. MetaEditor, gezgin penceresi (Ctrl + D), sözlük sekmesini açın ve MQL4 Reference > Standard sabitler > Ticaret operasyonları öğesini seçin.

 
RaptorUK :
Muhtemelen her zaman işe yaramayacaktır. . . bir döngü içinde açık emirleri kapatırken veya bekleyen emirleri silerken, geri saymak ZORUNDADIR . . . döngünüzü değiştirmeniz gerekir. Ve sembolü Symbol() için geri koymanız gerekir. . . aksi takdirde EURUSD için EA, GBPUSD için potansiyel olarak kapanış siparişleriyle sonuçlanacaktır. . . yapmanız gereken, devam etmekten kurtulmaktı. . . veya ==!= haline getirin

Sadece seni haklı çıkarmak için. Söylediğiniz şey, eğer ilk kodu şu şekilde değiştirirsem:

 for ( int j = 0 ; j < OrdersTotal (); j --) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ())       // Another security    
                 {

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose (....)

o zaman da çalışması gerekir? Çünkü bunu denedim ve tekrar döviz çifti başına bir sipariş açıyor.

Veya ikinci kodu (k++ - k--) olarak değiştirirsem, aynı zamanda döviz çifti başına sadece bir işlem açar.

 for ( int k = 0 ; k < OrdersTotal (); k --) 
   {
       OrderSelect (k, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType () <= OP_SELL &&   OrderSymbol () == Symbol ()) 
      {
         if ( OrderType () == OP_BUY) 
         {   
 
grey.unit :

Sadece seni haklı çıkarmak için. Söylediğiniz şey, eğer ilk kodu şu şekilde değiştirirsem:

o zaman da çalışması gerekir? Çünkü bunu denedim ve tekrar döviz çifti başına bir sipariş açıyor.

Veya ikinci kodu (k++ - k--) olarak değiştirirsem, aynı zamanda döviz çifti başına sadece bir işlem açar.

İlk koddan bahsediyorum, emirleri kapattığınız yerde kullandığınız döngü. . . eksiltmesi gerekir. . . Aksi takdirde siparişleri kaçırırsınız. Devamını kaldırdığınızı ve { } ayraçları eklediğinizi görüyorum, çok iyi :-)

Döviz çifti başına bir Emir mi yoksa toplamda bir Emir mi açıyorsunuz?

 
RaptorUK :

Döviz çifti başına bir Emir mi yoksa toplamda bir Emir mi açıyorsunuz?

Evet, toplamda tabii. Tamam 2. kod:


 for ( int j = 0 ; j < OrdersTotal (); j ++) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ()) continue ;       // Another security    

Döngüden bahsettiğimizde sanırım şunu kastediyorsunuz:

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

Aslında bunu şöyle bir şeye değiştirirdim:

 for ( int j = OrdersTotal ()+ 1 ; j > OrdersTotal (); j --) 
   {

Bu satır, döviz Çifti başına yalnızca bir Emir açar (istendiği gibi!)

Döngü şimdi bu sorunla ilgili doğru mu? :

Raptorİngiltere :

Muhtemelen her zaman işe yaramayacaktır. . . bir döngü içinde açık emirleri kapatırken veya bekleyen emirleri silerken, geri saymak ZORUNDADIR . . . döngünüzü değiştirmeniz gerekir. Ve sembolü Symbol() için geri koymanız gerekir. . . aksi takdirde EURUSD için EA, GBPUSD için potansiyel olarak kapanış siparişleriyle sonuçlanacaktır. . . yapmanız gereken, devam etmekten kurtulmaktı . . . veya ==!= haline getirin
 
grey.unit :

Evet, toplamda tabii. Tamam 2. kod:


Döngüden bahsettiğimizde sanırım şunu kastediyorsunuz:

Aslında bunu şöyle bir şeye değiştirirdim:

Bu satır, döviz Çifti başına yalnızca bir Emir açar (istendiği gibi!)

Döngü şimdi bu sorunla ilgili doğru mu? :

Hayır, bunu yap. . .

 for ( int j = OrdersTotal ()- 1 ; j >= 0 ; j --)   // start at OrdersTotal() -1 ,  finish when j = 0

İlk sipariş pozisyonu 0'dır, yani 5 emriniz varsa, pozisyonlar 0, 1, 2, 3, 4'tür. . . yani sonuncusu OrdersTotal() - 1 . . . geri sayım yapmak için OrdersTotal()-1 ile başlayıp 0 ile bitirin

 
Tamam, yardımın için çok teşekkürler!
 
RaptorUK :

Hayır, bunu yap. . .

İlk sipariş pozisyonu 0'dır, yani 5 emriniz varsa, pozisyonlar 0, 1, 2, 3, 4'tür. . . yani sonuncusu OrdersTotal() - 1 . . . geri sayım yapmak için OrdersTotal()-1 ile başlayıp 0 ile bitirin

Yani şöyle görünmelidir:

 for ( int j = OrdersTotal ()- 1 ; j = 0 ; j --) 

çünkü şunu yazdın:

 for ( int j = OrdersTotal ()- 1 ; j >= 0 ; j --) 

yoksa yanılıyor muyum?

 
grey.unit :

Yani şöyle görünmelidir:

çünkü şunu yazdın:

yoksa yanılıyor muyum?

Çok yanlışsın. Kodunuz asla yürütülmez !!!. RaptorUK'ları kullanın.