Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 116

 
novichok2018 :

Teşekkür ederim. mola yardımcı gibi görünüyordu. Bakalım bundan sonra ne olacak.

Hayır, gerçekten yardımcı olmadı. Sadece aynı türden pozisyonlar açıldığında iyi çalışır. Örneğin, önce HÜCRE açıldı ve henüz kapanmadıysa ve o sırada BUY açılıp kapanıyorsa, başka bir HÜCRE açılıp kapanana kadar (kendi koşullarına göre) HÜCRE artık kapanma koşullarını görmez. Ve BAI aniden açılıp tekrar kapanırsa, yine kapanma koşullarını kaçırır. I.Kim'in ExistPositions() fonksiyonunu kullanarak BAY'i kapattıktan sonra açık pozisyonların varlığını belirlemeye çalıştım, ancak yürütmeyi kontrol etmek için nereye ekleyeceğimi ve Print'i nereye yerleştireceğimi anlamadım. Söylemek.

 
novichok2018 :

Hayır, gerçekten yardımcı olmadı. Sadece aynı türden pozisyonlar açıldığında iyi çalışır. Örneğin, önce HÜCRE açıldı ve henüz kapanmadıysa ve o sırada BUY açılıp kapanıyorsa, başka bir HÜCRE açılıp kapanana kadar (kendi koşullarına göre) HÜCRE artık kapanma koşullarını görmez. Ve BAI aniden açılıp tekrar kapanırsa, yine kapanma koşullarını kaçırır. I. Kim'in ExistPositions() işlevini kullanarak BAY'i kapattıktan sonra açık pozisyonların varlığını belirlemeye çalıştım ancak yürütmeyi kontrol etmek için nereye ekleyeceğimi ve Print'i nereye yerleştireceğimi anlamadım. Söylemek.

Çözümü kimse bilmiyor mu? İnanmıyorum.

 
novichok2018 : gerçekten kimse bilmiyor mu? İnanmıyorum.

Foruma girdim - kendi kendinize konuştuğunuzu görüyorum... Konuşmanızın başladığı yer ve ne hakkında olduğunu anlamak zor. Programda hata ayıklamak için Yazdır yerine Uyarı kullanmak daha uygundur - hemen ekranda belirir. Bu Uyarılar, if durumu kontrolünden önce yer alır. Bir kalemle hata ayıklamanın bir yolu da var - programı çalıştırılması gerektiği gibi gözden geçirin ve değişkenlerin değerlerini yazın. Değişti - eski değeri çizin ve yenisini yazın. Daha önce böyle yaptılar. Artık MetaEditor, değişkenlerin değerlerini takip edebileceğiniz bir hata ayıklayıcıya sahiptir. En basit yapılar, bir komut dosyası yazılarak ayrı ayrı kontrol edilmelidir.

 
novichok2018 :

Çözümü kimse bilmiyor mu? İnanmıyorum.

şöyle deneyin:

 //+------------------------------------------------------------------+
void OnTick ()
  {
   int total= OrdersTotal ();
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( TimeCurrent ()> OrderOpenTime ()+ 100 )
           {
             switch ( OrderType ())
              {
               //_______________________________________________________________________
               case OP_BUY :
                 {
                   if ( OrderMagicNumber ()== 101 && MathAbs (WPR1)< 5 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   if ( OrderMagicNumber ()== 111 && MathAbs (WPR1)< 20 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   break ;
                 }
               //_______________________________________________________________________                 
               case OP_SELL :
                 {
                   if ( OrderMagicNumber ()== 222 && MathAbs (WPR1)> 97.55 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   if ( OrderMagicNumber ()== 201 && MathAbs (WPR1)> 96 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   break ;
                 }
              }
           }
        }
     }
  }
//_______________________________________________________________________
void ClosePosBySelect( int slip, color col) 
  {
   RefreshRates ();
   if ( OrderType ()== OP_BUY )   OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_BID ), slip, col);
   if ( OrderType ()== OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK ), slip, col);
  }
//_______________________________________________________________________
 
iCustom verileri nereden alır?
 
Igor Makanu :

şöyle deneyin:

Teşekkürler, denedim - derleyici yemin etmemesi için bazı ayarlamalardan sonra bile hiçbir konumu kapatmıyor.

 
STARIJ :

Foruma girdim - kendi kendinize konuştuğunuzu görüyorum... Konuşmanızın başladığı yer ve ne hakkında olduğunu anlamak zor. Programda hata ayıklamak için Yazdır yerine Uyarı kullanmak daha uygundur - hemen ekranda belirir. Bu Uyarılar, if durumu kontrolünden önce yer alır. Bir kalemle hata ayıklamanın bir yolu da var - programı çalıştırılması gerektiği gibi gözden geçirin ve değişkenlerin değerlerini yazın. Değişti - eski değeri çizin ve yenisini yazın. Daha önce böyle yaptılar. Artık MetaEditor, değişkenlerin değerlerini takip edebileceğiniz bir hata ayıklayıcıya sahiptir. En basit yapılar, bir komut dosyası yazılarak ayrı ayrı kontrol edilmelidir.

Tavsiyen için teşekkürler ama benim durumumda işe yaramıyor. Anlamak için tekrar edeceğim. pozisyonları kapatmak için özel fonksiyonun kodu aşağıdadır

, tam olarak düzgün çalışmıyor - pozisyonları kapatma   ilk açık pozisyonu kapatma koşulları altında oluşur. Yani, önce kapanma koşulu 1 olan bir AL veya HÜCRE açtıysanız ve ardından ikinci bir benzer pozisyon açıldı, ancak kapanma koşulu 2 ile bu kapatma koşulu yok sayılır ve diğer sihire rağmen ikinci konum yok sayılır. , ayrıca koşul 1'e göre kapalıdır.

Emri kapattıktan sonra ara verdim ama çözüm yarım çıktı: Sadece aynı tip pozisyonlar açılırsa. Örneğin, önce HÜCRE açıldı ve henüz kapanmadıysa ve o sırada BUY açılıp kapanıyorsa, başka bir HÜCRE açılıp kapanana kadar (kendi koşullarına göre) HÜCRE artık kapanma koşullarını görmez. Ve BAI aniden açılıp tekrar kapanırsa, yine kapanma koşullarını kaçırır. Ve nasıl olunur?

 void ClosePoz()
  { RefreshRates ();
         double WPR0 = iWPR ( NULL , 0 ,bars, 0 );
         double WPR1 = iWPR ( NULL , 0 ,bars, 1 );
         bool rez = false ;
           
   int total= OrdersTotal ();
       for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
               if ( TimeCurrent ()> OrderOpenTime ()+ 300 )
               {
               if ( OrderMagicNumber == 101 || OrderMagicNumber == 102 || OrderMagicNumber == 103 || OrderMagicNumber == 104 )
                 {
                 if ( MathAbs (WPR1)< 5 )
                 rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_BID ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                 break ; 
                 }
               if ( OrderMagicNumber == 111 )
                 {
                   if ( MathAbs (WPR1)< 17 ) 
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_BID ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
               if ( OrderMagicNumber == 222 )
                 {
                   if ( MathAbs (WPR1)> 96 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ; 
                 }
               if ( OrderMagicNumber == 201 )
                 {
                   if ( MathAbs (WPR1)> 97 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
               if ( OrderMagicNumber == 202 )
                 {
                   if ( MathAbs (WPR1)> 96 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
                
                } 
              }
       break ;  
      }
  }
 
Mickey Moose :
iCustom verileri nereden alır?

özel gösterge arabelleklerinden, örneğin MA'da alıştırma yapın

novichok2018 :

Emri kapattıktan sonra ara verdim ama çözüm yarım çıktı: Sadece aynı tip pozisyonlar açılırsa. Örneğin, önce HÜCRE açıldı ve henüz kapanmadıysa ve o sırada BUY açılıp kapanıyorsa, başka bir HÜCRE açılıp kapanana kadar (kendi koşullarına göre) HÜCRE artık kapanma koşullarını görmez. Ve BAI aniden açılıp tekrar kapanırsa, yine kapanma koşullarını kaçırır. Ve nasıl olunur?

break'i devam ile değiştirmeyi deneyin

kod örneğimin hiçbir şeyi kapatmaması garip, belki de fiyat normalleşmesidir

 
Igor Makanu :


break'i devam ile değiştirmeyi deneyin


Değiştirildi. 138 hatasıyla yemin ediyor (teklifler) . Sonra geri döndü ve tekrar 138. Garip, belki daha önce fark etmemişimdir.

 
Igor Makanu :

özel gösterge arabelleklerinden, örneğin MA'da alıştırma yapın


Terminal veri penceresinde görünen alandan mı?