Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 200

 
fxsaber :
Grafiği fareyle sürüklerseniz, nesne* işlevleri çok gecikir.
Sadece yeniden çizebilirler mi?
 
Nikolai Semko :
Sadece yeniden çizebilirler mi?

ObjectFind , örneğin, yeniden çizmeyle ne ilgisi var?

 
fxsaber :

ObjectFind , örneğin, yeniden çizmeyle ne ilgisi var?

Ah, bunu düşünmedim.
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2020.03.04 08:58

Eskiden şüphelenirdim ama şimdi doğrulandı. Kaynaklarla çalışırken, bellek sızıntısı almak kolaydır.

SB üzerinden komut dosyası, bir grafikte sayısal bir dizinin grafiğini görüntüler. Daha sonra bu grafiği (nesneyi) manuel olarak silebilirsiniz, ancak bu grafiğe atanan kaynak salt okunur modda sonsuza kadar bellekte kalacaktır. Silmek mümkün olmayacak çünkü. yalnızca ana bilgisayar komut dosyası onu silebilir (vurgulanan satıra bakın).


MQL'de bu kadar çok dolu belleği boşaltmak için hiçbir işlevsellik yoktur. Bir VPS'de buna özellikle dikkat edin.


Kendiliğinden (veya anormal bir duruştan sonra) temizlenmeyen komut dosyalarını çalıştırdıktan sonra Terminal'de bellek nasıl boşaltılır?

 // После окончания работы скрипта Терминал потребляет дополнительные 4 Gb. Как освободить?
void OnStart ()
{
   uint Data[];
  
   ArrayResize (Data, 1 e6);
  
   for ( int i = 0 ; i < 1000 ; i++)  
     ResourceCreate ( "::" + ( string )i, Data, ArraySize (Data), 1 , 0 , 0 , ArraySize (Data), COLOR_FORMAT_ARGB_NORMALIZE );
}

TaskManager'da (F2) bellek tüketimi mükemmel bir şekilde görülebilir. Şimdi yalnızca Terminali yeniden başlatmak yardımcı olur.

 
fxsaber :

Kendiliğinden (veya anormal bir duruştan sonra) temizlenmeyen komut dosyalarını çalıştırdıktan sonra Terminal'de bellek nasıl boşaltılır?

TaskManager'da (F2) bellek tüketimi mükemmel bir şekilde görülebilir. Şimdi yalnızca Terminali yeniden başlatmak yardımcı olur.

Düzenli olarak - her kaynak için ResourceFree'yi çağırmak gerekir .

Eğer çökerse, hiçbir şey yapamazsınız. Sadece kaynak yarattığınız dll'nizi yığınlarsanız, akış kapatıldığında bunları kendi kendine temizleyecektir.

 
Vladimir Simakov :

Düzenli olarak - her kaynak için ResourceFree'yi çağırmak gerekir .

Eğer çökerse, hiçbir şey yapamazsınız. Sadece kaynak yarattığınız dll'nizi yığınlarsanız, akış kapatıldığında bunları kendi kendine temizleyecektir.

Kilitlenme, hata ayıklama kesintisini de içerir.

 
fxsaber :

Kilitlenme, hata ayıklama kesintisini de içerir.

Standart olarak mql - bellek sızıntısı anlamına gelir. Tüm bunları uygulamanızı yetişkin bir şekilde yazmanız yeterli. Büyük olasılıkla, DLL_THREAD_DETACH içeren DllMain, böyle bir iş parçacığı sona erdiğinde çağrılmayacak, en önemsiz görev değil, oldukça çözülebilir.

UPD: Bu konu, hata ileti dizisinde kendini gösteriyor. Benim nacizane fikrime göre
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 platformunun yeni sürümü build 2650: MQL5 kod profili oluşturucudaki grafiklerin ve iyileştirmelerin arka planda yüklenmesi

fxsaber , 2020.10.23 18:44

Şimdi, grafik değiştirme panelinde, EA'nın hangi grafik üzerinde çalıştığını ve hangisinin çalışmadığını göremezsiniz.

Ayırt edici bir işaret eklemek mümkün müdür? Örneğin, EURUSD grafiği bir Uzman Danışman ile çalışıyorsa, sonuna bir yıldız işareti ekleyin: EURUSD*. Genel olarak, görsel olarak yakalanacak bir şey.

Birçok çizelge var, bazılarının Uzman Danışmanları var. Belki göstergeler için de yararlıdır ama ben kullanmıyorum. Yani bilmiyorum.


Bazı nedenlerden dolayı, çalışan Uzman Danışmanlar listesi için bir kısayol tuşu yoktur. Sadece fare ile açılabilir.

F2 şimdi. Danışmanda ENTER'a basın - haritasına geçin ve Gezgin'de yolunun bulunduğu bir ağaç açılır. İkinci kez ENTER ME'deki kaynaktır.

 
Daha önce, EA'daki dahili bir hata kapanmasına neden olmuyordu.
 2021.03 . 18 11 : 41 : 47.413 zero divide in 'Test9.mq5' ( 550 , 5 )
2021.03 . 18 11 : 42 : 26.619 array out of range in 'Test9.mq5' ( 550 , 8 )

Son zamanlardan beri - nedenler.


Önceden, Market istemcisi, Terminal'i yeniden başlatarak sorunu atlayabilirdi. Şimdi değil.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 4 platformunun yeni versiyonu 1330 inşa etti

fxsaber , 2021.04.03 00:21

 // Конструкция обнаружения бесконечных циклов.
class LOOP
{
private :
   static int PrevLine;    
   static uint PrevTime;
  
public :
#define LOOP_CHECKTIME 100000 // Максимальная длительность (в миллисекундах) выполнения цикла

   static bool CheckFirst( const int Line )
  {
     if (Line != PrevLine)
    {
      LOOP::PrevTime = :: GetTickCount ();
      LOOP::PrevLine = Line;
    }
      
     return (!:: IsStopped () && :: GetTickCount () - LOOP::PrevTime < LOOP_CHECKTIME);
  }
  
   static bool Description( const string Str )
  {
     if (!:: IsStopped () && (:: GetTickCount () - LOOP::PrevTime > LOOP_CHECKTIME))
    {
      :: MessageBox ( "Endless loop:\n" + Str);
  
      LOOP::PrevTime = :: GetTickCount ();
    }
    
     return (!:: IsStopped ());
  }
#undef LOOP_CHECKTIME
};

static int LOOP::PrevLine = 0 ;
static uint LOOP::PrevTime = 0 ;


#define _CS(A) ((LOOP::CheckFirst( __LINE__ ) || LOOP::Description( __FILE__ + "\n" + ( string ) __LINE__ + "\n" + __FUNCSIG__ + "\nCondition: " + #A)) && (A))


Kullanım örneği.

 void OnInit ()
{
   for ( uint i = 5 ; _CS(i >= 0 ) ; i--)
    ;
}