![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Siehe Forward Declarations für Klassen
Die Funktion OnTimer() im Strategietester verlangsamt die Ausführung ziemlich stark, wenn sie jede Sekunde angefordert wird. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor mit zwei externen Indikatoren, die alle Ticks durchlaufen, läuft 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 Ticks (4557 Bars) generiert innerhalb von 70418 ms (Gesamtbars in der Historie 6270, Gesamtzeit 70528 ms) Wenn OnTimer() kommentiert wird, wird die Ausführung deutlich beschleunigt 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 Ticks (4557 Balken) generiert innerhalb von 22730 ms (Gesamtbalken in der Historie 6270, Gesamtzeit 22870 ms) Sind diese Verzögerungen durch den Tester verursacht, oder können wir es irgendwie beschleunigen?
P.S. Eine Vorschau der Nachricht wäre sinnvoll gewesen(
Die Funktion OnTimer() im Strategietester verlangsamt die Ausführung ziemlich stark, wenn sie jede Sekunde angefordert wird. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor mit zwei externen Indikatoren, die alle Ticks durchlaufen, läuft 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 Ticks (4557 Bars) generiert innerhalb von 70418 ms (Gesamtbars in der Historie 6270, Gesamtzeit 70528 ms) Wenn OnTimer() kommentiert wird, wird die Ausführung deutlich beschleunigt 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 Ticks (4557 Balken) generiert innerhalb von 22730 ms (Gesamtbalken in der Historie 6270, Gesamtzeit 22870 ms) Sind diese Verzögerungen durch den Tester verursacht, oder können wir es irgendwie beschleunigen?
P.S. Eine Vorschau der Nachricht wäre sinnvoll gewesen(
Was bedeutet dieser Eintrag im Testgerät?
Nicht lustig.
Ich verstehe irgendwie, dass Links im allgemeinen Fall in mql5 nicht von Funktionen zurückgegeben werden (übrigens, warum nicht?), aber dann ist es notwendig, etwas zu tun, um l-Wert-Indexer möglich zu machen. Zum Beispiel, um eine Syntax-Ausnahme von der allgemeinen Regel für Linkshänder-Indexer zu machen. Oder ein bestimmtes Schlüsselwort.
Die Lahmheit lässt mql5.... natürlich nicht gut aussehen.
Limp lässt mql5.... eindeutig nicht gut aussehen
Die Lahmheit lässt mql5.... eindeutig nicht gut aussehen
Dafür müssen Sie vollwertige Links aufbauen :)
ZS: Es ist undicht :)
Wanze?
Der folgende Code erzeugt im Compiler eine Art Endlosschleife. Klicken Sie auf Abbrechen
funktioniert nicht sofort, aber wenn es funktioniert, gewinnt es die Kontrolle über den Editor zurück.
Die Schaltfläche Abbrechen selbst verschwindet nicht, aber sie ist auch nicht zugänglich.
Die Schaltfläche "Kompilieren" ist für immer verloren (Sie müssen den Editor neu laden, um sie wieder zu erhalten)
Nicht lustig.
Wie ich zu verstehen, dass Links im allgemeinen Fall in mql5-Funktionen nicht zurückkehren (übrigens, warum können sie nicht?), aber ich sollte etwas tun, um l-Wert-Indexer stattdessen möglich zu machen, z.B. eine Syntax-Ausnahme von der allgemeinen Regel für Lefty-Indexer machen. Oder ein bestimmtes Schlüsselwort.
Die Lahmheit lässt mql5.... eindeutig nicht gut aussehen.
Das "Weitergeben" von internen Nicht-Basisklassenelementen nach außen (und in diesem Beispiel nicht das Attribut selbst, sondern nur ein Array-Element!), insbesondere mit der Möglichkeit, seinen Wert zu ändern, ist nicht sicher.
Außerdem widerspricht es dem "Geist" der objektorientierten Programmierung: alle Arbeiten mit Objektdaten sollten innerhalb des Objekts, durch seine eigenen Methoden, durchgeführt werden...
Wie wäre es, wenn Sie einfach Setter für das Datenattribut verwenden?
Der Code würde an Lesbarkeit gewinnen. Letztendlich wird diese "Einfachheit" mit dem l-Wert-Indexer dazu führen, dass niemand mehr versteht, wie dieser Code funktioniert...
Sie werden mehr Zeit damit verbringen, nach Fehlern zu suchen, als Setter zu schreiben.
Hier ist ein Beispiel:
Wenn Sie Code wie while ((double)date[++i -1] < 10) durch etwas Längeres, aber Verdauliches ersetzen können, sollten Sie das besser auf diese Weise tun...
struct Test
{
double data[];
int Größe;
void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
void setDataElement (int index, double value)
{
data[index] = Wert;
}
privat:
static int Max;
};
//+------------------------------------------------------------------+
int Test::Max=1024;
//+------------------------------------------------------------------+
//| Skriptprogramm-Startfunktion |
//+------------------------------------------------------------------+
void OnStart()
{
Test t;
t.Init(16);
for(int i=0;i<t.size;i++)
{
//t[i]=i*i; // ERROR :'=' - l-Wert erforderlich
t.setDataElement(i, i*i);
}
}