Hatalar, hatalar, sorular - sayfa 2589

 
fxsaber :

ArrayResize hakkında soru. Hemen birkaç gigabaytlık bir Yedek oluşturuyorum. Ve orijinal Yedekten daha az olan Boyutu kademeli olarak artırın.

TaskManager, Boyutu artırırken neden bellek tüketiminde artış gösteriyor?

Bilerek, bunun için hiçbir şey yapmıyoruz - bu, işletim sisteminin bir özelliğidir (kullanıcının gerçekten gigabaytlara ihtiyacı var mı?

Programın kritik bir noktasında "sıcak" belleğe sahip olmak istiyorsanız, sürecin sanal belleğinin sayfalarının fiziksel hale gelmesi için bu noktadan önce tahsis edilen yığının sayfalarını "geçmeniz" gerekir.


Ancak, MQL'den dizinin ayrılmış bölümüne erişim yoktur.

 
Ilyas :

Bilerek, bunun için hiçbir şey yapmıyoruz - bu, işletim sisteminin bir özelliğidir (kullanıcının gerçekten gigabaytlara ihtiyacı var mı?

Programın kritik bir noktasında "sıcak" belleğe sahip olmak istiyorsanız, sürecin sanal belleğinin sayfalarının fiziksel hale gelmesi için bu noktadan önce tahsis edilen yığının sayfalarını "geçmeniz" gerekir.


Ancak, MQL'den dizinin ayrılmış bölümüne erişim yoktur.

Teşekkür ederim. Gigabaytlar için hemen tam teşekküllü bir ArrayResize yaparsanız performansı nasıl etkileyeceğini merak ediyorum.

 
void OnStart ()
{   datetime m_stoptime = 0 ;
//1.
   if (m_stoptime < TimeCurrent ())
   {
       //расчеты   
   }


//2.
   MqlTick last_tick;
   if ( SymbolInfoTick ( _Symbol , last_tick))
   {   if (m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }
//3. 
      const int start = 0;
       const int count = 1 ;
       datetime time[ 1 ];
       if ( CopyTime ( _Symbol , PERIOD_M1 ,start,count,time)> 0 )
      {
         if (m_stoptime < time[ 0 ]) 
         {
         //расчеты
         }
      }
}

test edildi, Uzman Danışmanımı 5000 geçiş için optimize ederken tam bir arama başlattı, sadece test cihazının günlüğüne göre hesaplandı

1. 14:04:28.365 - 14:15:47.481 = 11dk 19s

2. 13:49:56.885 - 14:00:30,819 = 10m 34sn

3. 14:28:35.89 - 14:41:11.659 = 12m 36s


Prensipte, beklendiği gibi, 2 numaralı seçenek daha hızlıdır, 5000 geçiş için kazanç yaklaşık 30 saniyedir, bu da fena değil

 

Lütfen bu menüyü WinAPI aracılığıyla çağırmama yardım edin.

Seçilen danışman adının bulunduğu satır elde edilir. MT4'ün aksine ComboBox'ta sadece bir tane var.

Ancak menüyü aramak için - dışarı çıkmaz. BM_CLICK yardımcı olmuyor.


ZY Mesajları x64'te ne izlersiniz?


Sorunu WM_LBUTTONDOWN aracılığıyla çözdü.

 
Boş statik bir hata değil mi?
 int Array0[] = {};
 
Mobil terminalde , göstergeleri bodrumdan doğrudan tablonun üzerine yerleştirmek mümkün olacak mı?
 
Igor Makanu :

Prensipte, beklendiği gibi, 2 numaralı seçenek daha hızlıdır, 5000 geçiş için kazanç yaklaşık 30 saniyedir, bu da fena değil

Benzer sonuçların toplanacağı bir şubenin olması güzel olurdu. Optimize Edici için alakalı.

 
fxsaber :

Benzer sonuçların toplanacağı bir şubenin olması güzel olurdu. Optimize Edici için alakalı.

Destekliyorum, ilk kez test edip sonuçları yayınlamıyorum, nerede olduğunu anlamıyorum

ama şube açmaya hazır değilim .... eğitim kötü, sorumluluk duygusu bunaltacak ve konuyu güncel tut... Yapabileceğimden emin değilim (((

Not: yukarıdaki örneği takip ederek .... dün bu konuya tekrar yazmaya karar vermedim, SymbolInfoInteger (_Symbol, SYMBOL_TIME) üzerinde 2 numaralı örnekte SymbolInfoTick () gerekir.

ZYZY: İşte kullandığım bir örnek, optimize edicide 5 dakikalık ayrıklıkla zaman aramak benim için daha uygun - daha az geçiş, bu nedenle optimize edicideki süre genellikle 2 bayt ile yapılır, 0 ise - o zaman bu seçenek kullanılmaz, hala bir biriktirme listesi vardır - baytlarla çalışmanın nasıl daha hızlı olduğunu kontrol edin, ancak şimdi değil - benim örneğimde, OnInit()'te bir kez onu baytlara böldüm - kritik değil

 class CWorkTime
{
private :
   int                m_starthour, m_stophour, m_startmin, m_stopmin;
   datetime           m_starttime, m_stoptime;
   bool               UseThisSession, NotIntraDay;
   void               setTodayWorkTime();
public :
   void               CWorkTime( const ushort worktime);
   bool               Disable(); };
//+------------------------------------------------------------------+
void CWorkTime::CWorkTime( const ushort worktime): UseThisSession( true )
{   union UShortToByte { ushort u_short; uchar byte[ 2 ]; } ShortToByte;
   if (worktime == 0 )
   {  UseThisSession = false ;
       Print ( "EA working time is not used" ); }
   else
   {  ShortToByte.u_short = worktime;
       int t = ( int )(ShortToByte.byte[ 0 ] * 5.625 );
      m_starthour = ( int )(t / 60 );
      m_startmin = t % 60 ;

      t = ( int )(ShortToByte.byte[ 1 ] * 5.625 );
      m_stophour = ( int )(t / 60 );
      m_stopmin = t % 60 ;
      NotIntraDay = m_starthour > m_stophour ? true : false ;
      setTodayWorkTime();
       printf ( "EA working time start: %d h %d min , end: %d h %d min" , m_starthour, m_startmin, m_stophour, m_stopmin); } }
//+------------------------------------------------------------------+
void CWorkTime::setTodayWorkTime()
{   MqlDateTime dtstart, dtstop;
   TimeCurrent (dtstart);
   dtstop         = dtstart;
   dtstart.hour   = m_starthour;
   dtstart.min    = m_startmin;
   dtstop.hour    = m_stophour;
   dtstop.min     = m_stopmin;
   m_starttime    = StructToTime (dtstart);
   m_stoptime     = StructToTime (dtstop);
   if (NotIntraDay) m_stoptime += 86400 ; }
//+------------------------------------------------------------------+
bool CWorkTime::Disable( void )
{   bool result    = false ;
   if (UseThisSession)
   {   datetime time = ( datetime ) SymbolInfoInteger ( _Symbol , SYMBOL_TIME );
       if (m_stoptime < time) setTodayWorkTime();
      result      = time >= m_starttime && time <= m_stoptime ? false : true ; }
   return (result); };
//+------------------------------------------------------------------+

kullanım:

 int OnInit ()
  {
   WorkTime= new CWorkTime(EA_Time);
   }

void OnTick ()
  {
     bool DisableTradingByTime=WorkTime.Disable();
.....
     if (DisableTradingByTime) return ;

onlar. Disable() yönteminin sonucu çalışma saatleri dışında doğru, yanlış çalışıyor

 
fxsaber :

Benzer sonuçların toplanacağı bir şubenin olması güzel olurdu. Optimize Edici için alakalı.

Benzer bir tema var:

Алгоритмы, методы решений, сравнение их производительности
Алгоритмы, методы решений, сравнение их производительности
  • 2017.12.10
  • www.mql5.com
В данной ветке будем обсуждать разные способы решения тех, или иных задач, сравнивать производительность предложенных решений...
 

Bazı ayrıntılar alabilir miyim: SocketTlsReadAvailable(), Socket bağlandığında (SocketIsConnected() true döndürdüğünde) neden bir hata (5273 ERR_NETSOCKET_IO_ERROR) döndürüyor?

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

Hatalar, hatalar, sorular

Alain Verleyen , 2019.08.29 01:17

mql SocketXXX() işlevleri hakkında bu gönderi esas olarak Metaquotes geliştiricileri içindir: @Renat Fatkhullin, @Slava, @Ilyas

Güvenli bir bağlantı üzerinden mesajların alındığını kontrol etmek için aşağıdaki kodu kullanıyorum.

 int socket;
//+------------------------------------------------------------------+
//| void OnTimer()                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   string message;
   if (receive(message))
     {
       //--- ...     
     }
  }
//+------------------------------------------------------------------+
//| Call every X ms                                                  |
//+------------------------------------------------------------------+
bool receive( string &message)
  {
//--- ...
   char response[];
   message= "" ;

   ResetLastError ();
   uint len= SocketIsReadable (socket);
   if (len> 1 )
     {
       int read= SocketTlsReadAvailable (socket,response,len);

       //--- analyze the response 
       if (read> 0 )
        {
         //--- ...

         message= CharArrayToString (response, 0 ,read);
         return ( true );
        }
       else if (read==- 1 )
        {
         if ( SocketIsConnected (socket))
           {
             printf ( "ERROR: %i, socket(%i) read: len=%i" , _LastError ,socket,len);
           }
         else
           {
             printf ( "ERROR: %i, socket(%i) not connected. len=%i" , _LastError ,socket,len);
             //--- ...            
           }
        }
     }
   else
     {
       if ( _LastError != 0 )
         printf ( "ERROR: %i (SocketIsReadable)." , _LastError );
     }
//--- ...
   return ( false );
  }

Çoğu zaman bu doğru çalışır. Ancak zaman zaman soket bağlı olmasına rağmen hata alıyorum ve bir süre sonra (1 ila 5/6 hata) çalışmaya devam ediyor.

...veriler/mesajlar doğru şekilde alındı

2019.08.29 00:45:43.019 XXXX (EURUSD, H1) HATA: 5273, slot(1), okuma: len=437
2019.08.29 00:45:43.237 XXXX (EURUSD, H1) HATA: 5273, yuva(1), okuma: len=1242

...veriler/mesajlar doğru şekilde alındı

Hata 5273 çok geneldir ve pek yardımcı olmaz. Bu tür hatalar hakkında daha fazla bilgi almak mümkün müdür?