我想定义一个datetime
类型变量,它是datetime
类型变量之间简单算术操作的结果。
我已经定义了:
datetime duration = ( TimeCurrent() - OrderOpenTime() );
datetime TmStop = StringToTime( "1970.01.01 16:00" );
但是,当我在其他算术操作中调用它时,或者在代码中,通常是这样的
ExitBuy_H1 = ( duration > TmClose && ...
或者这个
text[3]= "Duration: " + TimeToStr( duration, TIME_MINUTES );
它不起作用。
相反,TmStop
工作得很好。
有人知道为什么吗?
发布于 2017-09-26 21:30:48
datetime
是一个简单的整数,自1970.01.01 00:00
以来传递的秒数。您的示例中的duration
也是以秒为单位的,即使它是datetime
格式的,当您需要它时,以分钟为单位,除以60。示例中的TmClose
表示16*60*60 seconds
,您当然可以将该整数与任何其他int
进行比较,但原因可能是什么呢?如果你保持你的位置超过16小时,那么持续时间> TmClose是真的。如果要将差秒(持续时间)转换为时间,则从1970.01.01 00:00 :00+持续时间秒开始转换时间。
不管怎样,我们还不清楚你做这个计算的目的是什么?如果你想确保你的位置超过x小时,那么简单的bool holdMoreThanXHours = TimeCurrent()-OrderOpenTime()>x*PeriodSeconds(PERIOD_H1)
,如果你有几张开着的票,不要忘记重新选择每一张票。
发布于 2017-09-30 10:51:36
事实A)这段代码是完全没有问题的。
//+------------------------------------------------------------------+
//| Test_StackOverflow.mq4 |
//+------------------------------------------------------------------+
#property strict
void OnStart() {
datetime duration = ( TimeCurrent() - OrderOpenTime() );
string txt = "Duration: " + TimeToStr( duration, TIME_MINUTES );
}
//+------------------------------------------------------------------+
0 error(s), 0 warning(s), compile time: 2000 msec 1 1
事实B)代码的完整MCVE
-context (原样)丢失了。
StackOverflow要求用户发布完整的MCVE表示问题。这一要求在原员额中没有得到满足。
虽然datetime
和int
数据类型是可互换的,但问题似乎并不隐藏在价值表示的这种内在的“二元性”中,而必须隐藏在其他地方。
为什么?的主要嫌疑人是:
OrderSelect()
之前的而不是https://stackoverflow.com/questions/46436041
复制相似问题