我想定义一个
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
相反,效果很好。
有谁知道为什么吗?
datetime
是一个简单整数,表示自 1970.01.01 00:00
以来经过的秒数。您示例中的 duration
也是以秒为单位,即使它是 datetime
格式的,当您需要以分钟为单位时,除以 60。示例中的 TmClose
表示 16*60*60 seconds
并且您可以将该整数与任何其他整数进行比较int
当然可以,但这可能是什么原因呢?
如果您持有仓位超过 16 小时,则持续时间 > TmClose 为真。如果您想将以秒(持续时间)为单位的差异转换为时间,那么您将获得从 1970.01.01 00:00 + 持续时间秒转换而来的时间。
无论如何,不清楚您进行此计算的目标是什么?如果您想确保持有该特定位置超过 x 小时,那么简单
bool holdMoreThanXHours = TimeCurrent()-OrderOpenTime()>x*PeriodSeconds(PERIOD_H1)
,并且如果您有几张未平仓的票,请不要忘记重新选择每张票
代码按原样绝对毫无疑问可以工作。
//+------------------------------------------------------------------+
//| 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
虽然
datetime
和 int
数据类型可以相互互换,但问题似乎并没有隐藏在值表示的这种内在“二元性”中,而必须在其他地方。
为什么?的主要嫌疑人是:
OrderSelect()
不是