Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 207

 
mktr8591:

Ein Anwendungsbeispiel aus der Praxis: In der Virtual-Bibliothek enthält die Klasse VIRTUAL die statische Konstante VIRTUAL_DELETE VirtualDelete;

Er kann durch static const VIRTUAL static_Virtual ersetzt werden;

(und natürlich den Destruktor nach VIRTUAL verschieben) .

Tun Sie das nicht. new-objects rufen ihren Destruktor nicht auf, wenn das Programm beendet wird.

 
fxsaber:

Das können Sie nicht. Neue Objekte rufen nicht ihren eigenen Destruktor auf, wenn das Programm beendet wird.

Es tut mir leid, ich verstehe nicht, was an VIRTUAL_DELETE neu ist?
 
mktr8591:
Sorry, bin mir nicht sicher, wo in VIRTUAL_DELETE neu?

In VIRTUAL::Create.


ZZZ In diesem Thema geht es nicht um Virtual...

 

Verringern Sie Ihr Alert-Fenster.

#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);
}
 

CPU-Last bei benutzerdefinierten Ereignissen.

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);
  }
}
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes" verschoben.
 

Manchmal ist DEAL_TIME kleiner als DEAL_ORDER_TIME_SETUP. Das muss ein Fehler in der Maklersoftware sein.

// Показывает ордера, которые имеют время выставления ПОЗЖЕ сделок, которые породил.
#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);
    }
}


So sieht es in der grafischen Benutzeroberfläche aus.


 
fxsaber:

Manchmal ist DEAL_TIME kleiner als DEAL_ORDER_TIME_SETUP. Das muss ein Fehler in der Maklersoftware sein.


So sieht es in der GUI aus.


Wahrscheinlich handelt es sich um einen Fehler.

Aber es ist doch möglich, es normal zu tun, oder? Wenn der Benutzer/die Software den Limitauftrag nach der Teilausführung ändert, wird der ORDER_TIME_SETUP aktualisiert.

 
mktr8591:

Aber das ist doch auch möglich, oder? Wird der Limitauftrag nach der Teilausführung durch den Benutzer/die Software geändert, wirdORDER_TIME_SETUP aktualisiert.

Dieses Feld ist eine Konstante. Sie wird zusammen mit dem Fahrschein ausgestellt.

 
fxsaber:

Dieses Feld ist eine Konstante. Sie wird zusammen mit dem Fahrschein ausgestellt.

Offenbar habe ich die Handelssituation missverstanden.

Ich habe mir das so vorgestellt: Das Pending Limit wurde durch mehrere Trades ausgeführt. Während dieser Zeit hing es in Live-Aufträgen und das Feld ORDER_TIME_SETUP war keine Konstante. Nach dem letzten Handel ging er in die Geschichte ein. In diesem Moment wurde ORDER_TIME_SETUP zu einer Konstante.

Oder war es nicht so?