MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 62

 
fxsaber:

1.アーカイブを 解凍して、空のTerminalフォルダーに入れます。


2.スクリプトfxsaberanthusCreateSymbol.ex5を 実行します。


数秒後、カスタムシンボルのチャートが表示されます。


2. テスター(CTRL+R)を開き、マークされた設定を選択します。



3.表示された「テスター」ウィンドウの「スタート」をクリックします。



4.最初のOptimizationの結果が表示されたら、Stopを押してください。


5.テスター設定でインターバルの開始日を2019.11.01に変更し、開始を押す。


6.Optimizationの結果におけるDeliriousの値(ソースから、50以上の差があってはいけないことがわかります)。


この手順を繰り返し行う。100%再現されました。誰がやってみるか、教えてください。

やってみます。

私が再現しようとしたティックで順番に試してみてください。MetaQuotes-デモサーバー

1.ターミナルダイアログからCHFJPYをベースにしたカスタムシンボルを作成(名前のみ変更)。

2. CHFJPYのティックを数年分、csvファイルにエクスポート。

3.これらのティックをCHFJPY.customにインポートする。

4.Expert Advisorで遺伝的最適化を実行。さまざまな組み合わせで

 
Slava:

私が再現しようとしたティックで順番に試してみてください。MetaQuotes-デモサーバー

再現しました。この範囲の入力で


結果は、互いに50以上の差があってはならない。


昇順にソートし、最高と最低の行を比較します。


SZZここから 手順3~6を繰り返す。 同じ日付で。

 

MQ-DemoでオリジナルのCHFJPYを試しました。再生しました!

  1. 時間間隔と開始GAを設定します。
  2. すべてのAgentから最初の数結果が来たら、Stopを押す。
  3. 結果が出なければ、ステップ1、時間枠の変更(開始日のみ)に進みます。
3回挑戦して、この結果です。

2020.02.21 08:38:14.104 Core 5  genetic pass (0, 252) returned result 965118462.000000 in 0:00:01.114
2020.02.21 08:38:14.114 Core 2  genetic pass (0, 111) returned result 686545176.000000 in 0:00:00.999
2020.02.21 08:38:14.114 Core 2  genetic pass (0, 112) returned result 686545168.000000 in 0:00:01.011
2020.02.21 08:38:14.332 Core 4  genetic pass (0, 76) returned result 1953417341.000000 in 0:00:01.342
2020.02.21 08:38:14.332 Core 8  genetic pass (0, 181) returned result 2212155593.000000 in 0:00:01.419
2020.02.21 08:38:14.395 Core 3  genetic pass (0, 146) returned result 1326263652.000000 in 0:00:01.154
2020.02.21 08:38:14.871 Core 1  genetic pass (0, 2) returned result 1143628048.000000 in 0:00:01.324
 
fxsaber:

MQ-DemoでオリジナルのCHFJPYを試しました。再生しました!

  1. 時間間隔と開始GAを設定します。
  2. すべてのAgentから最初の数結果が来たら、Stopを押す。
  3. 結果が出なければ、ステップ1、時間枠の変更(開始日のみ)に進みます。
3回挑戦して、この結果です。

同じことをする。再生されないのです。

テスター・エージェントのログを公開しよう

 
Slava:

同じことをする。再生されないんです。

テスターエージェントのログを出せ!

すべてのログを添付します。

ファイル:
TesterLogs.zip  56 kb
 
fxsaber:

すべてのログを添付します。

カスタムではなく、通常のFXのCHFJPYで問題を再現していただきました
 
Slava:
カスタムではなく、通常のFXのCHFJPYで問題を再現していただきました

はい、レギュラーで。そこでパスの刻みが気になったので、EAにラインを追加してみました。

// Критерий оптимизации - сумма входных параметров + сумма нецелых частей секунды каждого тика (в миллисекундах).

input int inFakeRange1 = 0;
input int inFakeRange2 = 0;
input int inFakeRange3 = 0;
input int inFakeRange4 = 0;
input int inFakeRange5 = 0;

long Sum = inFakeRange1 + inFakeRange2 + inFakeRange3 + inFakeRange4 + inFakeRange5;

MqlTick Ticks[1000];
int Count = 0;

void OnTick()
{
  MqlTick Tick;

  if (SymbolInfoTick(_Symbol, Tick))
  {
    Sum += Tick.time_msc % 1000;
    
    if (MQLInfoInteger(MQL_TESTER) && (Count < ArraySize(Ticks))) // Запоминаем тики
      Ticks[Count++] = Tick;
  }
}

double OnTester()
{
  FrameAdd(__FILE__, Count, Sum, Ticks); // Отправляем тики через фрейм
  
  return((double)Sum);
}

void OnTesterPass( void )
{
  ulong Pass;
  string Name;
  long id;
  double Value;  

  MqlTick Ticks2[];
  
  while (FrameNext(Pass, Name, id, Value, Ticks2)) // Принимаем фрейм-тики
  {
    FileSave(__FILE__ + "\\" + (string)Pass + ".bin", Ticks2); // Сохраняем на диск
    
    Print((string)Pass + " - " + (string)Value);
  }
}


そして、2つのファイルを取り出して、スクリプトを使って比較しました。

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

void OnStart()
{
  MqlTick Ticks1[];
  MqlTick Ticks2[];
  
  const int Size = (int)MathMin(FileLoad("88021.bin", Ticks1), FileLoad("11921.bin", Ticks2)); // Считали тики из файлов.
  
  int Count = 0;
  
  for (int i = 0; (i < Size) && (Count < 10); i++)
    if (_R(Ticks1[i]) != Ticks2[i]) // Если тики отличаются, выводим их значения.
    {
      Print(i);
      
      ArrayPrint(Ticks1, _Digits, NULL, i, 1);
      ArrayPrint(Ticks2, _Digits, NULL, i, 1);
      
      Print("------------");
      
      Count++;
    }
}


結果

0
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
1
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
2
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
3
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
4
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
5
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
6
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
7
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
8
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
9
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000


最適化は2019.06.01から行われました。結果では、最初の刻みが違う日付のものであることがはっきりと分かります。そして、これらの日付は互いに異なっている。


ZS 余分なチェックをした。デリリアムパスごとに記録されたティックは変化せず、最初のティックが最後のティックと同じになります。一般に、GAパスは何か奇妙な刻みの連続をたどります。

 
fxsaber:

一般に、GAのパスは、いくつかの奇妙な刻み目をたどります。

フルブルートフォースモードで再現。この問題は、すべてのOptimize モードに影響します。

 
fxsaber:

はい、レギュラーで。そこでパスの刻みが気になったので、EAにラインを追加してみました。


そして、2つのファイルを取り出して、スクリプトを使って比較しました。


結果


最適化は2019.06.01から行われました。結果では、最初の刻みが違う日付のものであることがはっきりと分かります。そして、これらの日付は互いに異なっている。

停止」ボタンから先の最適化を完了させた場合のみ、効果が現れるのでしょうか?それとも通常の解約でも?
 
Slava:
停止」ボタンから早めに前回の最適化を完了させた場合のみ、効果が発生するのでしょうか?それとも通常の解約でも?

停止を押す前に、ログと最適化テーブルで、誤ったパスがすでにカウントされていることを確認します。そして、これ以上続けても意味がないので、停止を押しています。

質問を誤解している。

はい、原則として前回のOptimizationで少なくとも1回はStopを押す必要があります。しかし、誤ったOptimizationを打つと、それ以降のものもすべて誤ってしまう(もう時間間隔は変えていない)。


もしかしたら、誰かがリプレイに繋いでくれるかもしれません。あなたのためにそれが動作しないのは奇妙ですが、クリーンな端末で私のために迅速に再生します。


ZS Agents側でログを最大化したクローズドβのようなものがあればいいと思うんです。そうすると、私のマシンのログが問題を局所化したのかもしれません。