Fragen von einem "Dummy" - Seite 68

 

x100intraday:

Die Hauptsache, die ich wissen möchte: ist es möglich, Zeitpuffer direkt wie Preispuffer zu füllen (ohne Rückgriff auf CopyTime und andere regelmäßige Funktionen des Kopierens in ein Array), und wie, und wenn nicht, warum?

2. ist es wirklich notwendig, ein anderes Paar von Puffern für die Speicherung von Sekunden seit Anfang 1970 zu erstellen, aber mit Typ nicht datetime, aber einige double oder long, zum Beispiel, und in notwendigen Momenten durch TimeToString zu Zeitformat als literalen String zu konvertieren?

1. unmöglich. mit "Warum?" - an Entwickler.

In Ihrem Fall ist dies die einfachste Lösung. (Funktioniert garantiert.) Da Sie die Frage nach dem Auffüllen von Puffern ähnlich den Preispuffern aufwerfen.

An meiner Stelle würde ich versuchen, eine solche Speicherverschwendung auf algorithmischer Ebene zu vermeiden, und auf keinen Fall Puffer mit Nutzdaten anlegen, die zu 3 % gefüllt sind.

 
MetaDriver:

An meiner Stelle würde ich versuchen, diese Speicherverschwendung auf algorithmischer Ebene zu vermeiden und keine Puffer mit 3 % nutzbaren Daten zu erstellen.

Nun, hier kommt die Frage-Erklärung: https://www.mql5.com/ru/forum/1111/page529#comment_101059 mit mindestens einer verständlichen und nicht unverständlichen Antwort, wenn auch ganz im Gegenteil. Das Interesse ist groß...
 
x100intraday:

ja, bada))

"Datums- undZeitkonstanten... " und "...kann als literaler String dargestellt werden".

kann dargestellt werden oder auch nicht... es ist für Eingabe-/Ausgabedaten in der üblichen Datums-/Zeitform.

Außerdem können wir Arrays dieses Typs nicht mit Indikatorpuffern verknüpfen (und das ist auch nicht nötig?), wir können SetIndexBuffer aus bekannten Gründen nicht auf Arrays dieses Datentyps anwenden.

Es gibt nichts, was verhindert, dass der Typ datetime im Indikatorpuffer enthalten ist (es ist wünschenswert).

Und das tun wir nicht.

Und vergeblich)

Kompilieren Sie den resultierenden Code. Wir erhalten die Warnung"truncation of constant value" in Bezug auf Strings mit =EMPTY_VALUE(wir sind traurig überrascht) und einen Fehler im Expertenbericht des Terminals: "Array out of range " in Bezug auf die gleichen Strings (wir regen uns endlich auf). Es scheint, dassEMPTY_VALUE nichtin den Datentyp datetime passen will, während die Größe des Arrays bei Null bleibt. Wenn manEMPTY_VALUE auf 0ändert, verschwindet der Fehler, aber das Array hatimmer noch die Größe Null.

EMPTY_VALUE ist vom Typ Double.

Mit einem Indikatorpuffer wäre es einfacher - wir müssen die Größe des Arrays nicht bestimmen.

Seltsam ist auch, dass die Größe von ExtUpperBuffer und ExtLowerBuffer nicht Null ist, d.h. sie sind gefüllt, aber es erscheinen keine Fraktale. Warum sollte das so sein?

Ich weiß es nicht).

Die Hauptsache, die mich interessiert: ist es möglich, in die Zeitpuffer direkt ähnlich wie Preis-Puffer zu füllen (ohne Rückgriff auf die CopyTime und andere regelmäßige Funktionen des Kopierens in das Array), und wie, und wenn nicht, warum? Wirklich, für diesen Zweck muss ich ein anderes Paar von Puffern für die Speicherung von Sekunden von Anfang 1970 erstellen, aber mit Typ nicht datetime, aber einige double oder long, zum Beispiel, und in notwendigen Momenten durch TimeToString zu Zeitformat als literal String konvertieren?

Der Zugriff auf Daten wie datetime ist ähnlich wie der Zugriff auf Preisdaten.

datetime ist im Wesentlichen dasselbe wie int/long.

P.S.: Wer zu faul ist, den Code von Fractals.mq5 zu reproduzieren, möge mir bitte sagen, wie man die berechneten spezifischen Zeitdaten speichert (ohne Handles von eingebauten Indikatoren aufzurufen und mit ihnen zu arbeiten)?

Es ist dasselbe wie bei Integer-Daten, int/datetime/long ist dasselbe.

 
Swan:

ja, badaada))

nichts verhindert, dass der Typ datetime im Indikatorpuffer enthalten ist (was wünschenswert ist).

Und vergeblich)

Mit dem Indikatorpuffer ist es einfacher - Sie müssen die Größe des Arrays nicht bestimmen.

Und was genau mache ich falsch? Alles ist detailliert beschrieben, der Quellcode ist standardisiert, erprobt, am einfachsten! Modifikationen sind einfach und offensichtlich... Ich kann in meinem vernebelten Geist keine Spekulationen anstellen... Wenn ich mit etwas nicht weiterkomme, kann ich genauso gut einen Automechaniker mit einem Schraubenschlüssel anrufen...

Und wie lautet der Runenzauber , um Datetime-Arrays mit Indikatorpuffern zu verbinden ? Nochmals:


SetIndexPuffer

Bindet den angegebenen Indikatorpuffer an ein eindimensionales dynamisches Array vom Typ double, das global deklariert ist.

 
x100intraday:

Und was genau mache ich falsch? Immerhin habe ich alles ausführlich beschrieben, der Quellcode ist in der Regel Standard, erprobt, das Einfachste! Die Änderungen sind einfach und offensichtlich... Ich verliere mich in den Spekulationen meines vernebelten Geistes... Wenn ich mit etwas nicht weiterkomme, kann ich genauso gut einen Automechaniker mit einem Schraubenschlüssel anrufen...

Und wie lautet der Runenzauber , um Datetime-Arrays mit Indikatorpuffern zu verbinden ? Nochmals:


SetIndexPuffer

Bindet den angegebenen Indikatorpuffer an ein eindimensionales dynamisches Array vom Typ double, das global deklariert ist.

Sie brauchen diese Zeitangabe nicht. Schreiben Sie alles in ein Double-Array und konvertieren Sie es in datetime, bevor Sie es verwenden (falls erforderlich).

Im Grunde besteht der einzige Unterschied zwischen datetime und double in der Darstellung. Sie können die in double geschriebene Zeit verlustfrei in datetime umwandeln.

Beide sind 8-Byte-Typen.

 
x100intraday:

Und was genau mache ich falsch? Immerhin habe ich alles ausführlich beschrieben, der Quellcode ist in der Regel Standard, erprobt, das Einfachste! Die Änderungen sind einfach und offensichtlich... Ich verliere mich in den Spekulationen meines vernebelten Geistes... Wenn ich mal nicht weiterkomme, will ich einen Automechaniker mit einem Halbmondschlüssel...

Über die Details des geänderten Codes kann ich nur Vermutungen anstellen...

Und wie man Runen-Zauber verwenden , um Datetime-Typ-Arrays an Indikatorpuffer zu binden ? Nochmals:


SetIndexPuffer

Bindet den angegebenen Indikatorpuffer an ein eindimensionales dynamisches Array vom Typ double, das global deklariert ist.

Urain hat es schon beantwortet. Nun, damit der Compiler nicht flucht, etwa so:

double ExtUpperTimeBuffer[];//обьявляем
...
ExtUpperTimeBuffer[xz0]=(double)time[xz1];//присваиваем
...
datetime XZ=(datetime)ExtUpperTimeBuffer[xz2];//юзаем
 

Also... Ja...

Nichts Bahnbrechendes, aber der Boden ist sozusagen fest gepflügt.

Ich danke euch allen für den medizinischen Kick. Ich werde es ausprobieren...

 
x100intraday:

Ich danke euch allen für die medizinischen Kicks.

Und Glücksstöße : D
 

Gibt es eine interne Entsprechung der Bibliotheksfunktion array.Add()?

P.S.: Wenn nicht, geben Sie einen Jahresvorrat an Schlaftabletten.

 
x100intraday:

Gibt es eine interne Entsprechung der Bibliotheksfunktion array.Add()?

P.S.: Wenn nicht, geben Sie einen Jahresvorrat an Schlaftabletten.

Warum wird das Datum nicht im Indikator...... oder im Puffer...... vom Typ double gespeichert?

Es werden viele Punkte hinzugefügt, ansonsten erscheint eine Art Link.

double time[10];

time[0] = (double) D'3000.12.31 23:59';
time[1] = (double) D'2030.12.31 23:59';

Print(TimeToString((datetime)time[0]));
Print(TimeToString((datetime)time[1]));

Alles wird korrekt und fehlerfrei konvertiert

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5