Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1011
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
Wie lässt sich der Algorithmus am besten schreiben?
Aufgabe:
Ein Expert Advisor läuft auf verschiedenen Charts.
Ich benötige eine separate Datei mit minutengenauen Informationen über das Konto, den Saldo, das Eigenkapital usw.
Nun stellt sich heraus, dass alle Expert Advisors alle Informationen in eine Datei schreiben. Infolgedessen haben wir eine Menge unnötiger Einträge.
Was ist die mögliche ursprüngliche Lösung, so dass nur ein Bot Einträge in der Datei macht (und, wenn es gelöscht wurde, würde der andere Bot anfangen, Einträge zu machen, usw.)
Erstellen Sie in OnInit() ein grafisches Objekt mit dem Namen des EA oder einem beliebigen anderen Objekt. Möglicherweise erstellt der EA bereits ein Objekt, das Sie verwenden können, z. B. "MyEA":ObjectCreate(0,"MyEA",OBJ_...,...))
In OnTick(), wo wir in die Datei schreiben, müssen wir die erste Diagramm-ID mit diesem Label überprüfen = es bedeutet, dass dies der erste Expert Advisor ist, der im Terminal installiert ist, der Rest interessiert uns nicht.
Wir müssen die Überschreitung nutzen:
Wir erhalten das erste Diagramm/Symbol, auf dem ein Expert Advisor installiert ist
Dann vergleichen wir sie mit dem ersten Expert Advisor, bevor wir sie in eine Datei schreiben:
Es ist kein einfaches Konstrukt, aber es ist besser als das Schreiben in die globale Variable
Nehmen Sie die Standard-MA, ändern Sie den Puffer-Datentyp, kompilieren Sie und prüfen Sie im Terminal-Datenfenster (Strg+D)
ChartID() wird mit einem Fehler in die globalen Variablen des Terminals geschrieben. Was ist das für ein Unsinn?
Probieren Sie diesen Code aus:
Das Ergebnis der Ausführung dieses Codes
Erstellen Sie ein grafisches Objekt in OnInit() mit dem Namen des EA oder einem anderen Objekt, vielleicht erstellt der EA bereits ein Objekt, dann können Sie es verwenden, nehmen wir "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))
In OnTick(), wo wir in die Datei schreiben, müssen wir die erste Diagramm-ID mit diesem Label überprüfen = es bedeutet, dass dies der erste Expert Advisor ist, der im Terminal installiert ist, der Rest interessiert uns nicht.
Wir müssen die Überschreitung nutzen:
Wir erhalten das erste Diagramm/Symbol, auf dem ein Expert Advisor installiert ist
Dann vergleichen wir sie mit dem ersten Expert Advisor, bevor wir sie in eine Datei schreiben:
Es ist keine einfache Konstruktion, aber es ist besser als das Schreiben in die globale Variable
Ja, gute Idee.
Ich danke Ihnen.
Frage: Was ist, wenn EA gelöscht wurde (z. B. aufgrund eines Fehlers), das Objekt aber erhalten geblieben ist? Was ist zu tun, wenn das Diagramm vollständig geschlossen ist, müssen wir irgendwie neu zuweisen die "main" EA?
Ja, das ist eine gute Idee.
Ich danke Ihnen.
Frage dann: Was ist, wenn der EA gelöscht wurde (z.B. aufgrund eines Fehlers), das Objekt aber erhalten geblieben ist. Was ist zu tun, wenn das Diagramm in seiner Gesamtheit geschlossen ist, müssen wir irgendwie neu zuweisen die "main" Expert Advisor?
Es gibt nur einen Fall, in dem ein Fehler auftritt - wenn der Expert Advisor versehentlich gelöscht wurde und das Objekt übrig blieb, aber ich erinnere mich nicht an einen solchen Fehler in MT4. In allen anderen Fällen wird der Hauptsachverständige neu zugewiesen.
P.S. Versuchen Sie zu prüfen, ob OnDeInit() bei einem Fehler im Expert Advisor ausgegeben wird und sich selbst aus dem Chart löscht. Wahrscheinlich können Sie dies leicht überprüfen, indem Sie eine Variable erstellen, die Ticks zählen und beim 11. Tick durch 10/0 teilen.
In OnDeInit() verwenden Sie Print und sehen die Ursache der Deinitialisierung, und wenn sie auftritt, dann löschen Sie mit dieser Ursache/Nummer das Objekt "MyEA" aus der Tabelle
Sie können über das Ergebnis schreiben, denn ich habe keine Zeit, es selbst zu überprüfen
Erstellen Sie ein grafisches Objekt in OnInit() mit dem Namen des EA oder einem anderen Objekt, vielleicht erstellt der EA bereits ein Objekt, dann können Sie es verwenden, nehmen wir "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))
In OnTick(), wo wir in die Datei schreiben, müssen wir die erste Diagramm-ID mit diesem Label überprüfen = es bedeutet, dass dies der erste Expert Advisor ist, der im Terminal installiert ist, der Rest interessiert uns nicht.
Wir müssen die Überschreitung nutzen:
Wir erhalten das erste Diagramm/Symbol, auf dem ein Expert Advisor installiert ist
Dann vergleichen wir sie mit dem ersten Expert Advisor, bevor wir sie in eine Datei schreiben:
Es ist kein einfaches Konstrukt, aber es ist besser als das Schreiben in eine globale Variable
Ich glaube, Sie irren sich. GVs werden nicht jedes Mal auf die Festplatte geschrieben. Andernfalls gäbe es keinen Grund, GV auf die Festplatte zu zwingen.
Und obendrein alle Charts auf der Suche nach EA und Objekt durchzugehen... Vitaly, das ist schade...Ich glaube, Sie irren sich. GVs werden nicht jedes Mal auf die Festplatte geschrieben. Sonst bräuchten wir die Funktion des erzwungenen Schreibens von GV auf die Festplatte nicht.
Ja plus durch alle Charts zu gehen auf der Suche nach EA und Objekt... Vitaly, das ist wirklich schade...Ja, das sind sie:GlobalVariableSet("GV",ID);
Profile -> gvariables.dat
Auch wie sie geschrieben sind:GlobalVariableSet("GV",ID);
Profile -> gvariables.dat
Wenn Sie es erstellen, vielleicht, aber wenn Sie es überschreiben, bevor Sie die Anwendung, die dort schreibt, deaktivieren, müssen Sie überprüfen. Ich bin zu faul. Rein theoretisch wäre die oben beschriebene Funktion jedoch nur ein Geklapper, wenn sie jedes Mal auf die Festplatte geschrieben würde.
Das können Sie nicht tun.
Suchen Sie nach einem Windows-Programm, das Daten in Ordnern synchronisiert. Und richten Sie es so ein, dass der Expert Advisor automatisch auf ein neues Terminal kopiert wird.
Soweit ich weiß, gibt es solche Programme, aber sie arbeiten nur mit Dateien, aber wenn es ein Textdokument ist, kopiert es den Inhalt nicht und ersetzt keine Dateien, vielleicht habe ich kein normales Programm gefunden. Es ist zu schade, dass die Entwickler nicht die Möglichkeit, den Pfad, von wo aus Expert Advisor oder Roboter-Datei herunterladen, dachte ich, ich könnte den Pfad angeben, wie es in der Regel getan, aber wie Sie oben darauf hingewiesen, es ist unmöglich.
Soweit ich weiß, gibt es solche Programme, aber sie arbeiten nur mit Dateien, aber wenn es sich um ein Textdokument handelt, wird der Inhalt nicht kopiert und Dateien werden nicht ersetzt, vielleicht habe ich kein normales Programm gefunden. Ich finde es schade, dass die Entwickler die Möglichkeit nicht berücksichtigt haben, Pfade zu setzen, um Roboter- oder Expertendateien zu erhalten. Ich dachte, es wäre möglich, Pfade zu setzen, wie es normalerweise gemacht wird, aber wie Sie bereits erwähnt haben, ist es nicht möglich.
Beachten Sie in diesem Beitrag die Worte "Alle Terminals haben gemeinsame Ordner".
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Was muss ich tun, wenn ich ein Marketplace-Produkt verwenden möchte?
Sergey Tabolin, 2019.11.23 08:17
Glauben Sie ernsthaft, ich wüsste nicht, wie und wo ich sie installieren soll? )))
Alle Terminals haben gemeinsame Verzeichnisse
Ich habe einen kostenlosen Indikator vom Markt heruntergeladen. Es bindet sich an die Hardware.
Warum funktioniert es auf der einen Hardware, aber nicht auf der anderen?
Offensichtliche Schlussfolgerung - es bindet, zumindest nicht nur an die Hardware...
Suchen Sie nach Informationen darüber, wie das gemacht wird, und los geht's... Dies wird als Ordnerverknüpfung bezeichnet.