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

 

Merhaba.

Lütfen bana nasıl doğru yapacağımı söyle.

Küresel bir nesne koleksiyonu var:

CArrayObj array;

Nesne oluşturma ve bunları koleksiyona ekleme dahil olmak üzere birçok hesaplamanın yapıldığı ek bir sınıf vardır:

class CCheck : public CArrayObj
  {
  }
bool CCheck::SomeMethod(void)
  {
   CSample *sample_object= new CSample();
   array.Add(sample_object);
  }

CCheck sınıfının bu ek nesnesini düzenli olarak bir döngü içinde oluşturuyorum. Ama onu yok edemem çünkü. dizi koleksiyonunda CSample nesnelerine ihtiyacım var. CCheck'i yok edersem, dizideki sample_object nesneleri de kaybolur.

Şimdi bu CCheck nesnelerini, dizideki karşılık gelen nesnelere artık ihtiyacım olmadığında temizlediğim başka bir çöp nesne dizisine koyuyorum. Ancak bu nedenle, bellek yetersiz hatası alıyorum çünkü. bir dizide çok sayıda ağır CCheck nesnesi tutmanız gerekir. Tüm nesneler benim için gerekli olmasa da, içinde oluşturulan CSample nesneleri gereklidir. Sadece CSample nesnelerini kaydedebilmem ve CCheck'i silebilmem için nasıl doğru yapacağımı söyle. Çözemediğim bir şey.

Bu kod gibi bir şey:

CArrayObj array;
CArrayObj gargage_array;

void OnTick ()
  {
   for ( int i= 0 ;i<total;i++)
     {
      CCheck *check_obj= new CCheck();
      check_obj.Check();
      garbage_array.Add(check_obj);
     }
   if (..)
     {
      array.Clear();
      garbage_array.Clear();
     }
  }

class CCheck : public CArrayObj
  {
   public :
   void          Check( void );
   protected :
   bool          SomeMethod( void );
  };
void CCheck::Check( void )
  {
   ...
   SomeMethod();
  }
bool CCheck::SomeMethod( void )
  {
   CSample *sample_object= new CSample();
   array.Add(sample_object);
  }

class CSample : public CObject
  {
  };
 

Çözüm zaten forumda bir yerdeydi ama cevabı bulamıyorum.

Buna karşı "panzehiri" kim buldu:

Standart panel

Standart kod:

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {   
//--- create application dialog
       if (!ExtDialog.Create( 0 , "For Example " , 0 , 40 , 40 , 760 , 400 ))
       //return(INIT_FAILED);
       return ( false );             // исключительно для того, чтобы продемонстрировать наложение "панелей"
//---
//--- run application
   ExtDialog.Run();
//--- succeed
//-----
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy dialog
   ExtDialog.Destroy(reason);
//---
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,         // event ID  
                   const long & lparam,   // event parameter of the long type
                   const double & dparam, // event parameter of the double type
                   const string & sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
   ChartRedraw ();
  }

Alt satır: Uzman Danışman, bir zaman diliminden diğerine geçerken çöküyor. MT5'te böyle bir sorun yok.

Bir çözüm var mı? ... Veya MT4'teki Panelleri unutmak daha iyi :)

 
Vjacheslav Lapaev :

Çözüm zaten forumda bir yerdeydi ama cevabı bulamıyorum.

Buna karşı "panzehiri" kim buldu:


Standart kod:

Alt satır: Uzman Danışman, bir zaman diliminden diğerine geçerken çöküyor. MT5'te böyle bir sorun yok.

Bir çözüm var mı? ... Veya MT4'teki Panelleri unutmak daha iyi :)

Belki birileri işine yarar. Öz, bir Uzmandı, Gösterge olarak kaydedildi, her şey çalışıyor. Panelin kodunu kastediyorum.

 

Tünaydın!

Benim düşünceme göre, bir şekilde diziyi basitçe yazdırmak mümkün oldu, ancak nasıl yapılacağını hatırlayamıyorum ve bulamıyorum. Nasıl?

 
Nauris Zukas :

Tünaydın!

Benim düşünceme göre, bir şekilde diziyi basitçe yazdırmak mümkün oldu, ancak nasıl yapılacağını hatırlayamıyorum ve bulamıyorum. Nasıl?

DiziBaskı
 
Vladislav Andruschenko :
DiziBaskı

Ah, MQL5'teydi, çok teşekkür ederim!

 

Düzeltmek için ne yapacağımı bilmiyorum:

4030 "Grafik yanıt vermiyor".

Dün çalıştı :( Tek fark, MT5'in paralel olarak optimize edilmesidir (aynı zamanda bir zamanlayıcı kullanır), ancak ücretsiz kaynaklar vardır.Bu EA ile çizelge genellikle "temiz", ona hiçbir şey eklenmemiş.

 
Igor Zakharov :

Tek fark, MT5'in paralel olarak optimize edilmesidir (aynı zamanda bir zamanlayıcı kullanır), ancak ücretsiz kaynaklar vardır . Bu EA ile çizelge genellikle "temiz" dir, ona hiçbir şey eklenmez.

İlk beşte optimizasyonu durdurdum - işe yaradı. Sanki bağlantı olmamalı mı?

 
Unicode ile ilgili sorum şuydu. Neden kayboldu?
 
secret :
Unicode ile ilgili sorum şuydu. Neden kayboldu?

Size biraz bilgi vereyim:

Sorularda daha az ifade ve silinmeyecekler. Çok basit: Bir soru sormak, olumsuzluğunuzu başkalarına dökmek değildir. toplum içindesin.
Bir moderatörün tepkisine değil, kendi sorularınızı sorduğunuz ve yanıt almayı beklediğiniz yere saygı gösterin.

Neden: