OBJ_VLINE - 页 2

 
另外,你不必在每次打勾 时都重新创建对象,这将使错误日志中充斥着4200对象已存在的信息,因此,作为替代,在初始函数中创建一次对象,然后你可以在以后将其移到所需的日期。
 
Marco vd Heijden:
另外,你不必在每次打勾 时都重新创建对象,这将使错误日志中充斥着4200对象已经存在,因此,作为替代,在初始函数中创建一次对象,然后你可以在以后将它移到所需的日期。

来避免这个问题。

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

或者另外你可以在前面检查一下,看看这个对象是否已经存在。

ObjectFind(...
 

马可, 保罗

非常感谢你的回答和帮助

然而,我现在面临的问题是如何转换我从文件中获取的信息(日期),并使用它来画线。

在代码中,文件在MT4文件部分被保存为#线,保存的日期为2019.05.18 05:30:00,第一步,我把日期的最后3位去掉

现在,下一步是我无法实现的,以使时间变成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'


我这样做是因为我正在将文本转换为上面William Roeder 说明的日期格式。 我不确定我的错误在哪里,因为我正确地保存了日期并将其转换为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;
这些是整数值,所以没有字符串可供处理。