Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1011

 
Sergey Likho:

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:

string ChartGetSymb()
  {
   string symb="";
   long chartID=ChartFirst();
   while(chartID!=-1) 
    {
      if(ObjectGetString(chartID,"MyEA",OBJPROP_NAME)=="MyEA")
       {
        symb=ChartSymbol(chartID);
        break;
       }
      chartID=ChartNext(chartID);
     }
   return(symb);
  }

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:

if(ChartGetSymb() == Symbol()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


Es ist kein einfaches Konstrukt, aber es ist besser als das Schreiben in die globale Variable

 
Artyom Trishkin:

Nehmen Sie die Standard-MA, ändern Sie den Puffer-Datentyp, kompilieren Sie und prüfen Sie im Terminal-Datenfenster (Strg+D)

Das würde nicht helfen, da es im Terminal nicht angezeigt wird. Aber ich habe es im ZigZag-Indikator überprüft, der zwei zusätzliche Puffer für High und Low hat, die als INDICATOR_CALCULATIONS deklariert sind. Sie werden auch aus dem Programm übernommen, obwohl sie nicht im Terminal angezeigt werden. Trotzdem danke für den Tipp.
 
Sergey Likho:

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

2019.11.29 15:22:07.453 Script 00 EURUSD,H1: removed
2019.11.29 15:22:07.453 00 EURUSD,H1: uninit reason 0
2019.11.29 15:22:07.453 00 EURUSD,H1: GVAR id:131992895281608496 GV_id:131992895281608496
2019.11.29 15:22:07.453 00 EURUSD,H1: initialized
2019.11.29 15:22:07.433 Script Test\00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko:

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?

 
Sergey Likho:

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

t++;
if(t > 10) {
 int e = 10;
 e /= 0;
}

Sie können über das Ergebnis schreiben, denn ich habe keine Zeit, es selbst zu überprüfen

 
Vitaly Muzichenko:

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.

void  GlobalVariablesFlush();
Und obendrein alle Charts auf der Suche nach EA und Objekt durchzugehen... Vitaly, das ist schade...
 
Alexey Viktorov:

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


 
Vitaly Muzichenko:

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.

 
Sergey Likho:

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.

 
Seric29:

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.

Grund der Beschwerde: