In Abschnitt 1.4 des Artikels werden die Eigenschaften der Klasse COrderInfo beschrieben, die, der Beschreibung nach zu urteilen, für die Arbeit mit aktiven schwebenden Aufträgen konzipiert ist. Es wird vorgeschlagen, Folgendes zu tun:"Um mit dieser Klasse die Eigenschaften von ausstehenden Aufträgen zu erhalten, fragen wir zunächst die Gesamtzahl der Aufträge ab und wählen sie nach Auftragsticket aus".
//Selektieren Sie alle historischen Aufträge für den angegebenen Zeitraumif (HistorySelect(0,TimeCurrent())) // alle Aufträge
{
// Ermittlung der Gesamtzahl der Aufträgeint o_total = OrdersTotal();
}
Aber wenn die Funktion HistorySelect() für die Abfrage der"Historie von Transaktionen und Aufträgen" gedacht ist, d. h. für die Abfrage historischer Aufträge, warum wird diese Funktion dann für die Abfrage der Gesamtzahl aktiver, schwebender Aufträge verwendet?
Kann mir das bitte jemand erklären? Hier ist ein Stück Code aus der CDealInfo-Klasse:
//+------------------------------------------------------------------+//|DealInfo.mqh |//+------------------------------------------------------------------+#include <Object.mqh>#include "SymbolInfo.mqh"//+------------------------------------------------------------------+//| Klasse CDealInfo.|//| Termin: Klasse für den Zugriff auf historische Geschäftsinformationen.//| Leitet sich von der Klasse CObject ab.|//+------------------------------------------------------------------+class CDealInfo : public CObject
{
...
public:
...
//--- Schnellzugriffsmethoden auf die Eigenschaften der ZeichenkettenpositionstringSymbol() const;
...
};
...
//+------------------------------------------------------------------+//| Ermittelt den Eigenschaftswert "DEAL_SYMBOL".//| INPUT: nein.|//| OUTPUT: der Eigenschaftswert "DEAL_SYMBOL" ||//|| ANMERKUNG: nein.|//+------------------------------------------------------------------+string CDealInfo::Symbol() const
{
return(HistoryDealGetString(m_ticket,DEAL_SYMBOL)); //dummerweise zurückkehren
}
...
//+------------------------------------------------------------------+//| Konvertiert die Deal-Parameter in Text. ||//| INPUT:str - Empfangszeichenfolge,|//| deal - Zeiger auf die Klasseninstanz.//| OUTPUT: formatierte Zeichenkette.|//|| ANMERKUNG: nein.|//+------------------------------------------------------------------+string CDealInfo::FormatDeal(string& str) const
{
string type,volume,price,date;
CSymbolInfo symbol;
//--- einrichten
symbol.Name(Symbol());
int digits=symbol.Digits();
//--- bilden die Beschreibung des Geschäftsswitch(Type())
{
...
}
//--- Rückgabe des Ergebnissesreturn(str);
}
...
//+------------------------------------------------------------------+
Hier enthält die Funktion CDealInfo::FormatDeal(string& str) diese Zeile:
symbol.Name(Symbol());
Die Funktion Symbol() wiederum ist sowohl in der CDealInfo-Klasse selbst als auch in den Standardfunktionen des Client-Terminals definiert. Welche Funktion wird als Argument an die Funktion Symbol.Name() übergeben? Nach welcher Regel?
Kann mir das bitte jemand erklären? Hier ist ein Stück Code aus der CDealInfo-Klasse:
Hier enthält die Funktion CDealInfo::FormatDeal(string& str) diese Zeile:
Die Funktion Symbol() wiederum ist sowohl in der CDealInfo-Klasse selbst als auch in den Standardfunktionen des Client-Terminals definiert. Welche Funktion wird als Argument an die Funktion Symbol.Name() übergeben? Nach welcher Regel?
Hier gilt die gleiche Regel wie beim Geltungsbereich von Variablen. Wenn eine Variable auf globaler und lokaler Ebene unter demselben Namen deklariert ist, dann verweist der Name innerhalb des lokalen Geltungsbereichs auf die lokale Variable und außerhalb auf die globale Variable.
Wenn eine Standardfunktion innerhalb einer Klasse überladen wird, wird der Überladungskörper in der Klasse selbst aufgerufen und der Körper der Standardfunktion wird auf globaler Ebene aufgerufen. Der Körper der überladenen Funktion kann auf globaler Ebene über den Klassenzeiger aufgerufen werden.
Hier gilt die gleiche Regel wie für den Geltungsbereich von Variablen. Wenn eine Variable auf globaler und lokaler Ebene unter demselben Namen deklariert wird, dann verweist der Name innerhalb des lokalen Geltungsbereichs auf die lokale Variable und außerhalb auf die globale Variable.
Wenn eine Standardfunktion innerhalb einer Klasse überladen wird, wird der Überladungskörper in der Klasse selbst aufgerufen und der Körper der Standardfunktion wird auf globaler Ebene aufgerufen. Der Körper der überladenen Funktion kann auf globaler Ebene über den Klassenzeiger aufgerufen werden.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Es gibt auch Zeilen in der Klasse COrderInfo
return(FormatType(str,Type())); ... FormatType(type,Type()) ... if(m_type==Type() && m_state==State() &&Aber die Funktion Type() fehlt in der Klasse.
In Abschnitt 1.4 des Artikels werden die Eigenschaften der Klasse COrderInfo beschrieben, die, der Beschreibung nach zu urteilen, für die Arbeit mit aktiven schwebenden Aufträgen konzipiert ist. Es wird vorgeschlagen, Folgendes zu tun:"Um mit dieser Klasse die Eigenschaften von ausstehenden Aufträgen zu erhalten, fragen wir zunächst die Gesamtzahl der Aufträge ab und wählen sie nach Auftragsticket aus".
Aber wenn die Funktion HistorySelect() für die Abfrage der"Historie von Transaktionen und Aufträgen" gedacht ist, d. h. für die Abfrage historischer Aufträge, warum wird diese Funktion dann für die Abfrage der Gesamtzahl aktiver, schwebender Aufträge verwendet?In der Klasse COrderInfo ...
Aber die Funktion Type() ist in der Klasse nicht vorhanden.
Kann mir das bitte jemand erklären? Hier ist ein Stück Code aus der CDealInfo-Klasse:
Hier enthält die Funktion CDealInfo::FormatDeal(string& str) diese Zeile:
symbol.Name(Symbol());Die Funktion Symbol() wiederum ist sowohl in der CDealInfo-Klasse selbst als auch in den Standardfunktionen des Client-Terminals definiert. Welche Funktion wird als Argument an die Funktion Symbol.Name() übergeben? Nach welcher Regel?Kann mir das bitte jemand erklären? Hier ist ein Stück Code aus der CDealInfo-Klasse:
Hier enthält die Funktion CDealInfo::FormatDeal(string& str) diese Zeile:
Die Funktion Symbol() wiederum ist sowohl in der CDealInfo-Klasse selbst als auch in den Standardfunktionen des Client-Terminals definiert. Welche Funktion wird als Argument an die Funktion Symbol.Name() übergeben? Nach welcher Regel?Hier gilt die gleiche Regel wie beim Geltungsbereich von Variablen. Wenn eine Variable auf globaler und lokaler Ebene unter demselben Namen deklariert ist, dann verweist der Name innerhalb des lokalen Geltungsbereichs auf die lokale Variable und außerhalb auf die globale Variable.
Wenn eine Standardfunktion innerhalb einer Klasse überladen wird, wird der Überladungskörper in der Klasse selbst aufgerufen und der Körper der Standardfunktion wird auf globaler Ebene aufgerufen. Der Körper der überladenen Funktion kann auf globaler Ebene über den Klassenzeiger aufgerufen werden.
Hier gilt die gleiche Regel wie für den Geltungsbereich von Variablen. Wenn eine Variable auf globaler und lokaler Ebene unter demselben Namen deklariert wird, dann verweist der Name innerhalb des lokalen Geltungsbereichs auf die lokale Variable und außerhalb auf die globale Variable.
Wenn eine Standardfunktion innerhalb einer Klasse überladen wird, wird der Überladungskörper in der Klasse selbst aufgerufen und der Körper der Standardfunktion wird auf globaler Ebene aufgerufen. Der Körper der überladenen Funktion kann auf globaler Ebene über den Klassenzeiger aufgerufen werden.