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
Ein Beispiel wäre...
Etwa so (natürlich nicht die Struktur, sondern die Klasse):
Ich denke, es ist klar, was wo hingehört.
Vergessen Sie am Ende nicht:
Lassen Sie es mich anders ausdrücken. Sie fragen sich, ob es möglich ist, bei der Definition einer Funktion
nur eine Variable des Strukturtyps als formalen Parameter angeben und den Namen der Struktur selbst ignorieren? D.h. zum Beispiel nicht void funcName(MqlTradeRequest & req) angeben, sondern einfach void funcName(& req)?
Ja. Sie brauchen eine universelle Funktion für jede einfache Struktur --- keine Methoden, din. arrays. etc. --- lediglich eine Folge bestimmter Datentypen.
Da die Zusammensetzung des Skripts von mir vorgegeben ist, kann ich die Anzahl der zu bearbeitenden Strukturen explizit angeben.
Aber um eine dieser Strukturen an eineFunktion mit einem Namen zu übergeben, muss ich Überladen verwenden.
Hier gibt es einige Schwierigkeiten.
1. die Anzahl der Strukturen ist begrenzt, da die Überladung bei einer größeren Anzahl von Elementen langsamer wird.
2. Ich selbst könnte beim Kopieren der Überladungsfunktionen einen Fehler machen.
PS// Die FunktionfunWrite() führt bestimmte Berechnungen durch und führtFileWriteArray() mit einer bestimmten Sequenz und berechneten Parametern aus (von welchem Index wird geschrieben, wie viele werden gelesen).
Ja. Sie brauchen eine universelle Funktion für jede einfache Struktur --- keine Methoden, din. arrays. etc. --- lediglich eine Folge bestimmter Datentypen.
Da die Zusammensetzung des Skripts von mir vorgegeben ist, kann ich die Anzahl der zu bearbeitenden Strukturen explizit angeben.
Aber um eine dieser Strukturen an eine Funktion mit einem Namen zu übergeben, muss ich Überladung verwenden.
Ich verstehe. Vor einiger Zeit stellte ich eine ähnliche Frage, nämlich ob es möglich sei, bei der Definition einer Funktion den Typ von Arrays nicht anzugeben. Gleich darunter riet Roche zur Überlastung.
So kam ich zu dem Schluss, dass "eingebaute" Funktionen wieFileWriteArray(), bei denen einige Parameter mit dem Typ void angegeben werden, selbst überladene Funktionen sind. Wir sehen nur nicht, wie sie umgesetzt werden.
Ich verstehe. Ich habe schon einmal eine ähnliche Frage gestellt, ob es möglich ist, bei der Definition einer Funktion den Typ von Arrays nicht anzugeben. Gleich darunter riet Roche zur Überlastung.
So kam ich zu dem Schluss, dass "eingebaute" Funktionen wieFileWriteArray(), bei denen einige Parameter mit dem Typ void angegeben werden, selbst überladene Funktionen sind. Wir können nur nicht sehen, wie sie umgesetzt werden.
Eingebaute Funktionen sind in einer vollständigen Programmiersprache geschrieben.
In C können Sie zum Beispiel eine beliebige Anzahl von Variablen übergeben und bereits in der Funktion eine Liste der übergebenen Parameter erhalten und diese untersuchen.
void fun(...) { }
In MQL5 gibt es eine solche Möglichkeit nicht. Insbesondere fehlen Links und Zeiger auf einfache Datentypen und Strukturen...
Das muss etwas mit Sicherheit zu tun haben. Zugang zu Daten. Über den Sandkasten hinausgehen.
Ich möchte aber trotzdem, dass diese Funktionen in MQL5 implementiert werden
Das muss etwas mit Sicherheit zu tun haben. Zugang zu Daten. Über den Sandkasten hinausgehen.
Ich möchte aber trotzdem, dass diese Funktionen in MQL5 implementiert werden
Etwa so (natürlich nicht die Struktur, sondern die Klasse):
Ich denke, es ist klar, was wo hineingehört.
Vergessen Sie am Ende nicht:
Das nenne ich Hilfe: real und ganz konkret. Ich danke Ihnen. Wo ist das Pluszeichen?
Übrigens... Ich habe mir überlegt, dass das für mich gut genug ist. Aber ich will kein Formalist sein... ... also beschloss ich aus Neugier, dass es nicht schaden würde, zu versuchen, ein zweidimensionales Array zu organisieren. MQL erinnert mich ein wenig an C/C++, das ich in den letzten zwölf Jahren vergessen habe. Jetzt habe ich versucht, es auf diese Weise zu machen (ohne Schleife - ich habe es absichtlich vereinfacht):
Der Compiler erzeugt die Fehlermeldung: "'MABuffer' - parameter conversion is not allowed".
Ich frage mich, was ich falsch mache. Wenn ich mich nicht irre, bei der Deklaration einer Klasse mit mehrdimensionalen Array ist es notwendig, numerisch eine der Messungen angeben, so dass es statisch?ArrayResize, inzwischen setztneue Größe für die erste Dimension.
x100intraday:
Ich frage mich, was ich falsch mache?
1) SetIndexBuffer arbeitet mit einem Array von Doubles der gleichen Dimension.
2) Es ist nicht klar, warum Sie TBuffer* verwenden, d.h. Dynamics verwenden, wo sie nicht benötigt werden?
3) (TIPP) Im Beispiel hätte man statt einer Klasse auch eine Struktur verwenden können, um ein wenig Speicherplatz und ein paar hundert Taktzyklen zu sparen.
mql5:
3) (TIPP) Im Beispiel hätte man statt einer Klasse auch eine Struktur verwenden können, um ein wenig Speicherplatz und ein paar hundert Taktzyklen zu sparen.
Der Expert Advisor verwendet den Indikator in einem anderen Zeitrahmen. Bei Tests zeigt der EA falsche Daten des Indikators an.
Der EA selbst arbeitet auf M5, der Indikator auf H4. Indikatoren, die auf dem gleichen Zeitrahmen (M5) aufgerufen werden, geben die richtigen Werte zurück.
Die zurückgegebenen Werte ähneln den Indikatorwerten, unterscheiden sich aber von den tatsächlichen Werten, die sichtbar sind, wenn der Indikator auf das Preisdiagrammfenster angewendet wird.
Was ist das Problem?
Beispielcode für einen Indikatoraufruf: