Diskussion zum Artikel "Tipps von einem professionellen Programmierer (Teil II): Speichern und Austauschen von Parametern zwischen einem Expert Advisor, Skripten und externen Programmen" - Seite 2

 
Der Artikel ist unzureichend entwickelt.
Beispiele für Parameter
  • Null-Bar-Zeit
....
Wo können solche Parameter gespeichert werden?
Warum wird die Zeit des Nullbalkens an einer der vorgeschlagenen Stellen gespeichert?

Aus der Tabelle: die Lebensdauer einer Datei ist durch die Lebensdauer der Datei begrenzt. Was spricht gegen "die Lebensdauer einer globalen Variable ist durch die Lebensdauer einer globalen Variable begrenzt" :)))?

Um beliebige Daten in globale Variablen zu packen, ist es besser, union zu verwenden.

Es wird nichts über binäre Dateien gesagt....
 
In letzter Zeit ist das Niveau der Artikel in Bezug auf die Komplexität der Ideen und Ansätze gesunken, aber natürlich nicht in allen.
 

...

Wie Sie wissen, wird der OnInit-Handler eines Expert Advisors nicht nur ausgelöst, wenn er gestartet wird, sondern auch, wenn der Zeitrahmen geändert wird. Tatsächlich werden bei jedem Wechsel des Zeitrahmens die Variablen zurückgesetzt und neu initialisiert, mit Ausnahme der Parameter des Expert Advisors.

...

Falsch. Genau das passiert im Indikator. Wenn Parameter geändert werden und das Symbol/Zeitrahmen des Charts geändert wird, wird der Expert Advisor nicht neu initialisiert.

Was nun den Informationstransfer zwischen Expert Advisors/Indikatoren/Diensten usw. angeht

  1. Globale Terminalvariable - aha, der Roboter handelt mit echtem Geld, und seine Arbeit basiert auf den Daten, auf die jeder Zugriff hat: Indikatoren, Skripte, andere Experten, die Kinder des Benutzers, der Benutzer selbst mit frechen Händen....
  2. Ein grafisches Objekt in einem Diagramm ist dasselbe.
  3. Kommentare zu Aufträgen - DC kann sie ändern (oops).
  4. Datei (binär ist besser) - wahrscheinlich die beste von allen im Artikel aufgeführten, aber die Entwickler haben nie die Frage nach der Synchronisation der Dateifreigabe beantwortet (oder ich habe sie übersehen). Und es ist eine Krücke.

Bleibt also nur EventChartCustom(...), mit all seinen Nachteilen.

Also, kreuzen Sie das Kästchen an, um den Import von dll zuzulassen und fangen Sie an, das Richtige zu tun, oder, besser, auf keinen Fall.

 
Aliaksandr Hryshyn:
1) Der Artikel ist unzureichend entwickelt.
Beispiele für Parameter
  • Zeit des Nulltakts
2) Warum wird die Zeit des Nulltakts an einem der vorgeschlagenen Orte gespeichert?

3) Aus der Tabelle: die Lebensdauer einer Datei ist durch die Lebensdauer der Datei begrenzt. Was ist falsch an "die Lebensdauer einer globalen Variablen ist durch die Lebensdauer einer globalen Variablen begrenzt" :)))?

4) Um beliebige Daten in globale Variablen zu packen, ist es besser, union zu verwenden.

5) Es wird nichts über Binärdateien gesagt....

1) Ich wurde vom Moderator gelobt.

2) um die Balkenanalyse nicht wiederholt durchführen zu müssen

3) die Lebensdauer der Datei ist länger als die Lebensdauer der globalen Variablen

4) Ich habe eine der Möglichkeiten des Packens gezeigt

5) Ich benutze sie nicht

 
Vladimir Simakov:

...

a) Falsch. Genau das passiert im Indikator. Wenn Parameter geändert werden und Symbol/Zeitrahmen des Charts geändert wird, wird der Expert Advisor nicht neu initialisiert.

Was nun den Informationstransfer zwischen Expert Advisors/Indikatoren/Diensten usw. betrifft.

  1. Globale Terminalvariable - aha, der Roboter handelt mit echtem Geld, und seine Arbeit basiert auf den Daten, auf die jeder Zugriff hat: Indikatoren, Skripte, andere Experten, die Kinder des Benutzers, der Benutzer selbst mit frechen Händen....
  2. Ein grafisches Objekt in einem Diagramm ist dasselbe.
  3. Kommentare zu Aufträgen - DC kann sie ändern (oops).
  4. Datei (binär ist besser) - wahrscheinlich die beste von allen im Artikel aufgeführten, aber die Entwickler haben die Frage nach der Synchronisierung der Dateifreigabe nie beantwortet (oder ich habe sie übersehen). Oh, und es ist eine Krücke.

b) Also, kreuzen Sie das Kästchen an, um den DLL-Import zuzulassen, und fangen Sie an, es richtig zu machen, oder, besser, gar nicht.

a) Ich stimme zu, dass die Reinitialisierung von Expert Advisor-Variablen nicht durchgeführt wird.

1-2) wir sprechen über den Austausch zwischen Ihrem EA und Skripten. Wenn Sie wollen, können Sie die Informationen verschlüsseln ;-)

3) der DC kann im MT4 etwas am Ende hinzufügen. Im MT5 gibt es so etwas nicht, zumindest bei mir ;-)

4) Nun, ich benutze normalerweise das Flag FILE_SHARE_READ.

int file = FileOpen(path, FILE_SHARE_READ|FILE_UNICODE);

b) wenn Sie es für sich selbst machen, dann wie man sagt "Flag in your hands....".

Wenn man es für den Markt macht, gehen DLLs dort nicht durch.

 
Malik Arykov:

(a) vereinbart, dass es keine Reinitialisierung von EA-Variablen gibt

1-2) es geht um den Austausch zwischen dem Expert Advisor und Skripten. Sie können die Informationen verschlüsseln, wenn Sie wollen ;-)

3) in MT4 am Ende etwas hinzuzufügen. In MT5 gibt es so etwas nicht, zumindest nicht für mich.

4) Nun, ich benutze normalerweise das Flag FILE_SHARE_READ

b) wenn Sie es für sich selbst machen, dann, wie man sagt, "flag in your hands....".

Wenn Sie es für den Markt tun, DLLs nicht dort passieren.

1-2) Also verschlüsseln oder nicht verschlüsseln, aber man kann es immer noch ändern/löschen)))))

3) Wenn nicht ausdrücklich gesagt wird, dass man das nicht kann, dann ... Ich persönlich bin mir nicht sicher, ob ich dazu in der Lage sein werde.

4) Ich spreche nicht davon, ich spreche von der Situation der Daten-"Rennen", wenn eine Ressource von verschiedenen Threads gemeinsam genutzt wird. Führen Sie die beiden angehängten Skripte auf verschiedenen Graphen aus. Führen Sie zuerst das Schreiben aus. Dies ist die Antwort auf meine seit langem gestellte Frage zu Metaquotes. Und wieder im Zusammenhang mit dem Testergebnis, zu dem ich endlich gekommen bin (dank TC) und der Frage an sie: Wo sind die nativen Synchronisationsprimitive?

Das ist auch die Antwort darauf, warum es für einen Profi irgendwie mau ist, so etwas auf dem Markt zu machen, ohne die Kunden in großen Briefen zu warnen.

Dateien:
write.mq5  2 kb
read.mq5  2 kb
 
Vladimir Simakov:

....

Alle Beispiele aus meinen Artikeln, ich habe sie arbeiten gut für mich (in meinem EA und Skripte)

 
Malik Arykov:

Alle Beispiele aus meinen Artikeln, ich habe sie arbeiten gut für mich (in meinem EA und Skripte)

In meinem Beitrag geht es nicht darum, was nicht funktioniert, sondern um die Tatsache, dass die Sicherheit und Integrität der Daten nicht gewährleistet ist. Bei der Verwendung aller oben genannten Methoden der Datenübertragung ist die Zuverlässigkeit des Mechanismus nicht gewährleistet. Außerdem hängt dies nicht mit möglichen Fehlern von Drittsystemen zusammen (Terminal, Betriebssystem, Hardwarefehler), sondern mit der Methode selbst: Kollision von Namen oder Benutzeraktionen im Falle globaler Terminalvariablen, gleiche + Löschfunktionen für grafische Objekte, fehlende Synchronisierung für Operationen zum Lesen und Schreiben einer Datei aus verschiedenen Threads.

Ja, die Wahrscheinlichkeit dafür kann auf sehr niedrige Werte reduziert werden, aber nicht auf 0. Das sollten Sie im Hinterkopf behalten)

 
Vladimir Simakov:

In meinem Beitrag geht es nicht darum, was nicht funktioniert, sondern darum, dass die Sicherheit und Integrität der Daten nicht gewährleistet ist. Bei der Verwendung aller oben genannten Methoden der Datenübertragung ist die Zuverlässigkeit des Mechanismus nicht gewährleistet. Außerdem hängt es nicht mit möglichen Fehlern von Drittsystemen zusammen (Terminal, Betriebssystem, Hardwarefehler), sondern mit der Methode selbst: Kollision von Namen oder Benutzeraktionen bei globalen Terminalvariablen, gleiche + Löschfunktionen für grafische Objekte, fehlende Synchronisierung für Operationen zum Lesen und Schreiben einer Datei aus verschiedenen Threads.

Ja, die Wahrscheinlichkeit dafür kann auf sehr niedrige Werte reduziert werden, aber nicht auf 0. Das sollten Sie im Hinterkopf behalten)

Das Speichern von Parametern in Dateien bietet 100%ige Zuverlässigkeit. Alle Ihre "Kollisionen" werden durch Präfixe von Objektnamen, einschließlich globaler Variablen, gelöst.

Zum Beispiel werden die Level-Parameter in Files\Cayman\Params\128968168864101576\exp_05_Lev607A160E_H4.txt gespeichert. Dabei ist 128968168864101576 die ChartID. Niemand außer dem Analysator dieser bestimmten Ebene kennt diese Datei. Nehmen Sie ein beliebiges Stück Code aus dem Artikel und versuchen Sie, es zu "brechen" ;-) Wenn Sie ihn brechen, werde ich Ihnen zeigen, wo Sie einen Fehler gemacht haben ;-)

 
void OnStart()
  {
   while(!IsStopped())
      for(int i=GlobalVariablesTotal();i>=0;--i)
         GlobalVariableSet(GlobalVariableName(i),MathRand());
  }

Etwas wie dieses Skript in einem beliebigen EA/Indikator/Skript/Dienst, das von einem neugierigen Benutzer ausgeführt wird, und Sie haben wochenlang Spaß bei der Suche nach einem nicht reproduzierbaren Fehler, der nicht existiert)))))