MQL4 中的日期时间算法

A datetime arithmetic in MQL4

我想定义一个 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 小时,则 duration > TmClose 为真。如果你想将秒(持续时间)的差异转换为时间,那么你将从 1970.01.01 00:00 + 持续时间秒数转换为时间。

不管怎样,你做这个计算的目的是什么?如果您想确保持有该特定头寸超过 x 小时,那么简单 bool holdMoreThanXHours = TimeCurrent()-OrderOpenTime()>x*PeriodSeconds(PERIOD_H1),如果您有几张未平仓单,请不要忘记重新选择每张票

事实 A) 代码,按原样,绝对没有任何问题。

//+------------------------------------------------------------------+
//|                                           Test_Whosebug.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 上下文缺失。

Whosebug 要求用户 post 问题的完整 MCVE 表示。原来post.

没有满足这个要求

虽然 datetimeint 数据类型可以互换,但问题似乎并不存在隐藏在值表示的这个固有 "duality" 中,但必须在其他地方。

为什么?的主要嫌疑人是:

  • 变量定义被另一个同名的变量屏蔽
  • 变量定义范围超出(询问范围外的变量)
  • db.Pool-操作 不是 前面有 OrderSelect()