MQL4 中的日期时间算术

问题描述 投票:0回答:2

我想定义一个

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 duration mql4
2个回答
2
投票

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)
,并且如果您有几张未平仓的票,请不要忘记重新选择每张票


1
投票

代码按原样绝对毫无疑问可以工作。

//+------------------------------------------------------------------+
//|                                           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
数据类型可以相互互换,但问题似乎并没有隐藏在值表示的这种内在“二元性”中,而必须在其他地方。

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

  • 变量定义被另一个同名变量屏蔽了
  • 变量定义范围
  • 超出(要求变量超出其范围)
  • db.Pool 操作之前
  • OrderSelect()
    不是
© www.soinside.com 2019 - 2024. All rights reserved.