OBJ_VLINE - Seite 2

 
Sie müssen das Objekt auch nicht bei jedem Tick neu anlegen, da dies das Fehlerprotokoll mit der Meldung 4200 Objekt existiert bereits überflutet. Legen Sie das Objekt stattdessen einmalig in der On-Init-Funktion an und verschieben Sie es später auf das gewünschte Datum.
 
Marco vd Heijden:
Sie müssen das Objekt auch nicht bei jedem Tick neu erstellen, da dies das Fehlerprotokoll mit der Meldung 4200 Objekt existiert bereits überflutet. Erstellen Sie das Objekt stattdessen einmalig in der Funktion on init und verschieben Sie es dann später auf das gewünschte Datum.

um dieses Problem zu vermeiden:

ObjectDelete(0,"v_line");
ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.06.04 16:00',0);
 

Oder Sie können zusätzlich im Voraus prüfen, ob das Objekt bereits existiert, indem Sie:

ObjectFind(...
 

Marco, Paul

Vielen Dank für die Antwort und die Hilfe.

Das Problem, vor dem ich im Moment stehe, ist die Konvertierung der Informationen (Datum), die ich aus der Datei abrufe und zum Zeichnen der Linien verwende

Im Code wird die Datei als # Lines in der MT4-Datei-Sektion gespeichert und das gespeicherte Datum ist zum Beispiel 2019.05.18 05:30:00, im ersten Schritt entferne ich die

ersten Schritt entferne ich die letzten 3 Ziffern des Datums und konvertiere es in 2019.05.18 05:30 .. jetzt ist der nächste Schritt, was ich nicht erreichen, um die Zeit in der D'-Format zu machen

Ich habe folgendes versucht

 ObjectCreate(0,"v_line",OBJ_VLINE,0,"D'"+2019.05.18 05:30+"'",0);

aber das hat nicht funktioniert, also konvertiere ich die Zeichenkette in Zeit

ObjectCreate(0,"v_line",OBJ_VLINE,0,StringToTime("D'"+2019.05.18 05:30+"'"),0);

In beiden Fällen wird die Zeile um 1970.01.01 00:00 erstellt. Das Problem ist also, das Datum aus der Datei in etwas Sinnvolles umzuwandeln, das MT4 verwenden kann, um die v-Linie zu erstellen.

Ich hänge den Code an, vielleicht können Sie meinen Fehler erkennen. Im Code habe ich zwei Zeilen erstellt, aber keine der Zeilen wird an dem Datum erstellt, das ich aus der Datei abrufe

Dateien:
TestDates.mq4  9 kb
 

Sie machen das falsch, wenn Sie das Datum zwischen Anführungszeichen schreiben

wie es ist:

D'2019.05.18 05:30'


ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.05.18 05:30',0);
 
StringToTime("2019.05.18 05:30") == D'2019.05.18 05:30'

Beides sind Datumsangaben. Genauso wie

StringToDouble("1.234") == 1.234
sind beides Doppelgänger.
 
paul selvan:

Sie machen das falsch, wenn Sie das Datum zwischen Anführungszeichen schreiben

wie es ist:

D'2019.05.18 05:30'


Ich tue dies, weil ich den Text in ein Datumsformat konvertiere, wieWilliam Roeder oben gezeigt hat. Ich bin mir nicht sicher, wo mein Fehler liegt, da ich das Datum korrekt speichere und es in das D'-Format konvertiere, aber immer noch nicht in der Lage bin, die Zeile zu erstellen, obwohl, wenn ich das Datum aus der Datei kopiere und manuell eine Zeile erstelle, es in das richtige Datum übergeht

 
Ich denke, Sie haben mehr Glück beim Speichern und Lesen der Zeit als lange Integer-Werte wie Sekunden seit der Epoche anstelle dieser String-to-Datetime-Konvertierungen.
 
Marco vd Heijden:
Ich denke, Sie werden mehr Glück haben, wenn Sie die Zeit als lange ganzzahlige Werte wie Sekunden seit der Epoche speichern und lesen, anstatt diese Konvertierungen von Strings in Datumsangaben vorzunehmen.

Das Datum wird einschließlich der Sekunden gespeichert, zum Beispiel ist dies die Zeit, die aus der Datei 2019.05.19 15:00:00

Während meiner Tests habe ich jedoch herausgefunden, dass, wenn ich das Datum mit Sekunden verwende, die Zeile in1970.01.01 erstellt wird. Das ist der Grund, warum ich die Sekunden entferne, aber immer noch nicht in der Lage bin, die Datei an der richtigen Stelle des Datums zu erstellen.

 

In diesem Fall können Sie sich auch die Zeitstruktur ansehen:

struct MqlDateTime 
  { 
   int year;           // Year 
   int mon;            // Month 
   int day;            // Day 
   int hour;           // Hour 
   int min;            // Minutes 
   int sec;            // Seconds 
   int day_of_week;    // Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) 
   int day_of_year;    // Day number of the year (January 1st is assigned the number value of zero) 
  };

Sie können die

TimeToStruct()

Funktion wie folgt:

datetime TimeExit_SymSymbol = (datetime) ObjectGetInteger(0, Exit_SymSymbol, OBJPROP_TIME1);

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Daraus können Sie dann alle gewünschten Werte extrahieren.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Dies sind Integer-Werte, also keine Strings, mit denen man herumspielen muss.
Grund der Beschwerde: