【问题标题】:How to get the optimization period from the script如何从脚本中获取优化周期
【发布时间】:2018-04-09 18:06:13
【问题描述】:

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

一开始我是这样尝试的。

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 是短缺发生的日期。

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

【问题讨论】:

    标签: mql4 metatrader4 mt4


    【解决方案1】:

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

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

    MetaTrader 终端的“时间流”具有其他机制(在 StrategyTester 中,如果 [x] 优化开启,则更复杂)。该平台只是模拟时间,唯一的“内部可见”日期时间是模拟的 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
                  ")"
                   );
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多