如何从脚本中获取优化周期

时间:2018-04-04 09:18:18

标签: mql4 metatrader4 mt4

我想获得优化期 (检查使用数据时)

起初我试过这样。

datetime dtFrom;
datetime dtTo;
void OnInit(){
  dtFrom = Time[0]; //from date
}
double OnTester(){
  dtTo = Time[0]; // to date
}

但是,即使我通过策略测试程序UI dropbox设置2005/01/01 - 2005/01/29,也会出现问题。

dtFrom将为2005/01/09,dtTo将为脚本中的2005/01/28

因为01-08是假期,29是星期六,所以没有数据计算。

如果预算不足,运行停止,dtTo是发生短缺的日期。

有没有简单的好方法来获取用户在策略测试器框中设置的日期?

1 个答案:

答案 0 :(得分:1)

  

有没有简单的好方法来获取用户在策略测试器框中设置的日期?

是的,但是没有从GUI表单字段中提取数据:

MetaTrader终端"流程时间"有其他机制(如果[x]优化打开,在StrategyTester中则更复杂)。该平台只是模拟时间和唯一的内部可见"日期时间是由模拟的 QUOTE -stream承载的日期。

虽然有一些复杂的技巧可以通过参数注入滑动窗口测试和类似用例的开始/结束限制,但OnTester(){...}永远不会"看到"进入GUI表单字段。

这"内部" datetime - 自我嗅探器效果很好:

datetime aGloballyAccessibleSessionFirstVisibleDATETIME,
         aGloballyAccessibleSessionLast_VisibleDATETIME;

int OnTick(){

static bool is1stQUOTE = True;
       if ( is1stQUOTE ){                                             // .TEST
            is1stQUOTE = False;                                       // .LOCK
            aGloballyAccessibleSessionFirstVisibleDATETIME = Time[0]; // .SET
       }
       /**/ aGloballyAccessibleSessionLast_VisibleDATETIME = Time[0]; // .UPD

       ...

}

double OnTester() {
       ...
       Print( "First QUOTE was on (",
               aGloballyAccessibleSessionFirstVisibleDATETIME,
              ")",
              "Last QUOTE was on (",
               aGloballyAccessibleSessionLast_VisibleDATETIME
              ")"
               );
}