【问题标题】:A datetime arithmetic in MQL4MQL4 中的日期时间算法
【发布时间】:2018-03-08 05:50:17
【问题描述】:

我想定义一个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


    【解决方案1】:

    datetime 是一个简单的整数,表示自1970.01.01 00:00 以来经过的秒数。 duration 在您的示例中也以秒为单位,即使它是 datetime 格式,当您需要它以分钟为单位时,除以 60。您示例中的 TmClose 表示 16*60*60 seconds,您可以将该整数与任何其他整数进行比较int 当然可以,但这可能是什么原因? 如果您持仓超过 16 小时,则持续时间 > TmClose 为真。如果您想将秒(持续时间)的差异转换为时间,那么您将从 1970.01.01 00:00 + duration 秒转换时间。

    无论如何,不​​清楚您进行此计算的目标是什么?如果您想确保您持有该特定职位超过 x 小时,那么简单的bool holdMoreThanXHours = TimeCurrent()-OrderOpenTime()>x*PeriodSeconds(PERIOD_H1),并且如果您有多个未处理的票,请不要忘记重新选择每张票

    【讨论】:

    • ExitBuy_H1= (duration > TmClose) 代表“当持仓超过 TmClose 时,平仓”。如果我写ExitBuy_H1= ((TimeCurrent() - OrderOpenTime()) > TmClose 有效,如果我写ExitBuy_H1= duration > TmClose 则无效
    • 也许你之前没有给duration赋值,它必须有效,它们都是MQL4中的整数
    • 我刚刚写了datetime duration = (TimeCurrent() - OrderOpenTime()); datetime TmStop = StringToTime ("1970.01.01 16:00"); ExitBuy_H1= (duration> TmStop);,但它不起作用...不明白为什么...
    • 真的不知道你的目标是什么。 TmClose 应该以秒为单位,将其转换为 datetime 看起来很奇怪。确保您的 orderOpenTime() 返回值而不是错误
    • 我只想调用一个日期时间变量 datetime duration = (TimeCurrent() - OrderOpenTime()); 让我平仓超过 n 小时。如果在角落信息中,我写了text[3]= "Duration: " + TimeToStr(duration, TIME_MINUTES);,它也不起作用,它适用于除持续时间(如上定义)...无法解释为什么...
    【解决方案2】:

    事实 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 表示。原帖没有满足这个要求。

    虽然 datetimeint 数据类型可以相互互换,但问题似乎并未隐藏在值的这种内在“二元性”中表示,但必须在其他地方。

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

    • 变量定义被另一个同名变量屏蔽
    • 变量定义范围超出(要求变量超出其范围)
    • db.Pool-operations 不是前面有 OrderSelect()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多