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

 
mktr8591 :

Gerçek hayat örneği - Sanal kitaplıkta, VIRTUAL sınıfı statik const VIRTUAL_DELETE VirtualDelete içerir;

static const VIRTUAL static_Virtual ile değiştirilebilir;

(ve tabii ki yıkıcıyı SANAL'a taşıyın).

Yasaktır. program sona erdiğinde yeni nesneler yıkıcılarını çağırmaz.

 
fxsaber :

Yasaktır. program sona erdiğinde yeni nesneler yıkıcılarını çağırmaz.

Pardon, VIRTUAL_DELETE'in neresinde yeni anlamadım?
 
mktr8591 :
Pardon, VIRTUAL_DELETE'deki yeniliklerin neresi olduğunu anlamıyorum?

SANAL'da::Oluştur.


Tehdit Şube Sanal değil...

 

Uyarı pencerenizin madenciliği.

 #ifdef __MQL5__
   #include <WinAPI\WinAPI.mqh>
#else // #ifdef __MQL5__
   #define long int
     #define pack(A)  
       #include <WinAPI\WinAPI.mqh>
     #undef pack
   #undef long
  
   #undef HANDLE
   #define HANDLE int
#endif // #ifdef __MQL5__ #else

uint GetProcessID( const HANDLE Handle )
{
   uint ID = 0 ;
  
  user32::GetWindowThreadProcessId(Handle, ID);
  
   return (ID);
}

// Возвращает хендл Alert-окна.
HANDLE GetAlertHandle( void )
{  
   static HANDLE Handle = 0 ;
  
   if (!Handle)
  {
     static const string AlertCaptions[] = { "Alert" , "Алерт" };
     static const uint ProcessID = GetProcessID((HANDLE):: ChartGetInteger ( 0 , CHART_WINDOW_HANDLE ));  
    
     for ( int i = 0 ; i < sizeof (AlertCaptions) / 12 ; i++)  
    {
      Handle = user32::FindWindowW( "#32770" , AlertCaptions[i]);
      
       if (Handle && (GetProcessID(Handle) == ProcessID))
         break ;
       else
        Handle = 0 ;
    }
  }
    
   return (Handle);
}
 

Özel olaylar sırasında CPU yükü.

 void OnInit ()
{
   EventChartCustom ( 0 , 0 , 0 , 0 , NULL );
}

void OnChartEvent ( const int id, const long &, const double &, const string & )
{
   if (id == CHARTEVENT_CUSTOM )
  {
     Sleep ( 0 ); // Без этой строки будет 100%-я нагрузка ядра CPU.
    
     EventChartCustom ( 0 , 0 , 0 , 0 , NULL );
  }
}
 
 

Bazen DEAL_TIME, DEAL_ORDER_TIME_SETUP değerinden küçüktür. Bu muhtemelen bir komisyoncu yazılım hatasıdır.

 // Показывает ордера, которые имеют время выставления ПОЗЖЕ сделок, которые породил.
#property script_show_inputs

input datetime inFrom = D'2021.06.01' ;

void OnStart ()
{
   if ( HistorySelect (inFrom, INT_MAX ))
     for ( int i = HistoryDealsTotal () - 1 ; i >= 0 ; i--)
    {
       const ulong Deal = HistoryDealGetTicket (i);
       const ulong Order = HistoryDealGetInteger (Deal, DEAL_ORDER );
      
       if (( HistoryOrderGetInteger (Order, ORDER_TICKET ) == Order) &&
          ( HistoryOrderGetInteger (Order, ORDER_TIME_SETUP_MSC ) > HistoryDealGetInteger (Deal, DEAL_TIME_MSC )))
         Print (( string )Order + " - " + ( string )Deal);
    }
}


GUI'de böyle görünüyor.


 
fxsaber :

Bazen DEAL_TIME, DEAL_ORDER_TIME_SETUP değerinden küçüktür. Bu muhtemelen bir komisyoncu yazılım hatasıdır.


GUI'de böyle görünüyor.


Muhtemelen bir böcek.

Ama bu mümkün ve normal mi? Kısmi çalıştırmadan sonra, kullanıcı/program tarafından limit sırası değiştirilirse, ORDER_TIME_SETUP güncellenecektir.

 
mktr8591 :

Ama bu mümkün ve normal mi? Kısmi çalıştırmadan sonra, kullanıcı/program tarafından limit sırası değiştirilirse, ORDER_TIME_SETUP güncellenecektir .

Bu alan bir sabittir. Biletle birlikte kayıtlı.

 
fxsaber :

Bu alan bir sabittir. Biletle birlikte kayıtlı.

Görünüşe göre, ticaret durumunu yanlış anladım.

Tahmin ettiğim gibi: bekleyen limit emri birkaç anlaşmayla doluydu. Bunca zaman canlı siparişlerde asılı kaldı ve ORDER_TIME_SETUP alanı sabit değildi. Son anlaşmadan sonra tarihe geçti. Bu noktada ORDER_TIME_SETUP sabit olmuştur.

Yoksa yanlış mıydı?