Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1331
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
Helfen Sie mit, den Indikator zu beheben, er wird nicht im MT5-Terminal angezeigt, er gibt Fehler während der Kompilierung.
Helfen Sie, den Indikator zu reparieren, er wird im MT5-Terminal nicht angezeigt, er gibt Fehler beim Kompilieren.
Am einfachsten ist es, ArraySetAsSeries(Open,true) ; ArraySetAsSeries(Close,true) ; und so weiter in OnCalculate ganz am Anfang aller Arrays zu setzen.
Das ist die traditionelle Überraschung auf den ersten Blick: in 5 sind die Standard-Indexierungsrichtungen anders als in 4.
Der Indikator verwendet keine Puffer, sondern erstellt nur Graph-Objekte - drücken Sie nach dem Start Strg+B und sehen Sie nach, wo er sie hingestellt hat
Ich habe mich durch die Dokumentation und das Forum gewühlt ...
Wie macht man Variablen vom Zeigertyp global [im Beispiel var], wenn sie in OnInit() von string erstellt werden:
CObj* var=new CObj(p1,p2,p3);
und die Anzahl der Objekte und Konstruktorparameter nicht im Voraus bekannt sind und in OnInit() berechnet werden?
Ich habe mich durch die Dokumentation und das Forum gewühlt ...
Wie kann man Variablen vom Typ Zeiger global machen, wenn sie in OnInit() erstellt werden?
und die Anzahl der Objekte und Konstruktorparameter nicht im Voraus bekannt sind und in OnInit() berechnet werden?
Ich verstehe nichts, sondern übergebe ein Array von Zeigern CArrayObj an die in OnInit() erstellten Objekte
Nichts verstanden, aber ein Array von CArrayObj-Zeigern auf Objekte übergeben, die in OnInit() erstellt wurden
Artem, ich danke Ihnen für Ihre Antwort.
Ich entschuldige mich für die unklare Frage)
Es gibt drei globale Variablen vom Typ Zeiger auf ein Objekt in Expert Advisor: var1, var2, var3.
Vor der Ausführung von OnInit() ist nicht bekannt, ob alle diese Variablen benötigt werden (dies hängt mit den Zeitrahmen zusammen), und auch die Parameter für die Konstruktoren, die die Objekte initialisieren, sind unbekannt.
Wie kann man solche Variablen in OnInit() erstellen, so dass sie global sind?
Artem, ich danke Ihnen für Ihre Antwort.
Ich entschuldige mich für die unklare Frage)
Drei globale Variablen vom Zeigertyp können in EA verwendet werden: var1, var2, var3.
Vor der Ausführung von OnInit() ist nicht bekannt, ob alle diese Variablen benötigt werden (dies hängt mit den Zeitrahmen zusammen), auch die Parameter für die Konstruktoren, die die Objekte initialisieren, sind unbekannt.
Wie kann man solche Variablen in OnInit() erstellen, so dass sie global sind?
Ich weiß nicht, welchen magischen Konstruktor Sie da haben, der nur Unbekannte enthält :)
Sie müssen Objekte nicht vorher als Instanzen deklarieren.
Sie müssen ein Array CArrayObj deklarieren. Ihre Objekte selbst müssen Nachkommen von CObject sein.
Erstellen Sie Ihr Objekt mit new und fügen Sie der Liste einen Zeiger darauf hinzu.
Erstellen Sie das nächste Objekt und fügen Sie es der Liste hinzu, usw.
Diese Liste - ein Zeiger auf sie (und die Liste wird global deklariert) - wird an Ihre Konstruktoren übergeben.
Aber hier ist, wie Sie gehen, um Konstruktoren mit Argumenten im Voraus unbekannt zu tun - ich verstehe es nicht ein bisschen. Versuchen Sie, das zu klären
Aber hier ist, wie Sie gehen, um Konstruktoren mit Argumenten im Voraus unbekannt zu machen - ich bin ein wenig verwirrt hier. Versuchen Sie, es zu erklären
Erstellung von Objekten vom Typ CISNewBar für jeden verwendeten Zeitrahmen und jedes Symbol.
HH:Es gab ein Problem mit derCArrayObj-Klasse: Beim Zugriff auf Elemente vom TypCArrayObj* ArrayObj. At(0) sind die Klassenmitglieder des Objekts, das At(0) ist, nicht verfügbar, obwohl genau diese Klassenmitglieder öffentlich sind, d.h. ein Konstrukt vom Typ ArrayObj.At(0).method(parameter) funktioniert nicht.Die Zeichen werden in einer Zeile mit Trennzeichen in den Eingabeparametern angegeben, so dass Sie nicht alle Objekte vor OnInit() erstellen können.
D.h. der erste unbekannte Konstruktorparameter ist ein Symbol.
Der zweite unbekannte Konstruktorparameter ist ein Zeitrahmen, da jedes Symbol seine eigene Reihe von Zeitrahmen hat, die ebenfalls durch eine Zeichenkette mit Begrenzungszeichen im Eingabeparameter übergeben werden.
Und ich habe auch Angst, diese Bibliotheken zu verwenden, vielleicht ändert sich etwas darin, wenn ich das Terminal aktualisiere, und mein Expert Advisor wird plötzlich nicht mehr funktionieren...
Erstellen Sie Objekte vom Typ CISNewBar für jeden Zeitrahmen, der für jedes Symbol verwendet wird.
P.S.Es gab ein Problem mit derCArrayObj-Klasse: Beim Zugriff auf Elemente vom TypCArrayObj* ArrayObj. At(0), die Klassenmitglieder des Objekts, das At(0) ist nicht verfügbar, obwohl diese Klassenmitglieder genau öffentlich sind, d.h. ein Konstrukt wie ArrayObj.At(0).method(parameter) funktioniert nicht.Die Zeichen werden in einer Zeile mit Trennzeichen in den Eingabeparametern angegeben, so dass es unmöglich ist, alle Objekte vor OnInit() im Voraus zu erstellen.
D.h. der erste unbekannte Konstruktorparameter ist ein Symbol.
Der zweite unbekannte Konstruktorparameter ist ein Zeitrahmen, da jedes Symbol seine eigene Reihe von Zeitrahmen hat, die ebenfalls durch eine Zeichenkette mit Begrenzungszeichen im Eingabeparameter übergeben werden.
Und ich habe auch Angst, diese Bibliotheken zu verwenden, vielleicht ändert sich etwas darin, wenn ich das Terminal aktualisiere, und mein Expert Advisor wird plötzlich nicht mehr funktionieren...
Irgendwie ist das alles falsch...
Schreiben Sie in einfachen Worten, was Sie tun wollen. Ohne jeglichen Hinweis auf Ihre Versuche, das Ganze zu kodieren.
Es fühlt sich einfach nicht richtig an...
Schreiben Sie in einfachen Worten, was Sie tun wollen. Ohne jegliche Erwähnung Ihrer Versuche, das Ganze zu kodieren.
Multicurrency Expert Advisor.
Die Liste der Symbole wird über den Eingabeparameter, die Zeichenkette mit dem Trennzeichen "AUDUSD,EURUSD,GBPUSD..." angegeben, die Anzahl der Symbole ist nicht vordefiniert.
Für jedes Symbol gibt es zwei Zeitrahmen, auf denen sein "eigenes" Handelssystem arbeitet.
Dementsprechend gibt es zwei Eingabeparameter, Strings, begrenzt durch: kurze Zeitspanne für ein jeweiliges Symbol "M1,M30,M5..."
einen langen Zeitrahmen für das jeweilige Symbol "H1,D1,H4.."
D.h. für AUDUSD sind die Zeitrahmen M1 und H1, für EURUSD M30 und D1, usw.
In OnTick() muss für jedes Symbol das Erscheinen eines neuen Balkens auf beiden (kurzen und langen) Zeitrahmen verfolgt werden, um Handelsentscheidungen zu treffen.
Ich habe versucht, es so einfach wie möglich zu schreiben)
Multicurrency Expert Advisor.
Die Liste der Symbole wird über einen Eingabeparameter, eine Zeichenkette mit dem Trennzeichen "AUDUSD,EURUSD,GBPUSD...", festgelegt, die Anzahl der Symbole ist nicht vordefiniert.
Für jedes Symbol gibt es zwei Zeitrahmen, auf denen sein "eigenes" Handelssystem arbeitet.
Dementsprechend gibt es zwei Eingabeparameter, Strings, begrenzt durch: kurze Zeitspanne für ein jeweiliges Symbol "M1,M30,M5..."
einen langen Zeitrahmen für das jeweilige Symbol "H1,D1,H4.."
D.h. für AUDUSD sind die Zeitrahmen M1 und H1, für EURUSD M30 und D1, usw.
In OnTick() muss für jedes Symbol das Erscheinen eines neuen Balkens auf beiden (kurzen und langen) Zeitrahmen verfolgt werden, um Handelsentscheidungen zu treffen.
Ich habe versucht, es so einfach wie möglich zu schreiben.)
Haben Sie bereits eine Klasse für eine neue Bar?
Und wie genau sehen die Eingabeparameter aus?