MQL5: Doğrulama :-( Ne olduğunu ve nasıl çözüldüğünü araştırmak için şimdiden beynimi harcamıştım. - sayfa 2

 
Alexandr Gavrilin :

diğer mesajlar marj eksikliğine gelir.

Açıklandığı gibi, yanlışlıkla belirli bir yönde enstrüman için tüm lotu özetlemeye çalıştım, bekleyen emirleri dikkate alarak ve açma komutu vermeyerek, aşılırsa, açılan emri dikkate alarak işe yaramaz. .

Hata aynı, hata ayıklama mesajlarım doğrulama sırasında rapor günlüklerinde görüntülenmiyor, bunun işlenmesini nasıl yakalayacağımı ve hata ayıklayacağımı veya bu hatayı terminalimde nasıl taklit edeceğimi bilmiyorum ..

Hata .

 
Alexandr Gavrilin :

....

Hata aynı, hata ayıklama mesajlarım doğrulama sırasında rapor günlüklerinde görüntülenmiyor, bunun işlenmesini nasıl yakalayacağımı ve hata ayıklayacağımı veya bu hatayı terminalimde nasıl taklit edeceğimi bilmiyorum ..

Çok büyük hacimli bir pozisyon açmaya çalışın. EA'nızın bu hatayı yakalayıp yakalamadığına bakın.

 
Alexandr Gavrilin :

diğer mesajlar marj eksikliğine gelir.

Açıklandığı gibi, yanlışlıkla, bekleyen emirleri dikkate alarak ve açma komutu vermeyerek, enstrüman için tüm partiyi belirli bir yönde özetlemeye çalıştım, aşılırsa, açılan emri dikkate alarak işe yaramaz. .

Hata aynı, hata ayıklama mesajlarım doğrulama sırasında rapor günlüklerinde görüntülenmiyor, bunun işlenmesini nasıl yakalayacağımı ve hata ayıklayacağımı veya bu hatayı terminalimde nasıl taklit edeceğimi bilmiyorum ..

Marj Seviyesini kontrol edebilirsiniz. Diyelim ki % 5000'den az ise herhangi bir işlem yapmayın.

 
Vladimir Karputov :

Hata .

Karar verdim.

 //в функции до открытия ордера.

double max_volume= SymbolInfoDouble (m_name, SYMBOL_VOLUME_LIMIT );

       double current_lots=getAllVolume();

       if (max_volume> 0 && max_volume-current_lots-dlot<= 0 )
        {
         //PrintFormat("%.2f - %.2f",max_volume , dlot);
         return 0 ;
        }
//...
//функция подсчета объема
double getAllVolume()
     {
       int itotal= PositionsTotal ();
       ulong uticket=- 1 ;
       double dVolume= 0 ;

       for ( int i=itotal- 1 ;i>= 0 ;i--)
        {
         if (!(uticket= PositionGetTicket (i))) continue ;

         if ( PositionGetString ( POSITION_SYMBOL )==m_symbol.Name())
            dVolume+= PositionGetDouble ( POSITION_VOLUME );
        }

      itotal= OrdersTotal ();

       for ( int i=itotal- 1 ;i>= 0 ;i--)
        {
         if (!(uticket= OrderGetTicket (i))) continue ;

         if ( OrderGetString ( ORDER_SYMBOL )==m_symbol.Name())
            dVolume+= OrderGetDouble ( ORDER_VOLUME_CURRENT );
        }

       return dVolume;
     }
Bundan sonra, ürün testleri başarıyla geçti.
 
Alexandr Gavrilin :

Karar verdim.

Bundan sonra, ürün testleri başarıyla geçti.

:)

 

Bu arada, hesaplamalarınızda SYMBOL_VOLUME_LIMIT değerinin "0.0"a eşit olabileceğini unutmayın.

İncelemeden kaçınmak için:

 if (check_volume > SymbolInfoDouble (Symbol(), SYMBOL_VOLUME_LIMIT ))
   return ;
 
Vladimir Karputov :

Bu arada, hesaplamalarınızda SYMBOL_VOLUME_LIMIT değerinin "0.0"a eşit olabileceğini unutmayın.

İncelemeden kaçınmak için:

Bu mesajla ilgili olarak, bir sorun var: 1.14380'den 3.30 EURUSD anında satış başarısız oldu [ Hacim sınırına ulaşıldı]

Netleştirme hesabım vardı ve herhangi bir limit veya bekleyen emir yoktu. Tüm kontroller mevcuttu.

Az önce SYMBOL_VOLUME_LIMIT kontrol edildi, açık emir olup olmadığına bakılmaksızın, her zaman 0 döndürür. Her zaman bir pozisyonum var (çünkü bir netleme türü) ve bu mesaj sadece lot arttırıldığında ve sadece otomatik doğrulama sırasında çıkıyor. .

 
Petros Shatakhtsyan :

Bu mesajla ilgili olarak, bir sorun var: 1.14380'den 3.30 EURUSD anında satış başarısız oldu [ Hacim sınırına ulaşıldı]

Netleştirme hesabım vardı ve herhangi bir limit veya bekleyen emir yoktu. Tüm kontroller mevcuttu.

Az önce SYMBOL_VOLUME_LIMIT kontrol edildi, açık emir olup olmadığına bakılmaksızın, her zaman 0 döndürür. Her zaman bir pozisyonum var (çünkü bir netleme türü) ve bu mesaj sadece lot arttırıldığında ve sadece otomatik doğrulama sırasında çıkıyor. .

Eğer bir sunucu üzerinde çalışıyorsanız bu, etraftaki tüm sunucuların aynı ayarlara sahip olduğu anlamına gelmez :) .

 
Vladimir Karputov :

Eğer bir sunucu üzerinde çalışıyorsanız bu, etraftaki tüm sunucuların aynı ayarlara sahip olduğu anlamına gelmez :) .

Ve bu yüzden, farklı yürütme türlerinin olduğu yaklaşık 5-6 farklı sunucuları kontrol ediyorum. İşte bu mesajda yürütme türü Instant'dır .

Ama mesele bu değil. Otomatik doğrulama çok az bilgi sağlar ve bu da hata bulmayı zorlaştırır. Ve her zaman atlayabilirsiniz.

 
Dün güncelleme için Otomatik Doğrulama'dan geçtim. MT5'te yarım dürtme ile ve MT4 neredeyse bütün akşamı tüm siparişleri almadan geçirdi. Herhangi bir yayılma ayarlamadım. Yorgun, birkaç saat içinde gitti. sorunsuz atlattı. Yani bazen sorun uzmanda değil, hizmettedir.