OBJ_VLINE - página 2

 
Además, no tiene que volver a crear el objeto en cada momento, ya que esto inundará el registro de errores con el mensaje 4200 "Object already exists" (El objeto ya existe), así que cree el objeto en la función on init una vez y luego podrá moverlo a la fecha deseada más adelante.
 
Marco vd Heijden:
Además, no tiene que volver a crear el objeto en cada momento, esto inundará el registro de errores con un 4200 El objeto ya existe, así que en su lugar cree el objeto en la función de inicio una vez y luego puede moverlo a la fecha deseada más tarde.

para evitar ese problema:

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

O adicionalmente puede comprobar por adelantado si el objeto ya existe por:

ObjectFind(...
 

Marco, Paul

Muchas gracias por la respuesta y la ayuda

Sin embargo , el problema que tengo ahora mismo es convertir la información (fecha) que recupero del archivo y utilizarla para dibujar las líneas

En el código, el archivo se guarda como # Lines en la sección de archivos de MT4 y la fecha guardada es, por ejemplo, 2019.05.18 05:30:00, el primer paso es eliminar los

últimos 3 dígitos de la fecha y la convierto a 2019.05.18 05:30 .. ahora el siguiente paso es lo que estoy fallando para lograr que la hora esté en el formato D'

He intentado lo siguiente

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

pero no funcionó , así que convierto la cadena a hora

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

En ambos casos la línea se crea en 1970.01.01 00:00 así que el problema es convertir la fecha del archivo en algo significativo que MT4 pueda usar para crear la línea v

Adjunto el código, tal vez pueda detectar mi error... en el código he creado dos líneas, pero ninguna de las líneas se crea en la fecha que recupero del archivo

Archivos adjuntos:
TestDates.mq4  9 kb
 

lo estás haciendo mal al escribir la fecha entre comillas

como es :

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'

Ambas son fechas. Así como

StringToDouble("1.234") == 1.234
son ambos dobles.
 
paul selvan:

lo estás haciendo mal al escribir la fecha entre comillas

como es :

D'2019.05.18 05:30'


Lo hago porque estoy convirtiendo el texto en un formato de fecha comoWilliam Roeder ilustró anteriormente .. No estoy seguro de dónde está mi error ya que guardo la fecha correctamente y la convierto en formato D' pero todavía no puedo crear la línea , aunque si copié la fecha del archivo y creé manualmente una línea va en la fecha correcta

 
Creo que tendrás más suerte guardando y leyendo el tiempo como valores enteros largos como los segundos desde la época en lugar de estas conversiones de cadena a fecha.
 
Marco vd Heijden:
Creo que tendrás más suerte guardando y leyendo el tiempo como valores enteros largos como los segundos desde la época en lugar de estas conversiones de cadena a fecha.

La fecha se guarda incluyendo los segundos, por ejemplo esta es la hora extraída del archivo 2019.05.19 15:00:00

Sin embargo, durante mis pruebas, me di cuenta de que si utilizo la fecha con los segundos se creará la línea en 1970.01.01, esa es la razón por la que quito los segundos, pero todavía no puede crear el archivo en la ubicación correcta de la fecha

 

En ese caso, creo que también puedes mirar la estructura temporal:

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

Puede utilizar

TimeToStruct()

Función como la siguiente:

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

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Entonces usted puede extraer todos los valores deseados de esto.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Se trata de valores enteros, por lo que no hay que complicarse con las cadenas.