Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 182

 
Konstantin Nikitin:

Ich lösche zum Beispiel alle Objekte auf meinem VDS. Ich möchte das Diagramm nur nicht überladen. Und dort werden sie nicht gebraucht. Ich verwende Globals. Es kommt also auf die jeweilige Situation an.

Es gibt einen Grund, warum ich sie nicht mag:

  1. Es ist eine Frage der Atomizität der Operationen mit ihnen. Die Dokumente schweigen darüber, obwohl es sich tatsächlich um ein Objekt handelt und Operationen mit ihnen nicht atomar sind, und das Lesen/Schreiben von double selbst in x86, wenn ich mich nicht irre, zwei Anweisungen erfordert.
  2. Die Zugänglichkeit von Variablen außerhalb des Programms.
Wenn Punkt 1 eher ein Murren über die Qualität der Dokumentation ist, ist Punkt 2 ernst gemeint.
 
Vladimir Simakov:

Es gibt einen Grund, warum ich sie nicht mag:

  1. Die Frage der Atomizität der Operationen mit ihnen. Die Dokumentation schweigt dazu, obwohl es sich in der Tat um ein Objekt handelt und Operationen mit ihnen nicht atomar sind, und das Lesen/Schreiben von double in x86 selbst sind, wenn ich mich nicht irre, zwei Anweisungen.
  2. Die Zugänglichkeit von Variablen außerhalb des Programms.
Wenn Punkt 1 eher ein Murren über die Qualität der Dokumentation ist, ist Punkt 2 ernst zu nehmen.

Nun, es ist nicht nötig, ihn zu lesen. Sie können GlobalVariableCheck verwenden, um zu prüfen, ob die Variable vorhanden ist oder nicht. Sie können dasselbe mit Objekten tun.
Sie müssen also nur eine Variable erstellen/prüfen/löschen.

 

Vladimir Simakov:

2. Verfügbarkeit von Variablen außerhalb des Programms.

kein Problem, alle Funktionen, die mit globalen Variablen arbeiten, haben einen Rückgabewert - das Ergebnis der Operation

es gibt ein Synchronisierungstoolhttps://www.mql5.com/ru/docs/globals/globalvariablesetoncondition , es ist nicht viel, aber verwenden Sie, was Sie angeboten werden

Aber der große Nachteil ist der Datentyp - nur double, ich mag double nicht, zumindest ulong wäre brauchbar gewesen, und die Organisation von Name / Wert ---> string / double macht Lust auf Tausch - Daten in string schreiben und Schlüssel in double - mehr für eine Operation kann geschrieben / gelesen werden

aber nachdem ich all dieses "Zeug" geschätzt habe Sie können sie in Binärdateien schreiben, d.h. völlige Freiheit und keine Unsicherheiten.

man muss wahrscheinlich wissen, wie man mit ihnen arbeitet

@fxsaber zeigte Beispiele für die Arbeit mit beliebigen Typenhttps://www.mql5.com/ru/forum/320395/page6#comment_12910394

 
Konstantin Nikitin:

Nun, es ist nicht nötig zu lesen. Sie können einfach GlobalVariableCheck verwenden, um zu prüfen, ob die Variable existiert oder nicht. Das Gleiche gilt für Objekte.
Sie müssen also nur die Variable erstellen/prüfen/löschen.

Ja, ein trivialer Namenskonflikt und der String im anderen Roboter

GlobalVariableDel(yourValueName);

wird Ihre Kaution verlieren))))

Sagen Sie, dass der Name einzigartig sein wird, dass der andere Roboter nie da sein wird, dass das Kind/die Frau/der Freund/die Säuferin nie in die Nähe des Kampfterminals kommen wird))) Einverstanden, aber die Wahrscheinlichkeit ist nicht Null, was bedeutet, dass der Code unzuverlässig wird.

 
Vladimir Simakov:

Es handelt sich um einen trivialen Namenskonflikt und die Linie des anderen Roboters

wird Ihnen Ihre Einlage entziehen)))

Sie werden sagen, dass der Name einmalig sein wird, dass der andere Roboter nie da sein wird, dass das Kind/die Frau/die Freundin/die Betrunkenen selbst nie in die Nähe des Kampfterminals kommen werden))) Einverstanden, aber die Wahrscheinlichkeit ist nicht Null, was bedeutet, dass der Code unzuverlässig wird.

Schwachsinn und Fantasie

Ein EA auf Geld läuft IMMER von einem separaten Terminal aus, auf einem eigenen VDS (oder sogar Server), und niemand kommt jemals mit ihm in Berührung.

 
Maxim Kuznetsov:

Schwachsinn und Fantasie

Ein EA auf dem Geld läuft IMMER von einem separaten Terminal aus, auf einem eigenen VDS (oder sogar Server), und niemand kommt jemals mit ihm in Berührung.

Was meinen Sie mit "IMMER"? Heute - immer, morgen können Sie anders rechnen. Und nicht jeder scheint mit Ihnen einverstanden zu sein.

Ich habe auf die wirkliche Gefahr der Verwendung globaler Variablen des Terminals hingewiesen. Das ist weder gut noch schlecht - es ist eine Gegebenheit, die uns von den Entwicklern mitgegeben wurde, wir müssen uns dessen nur bewusst sein und es in Betracht ziehen.

Die gleiche Zeichenfolge

GlobalVariablesDeleteAll();

...in einem beliebigen Skript erstellt und hoppla...

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenheiten von mql5, Tipps und Tricks

Vladimir Simakov, 2020.05.24 17:02

Die gleiche Zeichenfolge

GlobalVariablesDeleteAll();

...in einem beliebigen Skript gemacht und ups.

Das Gleiche gilt für die grafischen Objekte.

ObjectsDeleteAll(...


Nur die EA-Ressourcen können von anderen Programmen nicht geändert werden.

 

Liebe Kolleginnen und Kollegen, bitte helfen Sie mir, ein Makro zu erstellen, wenn das möglich ist.

Ich muss ein zweidimensionales Array dynamisch deklarieren. Und auch die zweite Dimension muss verändert werden. Das ist in etwa diese Schleife:

for(int would_be_size2=0;would_be_size2<5;would_be_size2++)
    {
     double d_array[][would_be_size2];
     int size2=ArrayRange(d_array,1);
    }

Natürlich wird sich der Compiler dagegen sträuben:

'[' - invalid index value       t7.mq5  20      22

Ich würde gerne ein Makro wie dieses sehen:

#define  CREATE_MARRAY(type,arr_name,size2) (type arr_name[][##size2])

Statt einer Linie:

double d_array[][would_be_size2];

Ich danke Ihnen.

 
Denis Kirichenko:

Liebe Kolleginnen und Kollegen, bitte helfen Sie mir, ein Makro zu erstellen, wenn das möglich ist.

Ich muss ein zweidimensionales Array dynamisch deklarieren. Und auch die zweite Dimension muss verändert werden. Das ist in etwa diese Schleife:

Natürlich wird sich der Compiler dagegen sträuben:

Ich würde gerne ein Makro wie das folgende sehen:

Statt einer Linie:

Ich danke Ihnen.

Aber die Erstellung eines Arrays von ausreichender (maximaler) Größe außerhalb der Schleife wird durch die Politik behindert ? :-)

Der obige Ansatz (das Array in der Schleife jedes Mal neu zu erstellen) bringt keine Vorteile in Bezug auf Geschwindigkeit oder Speicherverbrauch.

 
Denis Kirichenko:

Ich würde gerne ein Makro sehen, das dem hier ähnelt:

Es wird nicht funktionieren.