Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 27

 
Andrey Khatimlianskii :

Gösterge yanlış bir parametre seti ile çağrılır

Evet, göstergenin birkaç parametresi var, ancak iCustom'un belleği doldurduğundan emin olmak mümkün mü? Bellek yaklaşık 2 saatte dolar, bu da boş bir iCustom'u test etmenin ve bir seferde bir parametre eklemenin uzun zaman alacağı anlamına gelir. Herhangi bir ipucu?
not Elbette tüm parametreleri görsel olarak inceleyeceğim.

 
Nauris Zukas :

Evet, göstergenin birkaç parametresi var, ancak iCustom'un belleği doldurduğundan emin olmak mümkün mü?

günlüklerde birçok gösterge olacak
 
TheXpert :
günlüklerde birçok gösterge olacak

Evet, neden bahsettiğinizi biliyorum, testten sonra birçok gösterge göründüğünde bunu strateji test cihazında da gördüm. Ama burada strateji test cihazında her şey yolunda gidiyor. Ve gerçek hayatta günlüklerde her şey doğru şekilde görüntülenir.

 
Nauris Zukas :

Evet, göstergenin birkaç parametresi var, ancak iCustom'un belleği doldurduğundan emin olmak mümkün mü? Bellek yaklaşık 2 saatte dolar, bu da boş bir iCustom'u test etmenin ve bir seferde bir parametre eklemenin uzun zaman alacağı anlamına gelir. Herhangi bir ipucu?
not Elbette tüm parametreleri görsel olarak inceleyeceğim.

Aramayı parametresiz bırakın (o zaman varsayılan olarak alınacaktır) ve izleyin. Sızıntı kaybolursa, sorun budur.

 
Nauris Zukas :

Uzman yavaş yavaş artan hafızayı yer.

"Azar azar" ne kadar?

Belki gerçekten biraz ve bu, lansmanından bu yana ortaya çıkan alıntıların tarihi mi?

 
Andrey Khatimlianskii :

"Azar azar" ne kadar?

Belki gerçekten biraz ve bu, lansmanından bu yana ortaya çıkan alıntıların tarihi mi?

MT4'ü birkaç EA'dan başlatıyorum, hafıza kaydını açıyorum. Okun orada bir sapma gösterdiği yerde, "EX4 dosyası için yeterli bellek yok" oluşur.


 
Andrey Khatimlianskii :

Aramayı parametresiz bırakın (o zaman varsayılan olarak alınacaktır) ve izleyin. Sızıntı kaybolursa, sorun budur.

Tamam yapacağım.

 
Nauris Zukas :

MT4'ü birkaç EA'dan başlatıyorum, hafıza kaydını açıyorum. Okun orada bir sapma gösterdiği yerde, "EX4 dosyası için yeterli bellek yok" oluşur.

%40'ı ne kadar kullanılıyor?

Çağrı göstergesi eğrisine benzer şekilde doğrusal olarak büyür, evet.

 
Andrey Khatimlianskii :

%40'ı ne kadar kullanılıyor?

Çağrı göstergesi eğrisine benzer şekilde doğrusal olarak büyür, evet.

Ayarlarla ilgili bir sorun gibi görünüyor. Teşekkür ederim!

 

MT4'te aşağıdaki durum mümkündür (nedenleri hakkında konuşmayacağız):

  • Pozisyonlar açık . Bakiye N'dir.
  • Belli bir andan itibaren pozisyonlar kaybolur. Öz sermaye ve bakiye N'ye eşittir. İşlem tarihinde pozisyonlarla ilgili bir kelime yoktur.
  • Terminali yeniden başlatmak yardımcı olmuyor.
  • Birkaç saat geçer, pozisyonlar işlem geçmişinde görünür (belirli bir koşulda kapatılmışlardır). Bakiye ve öz sermaye buna göre ayarlandı.

Bu, birçok koşulun bir araya gelmesinden kaynaklanan çok nadir bir durumdur. Ancak yaklaşık sıfır olasılıkla da olsa gerçekleşebilir.

Tüm savaş robotlarının hatasız olarak bu tür durumları tanımlamak için bir mekanizma yerleştirmesini öneriyorum.

Bunu yapmak için, açık siparişlerin biletlerini hatırlamanız ve kaybolurlarsa işlem geçmişindeki varlıklarını kontrol etmeniz gerekir. Ticaret geçmişinde yoksa, Alertim!


Böyle bir korumanın işlevi.

 #define TICKET_TYPE int

// Получаем все текущие тикеты.
int GetTickets( TICKET_TYPE &Tickets[] )
{
   int Amount = ArraySize (Tickets);
    
   for ( int i = ArrayResize (Tickets, Amount + OrdersTotal ()) - Amount - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS))
      Tickets[Amount++] = OrderTicket();
          
   return ( ArrayResize (Tickets, Amount));
}

// Проверяет наличие потерянных тикетов.
int CheckTickets( void )
{
   static const bool IsTester = MQLInfoInteger ( MQL_TESTER );
   int Amount = 0 ;
  
   if (!IsTester)
  {
     static TICKET_TYPE Tickets[];
    TICKET_TYPE BadTickets[];
    
     for ( int i = ArrayResize (BadTickets, ArraySize (Tickets)) - 1 ; i >= 0 ; i--)
       if (! OrderSelect (Tickets[i], SELECT_BY_TICKET))
      {
        BadTickets[Amount++] = Tickets[i];
        
         Alert ( "Ticket " + ( string )Tickets[i] + " is not found!" );
      }
        
     ArrayResize (BadTickets, Amount);    
  
   #ifdef __MQL5__
     ArraySwap (Tickets, BadTickets);
   #else // __MQL5__
     ArrayFree (Tickets);
    
     ArrayCopy (Tickets, BadTickets);  
   #endif // __MQL5__
      
    GetTickets(Tickets);
  }
      
   return (Amount);
}
OnTick'in başlangıcında CheckTickets()'i arayın.