OBJ_VLINE - página 2

 
Também não é necessário recriar o objeto em cada tick, isto inundará o log de erros com um objeto 4200 já existente, então, em vez disso, crie o objeto na função on-init uma vez e depois você pode movê-lo para a data desejada mais tarde.
 
Marco vd Heijden:
Também não é necessário recriar o objeto em cada tick, isto inundará o log de erros com um objeto 4200 já existente, então, em vez disso, crie o objeto na função on-init uma vez e depois você pode movê-lo para a data desejada mais tarde.

para evitar esse problema :

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

Ou ainda, você pode verificar antecipadamente se o objeto já existe por:

ObjectFind(...
 

Marco, Paul

Muito obrigado pela resposta e pela ajuda

Entretanto, a questão que estou enfrentando agora é converter as informações (data) que recupero do arquivo e as utilizo para traçar as linhas

No código o arquivo é salvo como # Linhas na seção de arquivos MT4 e a data salva é por exemplo 2019.05.18 05:30:00 , primeiro passo eu removo o

últimos 3 dígitos da data e convertê-lo para 2019.05.18 05:30 ... agora o próximo passo é o que eu não estou conseguindo alcançar para fazer o tempo no formato D'

Tentei o seguinte

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

mas isso não funcionou, então converto o fio para o tempo

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

Em ambos os casos a linha é criada em 1970.01.01.01 00:00 para que a questão seja converter a data do arquivo em algo significativo que o MT4 possa usar para criar a linha v

Estou anexando o código , talvez você possa detectar meu erro ... no código que criei duas linhas mas nenhuma das linhas é criada na data que eu recuperar do arquivo

Arquivos anexados:
TestDates.mq4  9 kb
 

você está fazendo isso errado ao escrever a data entre aspas

como é :

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 são datas e horários. Assim como

StringToDouble("1.234") == 1.234
são ambas duplas.
 
paul selvan:

você está fazendo isso errado ao escrever a data entre aspas

como é :

D'2019.05.18 05:30'


Estou fazendo isso porque estou convertendo o texto em um formato de data/hora comoWilliam Roeder ilustrou acima ... Não tenho certeza onde está meu erro, pois salvo a data corretamente e a converto para o formato D' mas ainda não consigo criar a linha , embora se eu copiei a data do arquivo e criei manualmente uma linha ela vai para a data correta

 
Acho que você terá mais sorte economizando e lendo o tempo como valores inteiros longos como segundos desde a época, em vez dessas conversões de cordas até a data.
 
Marco vd Heijden:
Acho que você terá mais sorte economizando e lendo o tempo como valores inteiros longos como segundos desde a época, em vez dessas conversões de cordas até a data.

A data é salva incluindo segundos, por exemplo, esta é a hora tirada do arquivo 2019.05.19 15:00:00

Entretanto, durante meus testes, descobri que se eu utilizasse a data com segundos, ela criaria a linha em1970.01.01, esta é a razão pela qual eu removo os segundos, mas ainda não consegui criar o arquivo no local correto da data.

 

Nesse caso, acho que você também pode olhar para a estrutura 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) 
  };

Você pode usar

TimeToStruct()

Função como segue:

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

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Então você pode extrair todos os valores desejados a partir disto.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Estes são valores inteiros, portanto, não há compromissos com os quais se possa mexer.