Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 623

 
-Aleks-:
Nein, ich brauche es nicht im Tester, aber wenn das Terminal wirklich auf einem Diagramm läuft - es wird dort nur funktionieren, wenn die Geschichte weniger als die maximale Anzahl von Bars enthält, oder bin ich falsch?

Und in Echtzeit werden rates_total und Bars() steigen, wenn der Indikator läuft. In OnInit() können Sie keine Raten_total abrufen, da der Parameter nicht an die Funktion übergeben wird. Sie müssen die Historie auf jeden Fall in OnCalculate() überprüfen.

 
Guten Tag an alle, bitte helfen Sie mir, einen Expert Advisor zu finden. Ich benötige eine Box (Kasten) mit Einstellung der Sitzungszeit, Aufteilung in drei Aufträge in jeder Richtung, Trailing- und Stop-Loss-Funktionen. Ich bin bei meiner Suche auf den Freiflächen bereits ertrunken. Ich stehe fast am Rande des Abgrunds, nur noch ein bisschen länger und ich werde anfangen, die Sprache und den Editor zu lernen, um selbst zu schreiben!!!! HILFE!!!
 
Alexey Kozitsyn:

Und in Echtzeit werden rates_total und Bars() inkrementiert, wenn der Indikator ausgeführt wird. In OnInit() können Sie rates_total nicht abrufen, da der Parameter nicht an die Funktion übergeben wird. Die Historie sollte auf jeden Fall in OnCalculate() überprüft werden.

Mit anderen Worten, wir sollten einen Indikator erstellen, wo wir für die Anzahl der Balken überprüfen und wenn alles in Ordnung ist, dann füllen Sie den Chart-Puffer mit einem, und dann in der EA warten, bis wir eine aus dem Indikator erhalten, und nur dann weiter zu arbeiten, richtig?
 
-Aleks-:
D.h. wir müssen einen separaten Indikator erstellen, in dem wir die Anzahl der Balken überprüfen und wenn alles in Ordnung ist, den Chartpuffer mit einem Balken füllen und dann im EA warten, bis wir einen Balken vom Indikator erhalten, und erst dann weiterarbeiten, richtig?
Nein, natürlich nicht... Warum sollte es so kompliziert sein... Gehen wir es noch einmal durch. Was ist das Ziel? Um die gesamte Historie für Berechnungen verfügbar zu machen?
 
Alexey Kozitsyn:
Nein, natürlich nicht... Warum es so kompliziert machen... Machen wir es noch einmal. Was ist das Ziel? Um alle für die Berechnung verfügbaren Daten zu erhalten?

Damit der EA richtig funktioniert, muss er den Verlauf einmal berechnen. Es kommt also vor, dass beim Einschalten des Terminals mit diesem EA eine Historie vorhanden ist und dementsprechend eine Initialisierung und Berechnung durchgeführt wird, aber diese Historie ist möglicherweise nicht vollständig, und eine neue wird nach der Verbindung mit dem Terminal geladen.

Ich denke, dass wir die Verbindung mit dem Terminal verfolgen können und dann, wenn es verfügbar ist, auf Änderungen des letzten Balkens in HLCO prüfen und wenn es verfügbar ist, warten wir, und wenn es nicht innerhalb von x Sekunden verfügbar ist, führen wir die Berechnung durch.

 
-Aleks-:

Damit der EA richtig funktioniert, muss er den Verlauf einmal berechnen. Es kommt also vor, dass beim Einschalten des Terminals mit diesem EA eine Historie vorhanden ist und dementsprechend eine Initialisierung und Berechnung durchgeführt wird, aber diese Historie ist möglicherweise nicht vollständig und eine neue wird nach der Verbindung mit dem Terminal geladen.

Ich denke, dass wir die Verbindung mit dem Terminal verfolgen können und dann, wenn es verfügbar ist, nach Änderungen des letzten Balkens durch HLCO suchen und wenn es verfügbar ist, warten wir, aber wenn es nicht innerhalb von x Sekunden verfügbar ist, führen wir die Berechnung durch.

Verwendet der Expert Advisor irgendwelche benutzerdefinierten Indikatoren?

Sie können zum Beispiel Folgendes tun: Sie überprüfen die Größe des Verlaufs durch Bars(). Dann sehen Sie nach, ob Bars() > prev_bars+1 (die Größe des Verlaufs am vorherigen Tick) - dann setzen Sie alle gespeicherten Daten zurück und führen eine vollständige Neuberechnung des Expert Advisors von Null aus. Diese Konstruktion sollte zuerst in OnTick() eingefügt werden.

Sie müssen sich nicht um die Verbindung zum Terminal, die Pausen usw. kümmern. Die einfachste Option ist oft die beste.

 
Alexey Kozitsyn:

Verwendet der Expert Advisor irgendwelche benutzerdefinierten Indikatoren?

Sie können zum Beispiel so vorgehen: Prüfen Sie die Größe des Verlaufs mit Bars(). Dann sehen Sie nach, ob Bars() > prev_bars+1 (die Größe des Verlaufs am vorherigen Tick) - dann setzen Sie alle gespeicherten Daten zurück und führen eine komplette Neuberechnung des Expert Advisors von Null aus. Diese Konstruktion sollte zuerst in OnTick() eingefügt werden.

Sie müssen sich nicht um die Verbindung zum Terminal, die Pausen usw. kümmern. Die einfachste Variante ist meist die beste.

Der Expert Advisor verwendet eine Menge Dinge, darunter auch Indikatoren.

Ich verstehe, dass die vorgeschlagene Variante bei jedem Balken neu berechnet wird, oder liege ich da falsch?

 
-Aleks-:

Der Expert Advisor verwendet eine Menge Dinge, darunter auch Indikatoren.

Ich verstehe, dass diese Variante bei jedem Balken neu berechnet wird, oder irre ich mich?

Nein, warum in jeder Bar? Der Expert Advisor wird nur dann komplett neu berechnet, wenn mehr als 1 Takt zur Historie hinzugefügt wird! Wenn 1 Balken hinzugefügt wird (ein neuer Balken wird gebildet), wird die vollständige Neuberechnung nicht durchgeführt.

Wenn Sie Indikatoren verwenden und diese über globale Variablen verfügen, müssen diese beim ersten Start auf Null gesetzt werden. Andernfalls können Artefakte auf dem Diagramm erscheinen / Indikatoren falsch angezeigt werden.

 
Alexey Kozitsyn:

Nein, warum bei jedem? Eine vollständige Neuberechnung des EA erfolgt nur, wenn mehr als 1 Takt zur Geschichte hinzugefügt wurde! Wenn 1 Balken hinzugefügt wird (ein neuer Balken wird gebildet), erfolgt keine vollständige Neuberechnung.

Wenn Sie Indikatoren verwenden und diese über globale Variablen verfügen, müssen diese beim ersten Start auf Null gesetzt werden. Andernfalls können Artefakte auf dem Diagramm erscheinen / Indikatoren falsch angezeigt werden.

Ich habe nicht auf +1 geachtet, danke, ich denke, es ist keine schlechte Option.
 
Können Sie mir sagen, warum das passieren könnte?

Doppel-A;
int x, y;

x=100; y=3; A=x/y=33.000
Grund der Beschwerde: