[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 308

 
Um wie viel Uhr ist es jetzt in den USA? Um wie viel Uhr öffnet/schließt es in den USA? Um wie viel Uhr öffnet/schließt es in Japan? Nur mit der Abschaffung der Winterzeit ist es etwas unklar... und stellen Europa, Asien, USA ihre Uhren um?
 
Elenn:
Die Lösung ist wirklich originell, wir sollten sie ausprobieren. Aber wenn das Array neu initialisiert wird, gehen dann nicht die Daten durch die Neuinitialisierung verloren?

Wenn Sie die Größe des Feldes erhöhen, gehen die zuvor eingegebenen Daten nicht verloren. Und die "eingefangenen" (neuen) Zellen werden RAM-Müll enthalten. Und wenn Sie das Feld verkleinern, gehen die Daten in den verkleinerten Zellen unwiederbringlich verloren. Dies sind die Grundlagen der Programmierung.
 
vilard:

Wie lange dauert es, bis ein schwebender MODE_TRADE-Auftrag zu einem MODE_HISTORY-Auftrag wird?

Im Handumdrehen. Schwebende Aufträge werden nicht in der Historie gespeichert.

Sobald er in einen Marktauftrag umgewandelt und geschlossen wird, ist er Geschichte, aber mit einem Marktauftragstyp.

Zum Beispiel:

Wenn es OP_BUYSTOP gab, dann wurde es in OP_BUY umgewandelt. Nach ihrer Schließung wird sie in die Historie aufgenommen.

ABER, nach der Umwandlung von OP_BUYSTOP in OP_BUY wird das ursprüngliche OP_BUYSTOP nicht mehr in der Historie vorhanden sein.

 
001:

Guten Abend, bitte beraten Sie mich. Es gibt zwei Indikatorwerte auf verschiedenen Balken. Wie zieht man eine Linie durch sie und wie arbeitet man mit ihr im Indikator? Ich danke Ihnen!

Die Linie zwischen ihnen kann mit dem Objekt OBJ_TREND gezeichnet werden. Die erste Koordinate ist der Zeitpunkt und der Preis des ersten Balkens, die zweite Koordinate ist der Zeitpunkt und der Preis des zweiten Balkens.

Funktion:

//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm, datetime t1=0, double p1=0, datetime t2=0, double p2=0, int st=0, int sz=0) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1    , t1);
   ObjectSet(nm, OBJPROP_PRICE1   , p1);
   ObjectSet(nm, OBJPROP_TIME2    , t2);
   ObjectSet(nm, OBJPROP_PRICE2   , p2);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_STYLE    , st);
   ObjectSet(nm, OBJPROP_WIDTH    , sz);
   ObjectSet(nm, OBJPROP_RAY      , 0);
}
//+----------------------------------------------------------------------------+

Ich hoffe, dass darin alles klar ist.

cl - Objektfarbe, nm - Objektname, t1, p1 - Ursprungskoordinaten, t2, p2 - Endkoordinaten, st - Linienart, sz - Größe.

Sie können auch Strahlen hinzufügen: 1 - Strahl, 0 - Segment. Die letzte Zeile dieser Funktion definiert ein Segment. Anstelle von 0 können Sie den Namen des zu übergebenden Parameters angeben.

Wie man mit ihr (dieser Zeile) im Indikator arbeitet, hängt davon ab, was man von ihr braucht. Die Daten darauf (die Linie) lassen sich jedoch mit der Standardfunktion

ObjectGet("Objektname", erforderliche Objekteigenschaft);

 
artmedia70:

Mit dem Objekt OBJ_TREND können Sie eine Linie zwischen ihnen ziehen. Die erste Koordinate ist der Zeitpunkt und der Preis des ersten Balkens, die zweite Koordinate ist der Zeitpunkt und der Preis des zweiten Balkens.

Funktion:

Ich hoffe, dass darin alles klar ist.

cl - Farbe des Objekts, nm - Objektname, t1, p1 - Ursprungskoordinaten, t2, p2 - Endkoordinaten, st - Linienstil, sz - Größe.

Sie können auch Strahlen hinzufügen: 1 - Strahl, 0 - Segment. Die letzte Zeile dieser Funktion definiert ein Segment. Anstelle von 0 können Sie den Namen des zu übergebenden Parameters angeben.

Wie man mit ihr (dieser Zeile) im Indikator arbeitet, hängt davon ab, was man von ihr braucht. Die Daten darauf (die Linie) können jedoch mit der Standardfunktion

ObjectGet("Objektname", die erforderliche Objekteigenschaft);


Herzlichen Dank! Eine weitere Frage, wenn ich darf. Wie zu arbeiten (ich muss wissen, welchen Wert der Trend nimmt auf einem bestimmten bar), wie der Trend in der EA zu arbeiten. Ich möchte einen Teil des Indikators in den Expert Advisor übertragen (Berechnungen).
 
Guten Morgen!!! Ich kann nicht auf das Konto zugreifen! Was zum Teufel ist dieser "allgemeine Fehler"?
 
Stimmt wieder etwas mit dem Computer nicht?
 
Elenn:
Die Lösung ist wirklich originell, wir sollten sie ausprobieren.


Ich zitiere Ihnen einfach einen kleinen Text aus dem Delphi-Tutorial. Es kann nicht schaden, es zu wissen.

"Dynamische Arrays" sind dynamische Datenstrukturen. Das Programm sollte daher vorsehen, dass sie explizit aus dem Computerspeicher entfernt werden, wenn Sie mit ihnen fertig sind. Der Prozess des Entfernens unnötiger dynamischer Variablen aus dem Computerspeicher wird manchmal als Müllsammlung bezeichnet.

Eine Variante, die in MQL4 funktioniert, ist die Größenänderung eines dynamischen Arrays auf die Länge Null mit der Funktion ArrayResize() https://docs.mql4.com/ru/array/ArrayResize, wenn das Programm die Arbeit mit dem Array beendet.

 
drknn:


Ich denke, ich werde Ihnen ein kleines Stück Text aus dem Delphi-Tutorial zitieren. Das ist gut zu wissen.

"Dynamische Arrays" sind dynamische Datenstrukturen. Das Programm sollte daher vorsehen, dass sie explizit aus dem Computerspeicher entfernt werden, wenn Sie mit ihnen fertig sind. Der Prozess des Entfernens unnötiger dynamischer Variablen aus dem Computerspeicher wird manchmal als Müllsammlung bezeichnet.

Eine Variante, die für die Sprache MQL4 geeignet ist, besteht darin, ein dynamisches Array mit der Funktion ArrayResize() https://docs.mql4.com/ru/array/ArrayResize auf die Länge Null zu verkleinern, nachdem Sie die Arbeit damit beendet haben.

Das ist alles wahr: Müll aufräumen ist eine gute Faustregel...

Aber wie soll man in diesem Zusammenhang entscheiden, ob man den "Müll" jetzt wegräumen soll oder umgekehrt: Es ist kein Müll, sondern notwendige Daten für weitere Berechnungen.

So wie ich es verstehe, sollte deinit() verwendet werden, um den Papierkorb aufzuräumen, aber... Es wird nicht nur ausgeführt, wenn das Diagramm eines Handelsinstruments gelöscht und der EA entfernt wird, sondern auch, wenn die TF geändert wird. In diesem Fall gehen alle akkumulierten Daten für den TF verloren und der Expert Advisor beginnt seine Arbeit mit einem Null-Array, wenn er zum vorherigen Zeitrahmen zurückkehrt. Dasselbe geschieht, wenn wir einen der EA-Parameter ändern.

Es hat sich herausgestellt, dass in manchen Situationen das "Scavenging" ein komplexer logischer Prozess ist und nicht einfach die Größe eines Arrays ändert.

 
001:

Herzlichen Dank! Eine weitere Frage, wenn ich darf. Wie zu arbeiten(ich muss wissen, welchen Wert der Trend nimmt auf einem bestimmten bar), wie man mit dem Trend in der EA arbeiten. Ich möchte einen Teil des Indikators in den Expert Advisor übertragen (Berechnung).

ObjectGetValueByShift(), um Ihnen zu helfen

Und wie Sie damit arbeiten werden - das wissen nur Sie...

Grund der Beschwerde: