程序库: 多功能测试仪 - 页 17

 

我看了一下自己的文件,确实有些符号没有出现带有勾选历史记录的文件,翻看了一下日志,果然有:

2020.02.12 16:02:30.144 Core 1  NZDUSD : real ticks begin from 2017.01.02 00:00:00

现在我明白了,剩下的就是模拟了。


顺便说一句,MultiTester 不会在最小化的终端上切换符号,最好在开始新程序之前添加一个打开窗口的功能。我已经在 fInit 中添加了这个功能。

bool ActivateTerminalWindow(){
   HANDLE ChartWindow = (HANDLE)ChartGetInteger(0, CHART_WINDOW_HANDLE);
   if(ChartWindow){
      HANDLE TerminalWindow = GetParent(ChartWindow);
      TerminalWindow = GetParent(TerminalWindow);
      TerminalWindow = GetParent(TerminalWindow);
      if(TerminalWindow){
         ShowWindow(TerminalWindow, 3);
         return true;
      }
   }
   return false;
}
 
Evgenii Kuznetsov:

顺便说一句,MultiTester 不会在最小化的终端上切换符号,最好在开始新的测试之前先打开一个窗口。

我没检查过,也没遇到过。

 
fxsaber:

最后我是这么做的。从 ini 文件中生成一批任务并发送执行。

交易、自动交易系统和交易策略测试论坛

智能交易系统:验证

fxsaber, 2020.02.22 10:46 AM

当我需要执行大量不同的测试任务时,我会使用 Validate。


1.我在 Tester 中设置一个要运行的任务。

2.在 "设置 "选项卡中,我按下 CTRL+C。所有设置都会出现在剪贴板上。

3.使用 CTRL+V 将这些设置复制到一个 ini 文件中,然后将其放在任务文件夹中。

这样就创建了所需数量的任务 - ini 文件(屏幕上有四个任务)。


5.5. 在启动 Validate 时,我指定了任务所在文件夹的名称。


就这样,Validate 就会使用它的所有技巧来执行这些任务了。


我只在特定情况下使用 MultiTester-derivatives,因为我需要在运行任务时创建任务。

我建议使用 Validate 来批量运行任何现成的任务。

 

请分享一下如何正确使用 GA 的经验。我遇到过这样一种情况,即 GA 只能找到所需的一个局部极值。

对于特定的 TS/符号,我知道应该在哪里查找,因此我在不同的范围内进行 GA。但总的来说,我不知道该如何操作。

 
fxsaber:

请分享一下如何正确使用 GA 的经验。我遇到过这样一种情况,即 GA 只能找到一个所需的局部极值。

对于特定的 TS/符号,我知道应该在哪里查找,因此我在不同的范围内进行 GA。但总的来说,我不知道该如何操作。

我想这里有关于这个主题的内容 -https://www.mql5.com/ru/forum/87536。

或者致电作者(@Andrey Dik)。

Чемпионат Алгоритмов Оптимизации.
Чемпионат Алгоритмов Оптимизации.
  • 2016.06.09
  • www.mql5.com
Чемпионат алгоритмов оптимизации задуман как соревнование для людей ищущих, любознательных, для которых стоять на месте означает движение назад...
 
Andrey Khatimlianskii:

我想这里有关于这个主题的内容 -https://www.mql5.com/ru/forum/87536

或致电作者(@Andrey Dik)。

我是在使用 MT5-Tester 的情况下提问的。因此,自定义优化算法并不合适。

 
fxsaber:

请分享一下如何正确使用 GA 的经验。我遇到过这样一种情况,即 GA 只能找到一个所需的局部极值。

对于特定的 TS/符号,我知道应该在哪里查找,因此我在不同的范围内进行 GA。但总的来说,我不知道该如何操作。

现在,如果跌幅较大,我就停止测试

为了让 GA 开心一点,我这样做了:

#define  TESTER_STOP(ret) { EA_STOP = true; TesterStop(); return ret; }
double OnTester()
{
   srand((int)TimeCurrent());
// if(StartHour==20 && CountHours==22) return (-(rand() % 1000));// 如果 GA 在运行时间内开始向一个最大值收敛,我就会使用它

   if(EA_STOP) return (-(rand() % 1000));                                                               // 测试不成功,因大幅缩水而中断

   int o_count = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() < 2) o_count++;
   }
   if(o_count < 160) return (-(rand() % 1000));                                                         // 在六个月内至少达成 160 项交易

   return(AccountInfoDouble(ACCOUNT_BALANCE));
}


void OnTick()
{
   if(IS_OPTIMIZATION)
   {
      double balance = AccountInfoDouble(ACCOUNT_BALANCE);
      MaxBalance = fmax(MaxBalance, balance);
      if(MaxBalance - balance > 200) TESTER_STOP();                                                     // 在缩减 200 美元时停止测试
   }


这是我上周一直在测试的方法,现在我对 GA 感到非常满意。

 

我在我的优化器中重复 GA,直到 4 次都没有改进最后的结果。这可能需要十几次尝试。我通常都能得到很好的结果。尽管这需要很长时间。

在当前日期重新优化 时,我可以得到一个新的改进的局部最大值,如果没有,我就从旧的最大值开始,通过缓慢优化(我选择一组相互依存的变量,成对地迭代优化每个组合),针对新市场进行改进。

此外,我还在 OnTester 中引入了微量惩罚(额外诱变剂)。在这种情况下,由于突变更频繁,GA 会执行更多的传递,因此会更频繁地发现新的最大值。

// 当结果相同时,选择较小参数值的微量惩罚
res -= BP * 0.0001 / 200;       // 除以优化范围 (0...200)
 
Igor Makanu:

如果出现大幅缩水,我现在就停止测试。

为了让全球定位系统高兴一点,我正在这样做:

上周我一直在使用这种方法进行测试,现在我对 GA 非常满意。

我的方法大致相同。控制缩水是为了更快地优化,控制交易次数 是为了更好地引导 GA,过滤掉垃圾。

但这还不够。


ZY 它更便宜。

TesterStatistics(STAT_TRADES)
 
Edgar Akhmadeev:

在 OnTester 中引入微量惩罚(额外突变)。在这种情况下,由于突变更频繁,GA 会执行更多的遍历,因此会更频繁地发现新的最大值。

请澄清。