OBJ_VLINE - pagina 2

 
Inoltre non dovete ricreare l'oggetto ad ogni spunta, questo inonderà il registro degli errori con un 4200 Object already exists, quindi al contrario create l'oggetto nella funzione on init una volta e poi potete spostarlo alla data desiderata in seguito.
 
Marco vd Heijden:
Inoltre non dovete ricreare l'oggetto ad ogni spunta, questo inonderà il registro degli errori con un 4200 Object already exists, quindi al contrario create l'oggetto nella funzione on init una volta sola e poi potete spostarlo alla data desiderata in seguito.

per evitare questo problema:

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

Oppure, in aggiunta, potete controllare in anticipo se l'oggetto esiste già:

ObjectFind(...
 

Marco, Paul

Grazie mille per la risposta e l'aiuto

Tuttavia, il problema che sto affrontando in questo momento è quello di convertire le informazioni (data) che recupero dal file e utilizzarle per disegnare le linee

Nel codice il file viene salvato come # Lines nella sezione file di MT4 e la data salvata è per esempio 2019.05.18 05:30:00 , primo passo rimuovo le

ultime 3 cifre dalla data e la converto in 2019.05.18 05:30 .. ora il prossimo passo è quello che non riesco ad ottenere per rendere l'ora nel formato D'

Ho provato questo

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

ma non ha funzionato, quindi converto la stringa in tempo

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

In entrambi i casi la linea viene creata a 1970.01.01 00:00 quindi il problema è quello di convertire la data dal file in qualcosa di significativo MT4 può utilizzare per creare la v-line

Allego il codice, forse potete individuare il mio errore... nel codice ho creato due linee ma nessuna delle linee viene creata alla data che recupero dal file

File:
TestDates.mq4  9 kb
 

lo stai facendo male scrivendo la data tra virgolette

come è :

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'

Entrambi sono datetime. Proprio come

StringToDouble("1.234") == 1.234
sono entrambi doppi.
 
paul selvan:

lo stai facendo male scrivendo la data tra virgolette

come è :

D'2019.05.18 05:30'


Lo sto facendo perché sto convertendo il testo in un formato datetime comeWilliam Roeder ha illustrato sopra... Non sono sicuro di dove sia il mio errore dato che salvo la data correttamente e la converto nel formato D' ma ancora non riesco a creare la riga, anche se se ho copiato la data dal file e creato manualmente una riga va nella data corretta

 
Penso che avrete più fortuna nel salvare e leggere il tempo come valori interi lunghi come i secondi dall'epoca invece di queste conversioni da stringa a data.
 
Marco vd Heijden:
Penso che avrai più fortuna nel salvare e leggere il tempo come valori interi lunghi come i secondi dall'epoca invece di queste conversioni da stringa a data.

La data viene salvata includendo i secondi, per esempio questa è l'ora estratta dal file 2019.05.19 15:00:00

Tuttavia, durante i miei test, ho scoperto che se ho usato la data con i secondi creerà la linea in1970.01.01, questo è il motivo per cui rimuovo i secondi, ma ancora in grado di creare il file nella posizione corretta della data

 

In questo caso penso che si possa anche guardare la struttura temporale:

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) 
  };

Puoi usare

TimeToStruct()

Funzione come segue:

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

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Poi puoi estrarre tutti i valori desiderati da questo.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Questi sono valori interi, quindi non ci sono stringhe con cui pasticciare.
Motivazione: