Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 618
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
Ich habe Ihnen direkt gesagt, dass Sie andere nicht belehren sollten, wenn Sie selbst keine Ahnung haben.
Hilfe sollte "qualifiziert" sein, nicht "von der Straße"!
Definieren Sie das Problem noch einmal neu, was genau benötigt wird.
Beschreiben Sie die Aufgabe noch einmal genau, was benötigt wird.
Ich interessiere mich für die Möglichkeit, Daten in MT4/MT5 zwischen verschiedenen Modulen zu übertragen.
Zum Beispiel:
Wie überträgt man Daten von einem Indikator zu einem anderen?
Wie überträgt man Daten von einem Indikator in ein Skript?
Wie überträgt man Daten vom Indikator zum Expert Advisor? usw. ... und so weiter.
Das einfache Hinzufügen der übertragenen Daten zu einer separaten Datei und das anschließende Lesen dieser Daten aus der Datei in anderen Modulen ist ein recht naheliegender und gängiger Weg, um sie zu übertragen.
In diesem Fall gibt es jedoch ein Problem mit der Synchronisierung der übertragenen/gelesenen Daten.
Intuitiv nehme ich an, dass das MT4/MT5-Terminal einen bestimmten gemeinsamen Pufferspeicherbereich haben muss und dass es Verfahren geben muss, die den Datenaustausch über diesen Bereich regeln.
Aber ich habe in der Beschreibung nichts dergleichen gefunden.
Ich interessiere mich für das MT4/MT5-Übertragungsverfahren zwischen verschiedenen Modulen.
Zum Beispiel:
Wie überträgt man Daten von einem Indikator zu einem anderen?
Wie überträgt man Daten von einem Indikator in ein Skript?
Wie überträgt man Daten vom Indikator zum Expert Advisor? usw. ... und so weiter.
Das einfache Hinzufügen der übertragenen Daten zu einer separaten Datei und das anschließende Lesen dieser Daten aus der Datei in anderen Modulen ist ein recht naheliegender und gängiger Weg, um sie zu übertragen.
In diesem Fall gibt es jedoch ein Problem bei der Synchronisierung der übertragenen/gelesenen Daten.
Intuitiv nehme ich an, dass das MT4/MT5-Terminal einen bestimmten gemeinsamen Pufferspeicherbereich haben muss und dass es einige Verfahren geben muss, die den Datenaustausch über diesen Bereich regeln.
Aber ich habe nichts dergleichen in der Beschreibung gefunden.
Nun, die Datenübertragung kann über eine Datei oder eine globale Variable des Terminals erfolgen.
Wenn es eine globale Variable ist:
Dies ist der einfachste Weg, um zwischen allen Programmen in einem Terminal auszutauschen
Nun, die Datenübertragung kann über eine Datei oder eine globale Variable des Terminals erfolgen, wie zuvor geschrieben
Wenn eine globale Variable:
Dies ist der einfachste Weg, um zwischen allen Programmen in einem Terminal auszutauschen
Gut. Schreiben wir in Indikator einen Ausdruck:
GlobalVariableSet("Sname", 123.25); Dieses Ereignis tritt z.B. bei onTick() auf.
Aber Skripte arbeiten nicht mit Datenarrays, und sie haben kein OnTick()-Ereignis. Wie das Skript weiß, dass das OnTick()-Ereignis eingetreten ist und die Prozedur anwenden sollte, um neue Daten zu erhalten
GlobalVariableGet("Sname");
Sie können das Ereignis OnTimer() anstelle von OnTick() verwenden. Aber das Skript hat sein eigenes OnTimer(), während der Indikator sein eigenes hat, also sind sie nicht miteinander verbunden.
Hier liegt das Problem:
Wie kann sichergestellt werden, dass die EreignisseGlobalVariableSet("Sname", 123.25); und GlobalVariableGet("Sname"); synchron sind?
Oder gibt es ein Verfahren, das die Änderung des "Sname"-Werts überwacht? Wie OnChange.
Das heißt, woher weiß das Skript, dass der Indikator den Wert von "Sname" geändert hat und dieser Wert 125,35 geworden ist?
Wo ist die Brücke zwischenGlobalVariableSet("Sname", 123.25); und GlobalVariableGet("Sname"); ?
Sie sind in verschiedenen Programmen.
GUT. Lassen Sie uns einen Ausdruck in den Indikator schreiben:
GlobalVariableSet("Sname", 123.25); Dieses Ereignis tritt z.B. ein, wenn OnTick().
Aber Skripte arbeiten nicht mit Datenarrays, und sie haben kein OnTick()-Ereignis. Wie das Skript weiß, dass das OnTick()-Ereignis eingetreten ist und die Prozedur anwenden sollte, um neue Daten zu erhalten
GlobalVariableGet("Sname");
Sie können das Ereignis OnTimer() anstelle von OnTick() verwenden. Aber das Skript hat sein eigenes OnTimer(), während der Indikator sein eigenes hat und sie nicht miteinander verbunden sind.
Hier liegt das Problem:
Wie kann sichergestellt werden, dass die EreignisseGlobalVariableSet("Sname", 123.25); und GlobalVariableGet("Sname"); synchron sind?
Oder gibt es ein Verfahren, das die Änderung des "Sname"-Werts überwacht? Wie OnChange.
Das heißt, woher weiß das Skript, dass der Indikator den Wert von "Sname" geändert hat und dieser Wert 125,35 geworden ist?
Wo ist die Brücke zwischenGlobalVariableSet("Sname", 123.25); und GlobalVariableGet("Sname"); ?
Sie sind in verschiedenen Programmen.
Das Bindeglied ist eine Computerfestplatte. Record Ich denke, das Problem ist nicht, und Sie können es in jedem Fall zu bekommen, auch in dem Skript, es unterscheidet sich nicht von, wie Sie den aktuellen Wert ASK und BID bekommen
P.S. Ich füge einen Indikator und ein Skript als Beispiel bei, im Indikator werden die Tickvolumina aufgezeichnet
Indikator
Drehbuch
Das Bindeglied ist die Festplatte des Computers. Ich denke, es wird kein Problem sein, es zu schreiben, aber Sie können es von jedem Ereignis abrufen, sogar in einem Skript, es ist nicht anders, als wenn Sie die aktuellen ASK- und BID-Werte erhalten
Super!
Und wie soll das gehen?
Nennen Sie mir ein Beispiel.
Zum Beispiel, wie man einen solchen Fall simuliert.
Der Indikator empfängt Daten, berechnet die Varianz der Daten und bereitet Ellipsenpunktkoordinaten für das Skript vor (4 globale Variablen Q1,Q2,T1,T2, die an das Skript übergeben werden).
Nun sollte der Indikator dem Skript einen Befehl geben, der die Ellipse unter Verwendung dieser globalen Variablen zeichnet.
Wie kann der Indikator das tun?
Das Bindeglied ist die Festplatte des Computers. Ich denke, es wird kein Problem sein, aufzuzeichnen, aber Sie können es von jedem Ereignis auch im Skript erhalten, es unterscheidet sich nicht davon, wie Sie die aktuellen Werte von ASK und BID erhalten
P.S. Ich füge einen Indikator und ein Skript als Beispiel bei, im Indikator werden die Tickvolumina aufgezeichnet
Indikator
Das Drehbuch
In Ihrem Beispiel funktioniert das Skript nur einmal - beim Start, d. h. wenn das Ereignis OnStart() eintritt.
Und wie dann?
Wo ist die Synchronisierung?
Wie können Sie das Skript synchron mit dem Indikator arbeiten lassen?
Wie kann das Skript beispielsweise aktiviert werden, wenn das Volumen einen bestimmten Wert überschreitet?
In Ihrem Beispiel funktioniert das Skript also nur einmal - beim Start, d. h. wenn das Ereignis OnStart() eintritt.
Und wie dann?
Wo ist die Synchronisierung?
Wie können Sie das Skript synchron mit dem Indikator arbeiten lassen?
Wie kann das Skript beispielsweise aktiviert werden, wenn das Volumen einen bestimmten Wert überschreitet?
Es ist Ihre Aufgabe, wie Sie mit dem Skript arbeiten. Vielleicht ist es einfacher, einen Expert Advisor zu erstellen als ein Skript?
Ein Indikator, der Werte angibt:
Ein einfaches Beispiel für ein Skript in einer Schleife:
P.S. Ich habe den Code korrigiert.
Es bleibt Ihnen überlassen, wie Sie mit dem Skript arbeiten. Wäre es nicht einfacher für Sie , einen EA statt eines Skripts zu erstellen?
Ein Indikator, der Werte angibt:
Ein einfaches Beispiel für ein Skript in einer Schleife:
Ich habe verstanden, dass es in MQL keine Möglichkeit gibt, verschiedene Module zu synchronisieren.
Gut. Dann habe ich eine Frage. Was ist, wenn ich die Schaltfläche auf dem Feld platziere und das Skript an diese Schaltfläche leite?
Gibt es eine solche Möglichkeit in MQL, oder gibt es auch keine?
Schließlich muss das Skript ja irgendwie gestartet werden!
Ich weiß, dass es in MQL keine Möglichkeit gibt, verschiedene Module zu synchronisieren.
Gut. Dann habe ich eine Frage. Was ist, wenn ich die Schaltfläche auf dem Feld platziere und das Skript an diese Schaltfläche leite?
Gibt es eine solche Möglichkeit in MQL, oder gibt es auch keine?
Das Skript muss irgendwie gestartet werden!
Das Thema ist alt, aber immer noch lesenswert, oder vielleicht schlägt jemand etwas Neues vor. Ich führe keine Skripte aus und arbeite überhaupt nicht mit ihnen)