İşkence hatası ticaret işlemi yok - sayfa 21

 
Arkadii Zagorulko :

Aynen MT5...

Yazıyorlar, sadece MT4 ile bir sorun var.

Belki bu MT5'e geçiş için bir sabotajdır...

 

Herhangi birine yardım ederse, işte doğrulamayı nasıl geçtim. Duraklar ve sipariş değişiklikleri olmadan, ancak tüm zaman dilimlerinde Uzman Danışman.

Doğrulayıcı 131 hatası (yanlış lot) verdi ve takas yok. Bu benim ilk Uzman Danışmanım, bu yüzden muhtemelen mümkün olduğunca çok hata vardı.

İlk olarak, tüm yorumları İngilizce olarak ticaret fonksiyon kontrollerine ekledim. yani, EA ticaret yapmıyorsa, Print()'te bir hata oluşturmalıdır.

Ayrıca ücretsiz marj kontrolü ekledim ve tüm ExpertRemove() öğesini kaldırdım, ancak bu yardımcı olmadı, hatalar aynıydı.

 void buy()
  {
   if (AccountFreeMarginCheck( Symbol (),OP_BUY,Lots)> 0 )
     {
       if ( OrderSend ( _Symbol ,OP_BUY,Lots,Ask,Slip,SLb, 0 ,comment,Magic, 0 ,Green)< 1 )
         Print ( " Buy ​​order error !" + IntegerToString ( _Period , 0 ) + " Error code = " + IntegerToString ( GetLastError (), 0 ));
     }
   else
       Print ( "Not enough money!" + " Error code = " + IntegerToString ( GetLastError (), 0 ));
       /// ExpertRemove();
   return ;   
  }

Sonra aynı anda birkaç değişiklik yaptım ve bunlardan hangisinin yardımcı olduğu belli değil.

Danışmanın başındaki ve sonundaki hataları sıfırlayın, tüm TF'lerde tekliflerin kullanılabilirliğini kontrol edin

 int OnInit ()
  {
     ResetLastError ();   

       for ( int cycle= 1 ; cycle<= 5 ; cycle++)
     {
       switch (cycle)
        {
         case 1 :
            TF = PERIOD_D1 ;
             break ;
         case 2 :
            TF = PERIOD_H4 ;
             break ;
         case 3 :
            TF = PERIOD_H1 ;
             break ;
         case 4 :
            TF = PERIOD_M15 ;
             break ;
         case 5 :
            TF = PERIOD_M5 ;
             break ;
        }
   if ( iTime ( _Symbol ,TF,Limit)< 1 )
     Print ( "Missing quotes! " + IntegerToString (TF, 0 ) + " Timeframe" + " Error = " + IntegerToString ( GetLastError (), 0 ));            
     }      
   return ( INIT_SUCCEEDED );
  }
//****************************
void OnDeinit ( const int reason)
  {  
   Alert ( "Error = " + IntegerToString ( GetLastError (), 0 ));
   ResetLastError ();
  }

ve adım (0.1), (0.01) ve hatta (0.001) ise tüm durumlar için lot hesaplamasını yeniden yapın

 double lotstep = MarketInfo( Symbol (),MODE_LOTSTEP);

   Lots = NormalizeDouble (AccountEquity()/ 10000 *Lot_for_10K, 3 );
   if (lotstep> 0.001 )
   Lots = ( MathRound (Lots/lotstep))*lotstep;    
   Lots = MathMax (Lots,MarketInfo( Symbol (),MODE_MINLOT));
   Lots = MathMin (Lots,MarketInfo( Symbol (),MODE_MAXLOT));

sonunda her şeyin kısa sürede düzeldiğini söyleyebiliriz, sadece 2 gün ve yaklaşık 10 deneme

 
Adım adım "ticaret işlemi yok" ile denememi anlatacağım:

1. Eski EA'yı Market'ten yeniden derleyip siteye yüklemeye çalıştıktan sonra "ticaret işlemi yok" hatası çıktı:
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2. Tüm zaman dilimlerinde tekliflerin kullanılabilirliğini kontrol etmek herhangi bir hata ortaya çıkarmadı (0'a bölme kullandım).
3. Sonra alım satım işlemleri için hacmi kontrol etmeye başladım, herhangi bir hata bulamadım ama yine de "ticaret işlemi yok".
4. Sonra tüm OrderSend'deki lot sayısını SYMBOL_VOLUME_MIN olarak değiştirdim - "ticaret işlemi yok"
5. Doğrulayıcı test cihazıyla ilgili bir şeylerin doğru olmadığı açıktır. Ve OnInit() içinde açılış pozisyonları eklemeye çalıştım:
 double min_volume= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
int ticket1=OpenPosition( NULL ,OP_SELL,min_volume, 0 , 0 ,magic);

ve aldığım şey bu (bu arada, ilk defa doğrulayıcıda bu kadar ayrıntılı gördüm):

 2019.07 . 23 01 : 00 : 00   Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [ 2019.07 . 23 01 : 00 ]
 2019.07 . 23 01 : 00 : 00   Tester: PrevBalance: 1.00 , PrevPL: 0.00 , PrevEquity 1.00 , PrevMargin: 0.00 , NewMargin: 135 , FreeMargin: - 134.14
 2019.07 . 23 01 : 00 : 00   Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07 . 23 01 : 00 : 00   Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [ 2019.07 . 23 01 : 00 ]
 2019.07 . 23 01 : 00 : 00   Tester: PrevBalance: 1.00 , PrevPL: 0.00 , PrevEquity 1.00 , PrevMargin: 0.00 , NewMargin: 135 , FreeMargin: - 134.14
 2019.07 . 23 01 : 00 : 00   Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07 . 23 01 : 00 : 00   Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [ 2019.07 . 23 01 : 00 ]
 2019.07 . 23 01 : 00 : 00   Tester: PrevBalance: 1.00 , PrevPL: 0.00 , PrevEquity 1.00 , PrevMargin: 0.00 , NewMargin: 135 , FreeMargin: - 134.14
 2019.07 . 23 01 : 00 : 00   Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07 . 23 01 : 00 : 00   Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [ 2019.07 . 23 01 : 00 ]
 2019.07 . 23 01 : 00 : 00   Tester: PrevBalance: 1.00 , PrevPL: 0.00 , PrevEquity 1.00 , PrevMargin: 0.00 , NewMargin: 135 , FreeMargin: - 134.14
 2019.07 . 23 01 : 00 : 00   Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07 . 23 01 : 00 : 00   Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [ 2019.07 . 23 01 : 00 ]
 2019.07 . 23 01 : 00 : 00   Tester: PrevBalance: 1.00 , PrevPL: 0.00 , PrevEquity 1.00 , PrevMargin: 0.00 , NewMargin: 135 , FreeMargin: - 134.14
 2019.07 . 23 01 : 00 : 00   Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


Burada "ticaret işlemi yok" hatasının neden olduğu zaten açık. 1.00 bakiye ile 0.20 (SYMBOL_VOLUME_MIN) ile emir açmanın mümkün olmayacağı açıktır. Ve koddaki bakiyeyi kontrol etmek göreviyle başa çıkıyor ve böyle bir sipariş verilmesine izin vermiyor ve dergide bakiye eksikliği hakkında basılıyor (sadece doğrulayıcıda görünmüyor).

Doğrulayıcıların iyi olduğunu nasıl düşünüyorsun?


Doğrulayıcı düzeltilene kadar bekleyeceğiz.

 
Serbest marj beni rahatsız etmiyor, aksi halde Honduras bana işkence etti.
 
Алексей Тарабанов # :
Serbest marj beni rahatsız etmiyor, yoksa Honduras bana işkence etti.

Zor? Düşüncelerin ifadesinden bahsediyorum.

 
Evet, test parametrelerinden bahsediyorum
 
Herhangi bir belleği temizleyin.
 

Yine de, giriş parametrelerinde varsayılan olarak bir sorun buldum, maksimum konum lotunda bir sınır var.

 input double MaxLots= 0.1 ;
...
lots = MathMin (lots, MaxLots );

Doğrulayıcıdaki SYMBOL_VOLUME_MIN 0.20 ise, bu açılış pozisyonlarını atlamadı. Doğrulayıcının varsayılan olarak maksimum pozisyon lotu için bu kadar küçük bir limit belirlemesi imkansızdır.