OBJ_VLINE - страница 2

 
Также не нужно создавать объект заново при каждом тике, это приведет к появлению в журнале ошибок сообщения 4200 Object already exists, поэтому вместо этого создайте объект в функции on init один раз, а затем вы можете переместить его на нужную дату позже.
 
Marco vd Heijden:
Также не нужно создавать объект заново при каждом тике, это приведет к появлению в журнале ошибок сообщения 4200 Object already exists, поэтому вместо этого создайте объект в функции on init один раз, а затем вы можете переместить его на нужную дату позже.

чтобы избежать этой проблемы:

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

Или дополнительно можно предварительно проверить, существует ли уже объект:

ObjectFind(...
 

Марко, Пол

Большое спасибо за ответ и помощь.

Однако, проблема, с которой я столкнулся сейчас, заключается в том, чтобы преобразовать информацию (дату), которую я получаю из файла и использовать ее для рисования линий.

В коде файл сохраняется как # Lines в разделе файлов MT4, а дата сохраняется, например, 2019.05.18 05:30:00, первым шагом я удаляю последние 3 цифры из даты и рисую линии.

последние 3 цифры из даты и конвертирую ее в 2019.05.18 05:30 ... теперь следующий шаг - то, чего я не могу достичь, чтобы сделать время в формате D'.

Я попробовал следующее

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

но это не сработало, поэтому я преобразовал строку во время.

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

В обоих случаях линия создается в 1970.01.01 00:00, так что проблема в том, чтобы преобразовать дату из файла во что-то значимое, что MT4 может использовать для создания v-линии.

Я прилагаю код, возможно вы сможете заметить мою ошибку. В коде я создал две линии, но ни одна из них не создается в дату, которую я получаю из файла.

Файлы:
TestDates.mq4  9 kb
 

вы делаете это неправильно, записывая дату между кавычками

как есть:

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'

И то, и другое - это время даты. Так же, как

StringToDouble("1.234") == 1.234
оба являются двойниками.
 
paul selvan:

вы делаете это неправильно, записывая дату между кавычками

как есть:

D'2019.05.18 05:30'


Я делаю это, потому что я преобразовываю текст в формат времени, какУильям Редер проиллюстрировал выше. Я не уверен, где моя ошибка, поскольку я сохраняю дату правильно и преобразовываю ее в формат D', но все еще не могу создать строку, хотя если я скопировал дату из файла и вручную создал строку, она переходит в правильную дату.

 
Я думаю, что вам больше повезет с сохранением и чтением времени в виде длинных целых значений, таких как секунды с эпохи, вместо этих преобразований строки в дату.
 
Marco vd Heijden:
Я думаю, что вам больше повезет с сохранением и чтением времени как длинных целочисленных значений, таких как секунды с эпохи, вместо этих преобразований строки в дату.

Дата сохраняется с учетом секунд, например, это время, извлеченное из файла 2019.05.19 15:00:00.

Однако во время тестирования я обнаружил, что если я использую дату с секундами, то создается строка1970.01.01, поэтому я удаляю секунды, но все равно не могу создать файл с правильным расположением даты.

 

В этом случае, я думаю, вы также можете посмотреть на структуру времени:

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

Вы можете использовать

TimeToStruct()

функцию следующим образом:

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

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Затем вы можете извлечь из нее все желаемые значения.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Это целочисленные значения, поэтому нет необходимости возиться со строками.
Причина обращения: