0

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

起初我是这样尝试的。

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

但是,即使我2005/01/01 - 2005/01/29通过策略测试器 UI Dropbox 设置,它也有问题。

dtFrom 将是2005/01/09,dtTo 将2005/01/28在脚本中。

因为01-08是节假日,29是周六,所以没有数据计算。

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

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

4

1 回答 1

1

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

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

MetaTrader 终端的“时间流”具有其他机制(在 StrategyTester 中,如果 [x] 优化开启,则更复杂)。该平台只是模拟时间,唯一的“内部可见”日期时间是 emulated QUOTE-stream 携带的日期时间。

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

这个“内部” datetime-self-sniffer 效果很好:

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
              ")"
               );
}
于 2018-04-05T12:01:23.270 回答