ライブラリ: マルチテスター - ページ 41

 
10秒間スリープしても 解決しない。そのフォルダをクリアするだけで、問題は解決する。
 
klycko スリープしても 解決しない。そのフォルダをクリアすることだけが問題を解決する。

MQL5Expertsの 最適化コードを投稿して。それから再現してみて。今は建設的な仕事はほとんどない。

 
fxsaber #:

MQLを 最適化するコードをアップロードしてください。それから再現してみて。今は建設的な作業はほとんどない。

ありがとう!ファイルを用意して投稿してみるよ。今はまだすべてが未整理の状態です。

 
fxsaber #:

MQLを 最適化するコードをアップロードしてください。それから再現してみて。今は建設的な作業はほとんどない。

こんにちは!

ファイルを用意して添付しました。

時間枠M1で25.03から20.05.2024までの最適化。

証拠金17000。レバレッジ40。複雑な基準の最大値。


まず、実験の純度のために、"C:˶UsersASUS˶AppDataRoaming˶MetaQuotes˶Terminal˶D0E8209F77C8CF37AD8BF550E51FF075Tester˶cache "フォルダを掃除する必要がある。

Nocturneスクリプトを最適化するために、一度に1つのパラメータを実行する必要がある。

そして出力する:

最初のパラメータは、ProfitNow -1478 ParamMax 0.37。

第 2 パラメータ: ProfitNow -379 ParamMax 30(初回)。

第 3 パラメータ:ProfitNow -379 ParamMax 6(初回)。


第 3 パラメーター:ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ:ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ: ProfitNow -379 ParamMax 6 を繰り返し実行。


これは、3つ目のパラメータでデータキャッシュがハングアップしていることを示しています。


そして今、"C:JusersasusePachDataRoamingPachMetaQuotesPacheTerminalPacheD0E8209F77C8CF37AD8BF550E51FF075TesterCache "フォルダをもう一度クリアする必要がある。

の繰り返しだ:


最初のパラメータは、ProfitNow -1478 ParamMax 0.37。

2番目のパラメータは、ProfitNow -379 ParamMax 30。

第 3 パラメータ: ProfitNow -379 ParamMax 6 を初めて設定。


第 3 パラメーター:ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ:ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ: ProfitNow -379 ParamMax 6 を繰り返し実行。


ノクターン・スクリプトの151~154行目は、すべてご指示のとおりです:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // optファイルをバイト配列に取得 Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // バイト配列BytesをCacheにフィードする。


バグはもちろん私が書いたコードにあるのだが、それを修正する方法はまだわからない。

ただ、Runを実行する前に、手動で「C:◆bytes」フォルダからoptファイルを全て削除すると、「C:◆Users」フォルダからoptファイルが削除されることを実験的に発見した。

を実行する前に、「C:◆UsersASUSAppData◆Roaming◆MetaQuotes◆Terminal◆D0E8209F77C8CF37AD8BF550E51FF075Tester◆cache◆」フォルダから、optファイルを全て手動で削除する、

を選択すると、私のコードは正しく動作し、選択されたパラメータで最適化が実行されます。


このフォルダがクリーンアップされていない場合、Testerは(同じ未変更のデータで)繰り返し最適化を実行せず、このフォルダから既に存在するoptファイルを読み出します。

を読み出します。これは、手動で同じ最適化を繰り返し実行したときにはっきりとわかります。

実際の最適化が実行されるのは最初の1回だけで、その後はフォルダからoptファイルを読み出すだけであることがわかる。

この読み取りの繰り返しではキャッシュの内容が更新されないようで、これが私のコードでエラーを引き起こしている。


このフォルダをクリアすれば、エラーが解決するかもしれない。もちろん、これは悪い解決策で、キャッシュ内の正しいデータを復元できるほうがエレガントだろう。

しかし、その方法がわからない。今のところ、前回の実際の最適化のデータがキャッシュにぶら下がっている(フォルダからの再読み込みと一致しない)。

残念ながら、このフォルダはFolderCleanを使ってスクリプトからクリーニングすることができません。

このフォルダは「サンドボックス」の外にあり、Strategy Testerによってのみ埋められます。


C++で外部アドオンを作成し、スクリプトから実行する必要があるかもしれません。


ありがとう、アレクサンダー

ファイル:
 

本文の誤り



こんにちは!

ファイルを準備し、添付しました。

時間枠M1で25.03から20.05.2024まで最適化。

デポジット17000。レバレッジ40。複雑な基準の最大値。


まず、実験の純度のために、"C:UsersASUS\AppData Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075Tester "フォルダを掃除する必要がある。

Nocturneスクリプトを最適化するために、一度に1つのパラメータを実行する必要がある。

そして出力する:

最初のパラメータは、ProfitNow -1478 ParamMax 0.37。

第 2 パラメータ: ProfitNow -379 ParamMax 30(初回)。

第 3 パラメータ:ProfitNow -379 ParamMax 6(初回)。


最初の パラメータ:ProfitNow -379 ParamMax 6 を繰り返す。

第 2 パラメータ: ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ: ProfitNow -379 ParamMax 6 を繰り返す。


これは、3つ目のパラメータのデータキャッシュでハングしていることを示しています。


そして今、"C:JusersasusePachDataRoamingPetaQuotesPetaTerminalPetaQuotesPetaTerminalPetaD0E8209F77C8CF37AD8BF550E51FF075TesterCache "フォルダをもう一度クリアする必要がある。

の繰り返しだ:


最初のパラメータは、ProfitNow -1478 ParamMax 0.37。

2番目のパラメータは、ProfitNow -379 ParamMax 30。

第 3 パラメータ: ProfitNow -379 ParamMax 6(初回)。


最初の パラメータ:ProfitNow -379 ParamMax 6 を繰り返す。

第 2 パラメータ: ProfitNow -379 ParamMax 6 を繰り返す。

第 3 パラメータ: ProfitNow -379 ParamMax 6 を繰り返す。


Nocturneスクリプトの151行目から154行目までは、すべてご指示のとおりです:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // optファイルをバイト配列に取得 Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // バイト配列BytesをCacheにフィードする。


バグはもちろん私が書いたコードにあるのだが、それを修正する方法はまだわからない。

ただ、Runを実行する前に、手動で「C:◆bytes」フォルダからoptファイルを全て削除すると、「C:◆Users」フォルダからoptファイルが削除されることを実験的に発見した。

を実行する前に、「C:◆UsersASUSAppData◆Roaming◆MetaQuotes◆Terminal◆D0E8209F77C8CF37AD8BF550E51FF075Tester◆cache◆」フォルダから、optファイルを全て手動で削除する、

を選択すると、私のコードは正しく動作し、選択されたパラメータで最適化が実行されます。


このフォルダがクリーンアップされていない場合、Testerは(同じ未変更のデータで)繰り返し最適化を 実行せず、このフォルダから既に存在するoptファイルを読み出します。

を読み出します。これは、同じ最適化を手動で繰り返し実行したときにはっきりとわかります。

実際の最適化が実行されるのは最初の1回だけで、その後はフォルダからoptファイルを読み出すだけであることがわかる。

この読み取りの繰り返しではキャッシュの内容が更新されないようで、これが私のコードでエラーを引き起こしている。


このフォルダをクリアすれば、エラーが解決するかもしれない。もちろん、これは悪い解決策で、キャッシュ内の正しいデータを復元できるほうがエレガントだろう。

しかし、その方法がわからない。今のところ、前回の実際の最適化のデータがキャッシュにぶら下がっている(フォルダからの再読み込みと一致しない)。

残念ながら、このフォルダはFolderCleanを使ってスクリプトからクリーニングすることができません。

このフォルダは「サンドボックス」の外にあり、Strategy Testerによってのみ埋められます。


C++で外部アドオンを作成し、スクリプトから実行する必要があるかもしれません。


ありがとう、アレクサンダー

 

Nocturneがパラメーターのリストで指向しているので、最適化のためにロボットを投稿した。

でも、MQL5Expertsの 場合は、多くの修正が必要です。


ところで、なぜパラメータ入力int inNum = 0が必要なの?

それとも単なる癖?

 
fxsaber #:

MQLを 最適化するコードをアップロードしてください。それから再現してみて。今は建設的な作業はほとんどない。

こんにちは!

Alexander Slavsky:https://www.mql5.com/ja/users/s22aa の助けを借りて、すべての問題を解決することができたよ

彼はキャッシュの内容を削除するコードを送ってくれました。

Cacheは サンドボックスの外にあるので、直接クリーンすることはできませんでした。

実行手順を実行する前に、過去の最適化の結果が新しい最適化の邪魔にならないようにするために、誰かの役に立つかもしれない。

このスクリプトを添付します。

あなたのライブラリーとこのクリーンアップ手順のおかげで、一貫してロボットを最適化できるようになりました。

これらのコードとご協力に感謝します。

ありがとう、アレクサンダー

Aleksandr Slavskii
Aleksandr Slavskii
  • 2024.05.27
  • www.mql5.com
Профиль трейдера
ファイル:
 
klycko 繰り返し最適化を 実行するのではなく、それらを読み出す。

を読み出す。このことは、手動で同じ最適化を繰り返し実行するとよくわかります。

実際の最適化は最初の1回だけ行われ、その後はフォルダからoptファイルを読み出すだけであることがわかる。

この読み取りの繰り返しによってキャッシュの内容が更新されることはないようで、これが私のコードにおけるエラーの原因となっている。

sinput uint Range = 2;

void OnTesterInit( void )
{
  ::MathSrand((int)::TimeLocal());

  const int Start = ::MathRand();
  const int Step = ::MathRand();

  const uint TmpRange = (::Range < 2) ? 2 : ::Range;

  ::ParameterSetRange("Range", true, TmpRange, Start, Step, Start + (TmpRange - 1) * Step);
}
 
klycko #:

キャッシュの内容を削除するコード。

MTTester.mqhには、シングルランをたくさん行う場合に非常に必要となる関数があります。

  static bool DeleteLastTST( void )
  {
    const string Path = ::TerminalInfoString(TERMINAL_DATA_PATH)+ "\\Tester\\cache\\";
    string FileNames[];

    const int Size = MTTESTER::GetFileNames(Path, "*.tst", FileNames);

    return(Size && kernel32::DeleteFileW(Path + FileNames[Size - 1]));
  }

tstをoptに置き換えると、最後のoptファイルが削除される。Cacheフォルダ全体を掃除するのは冗長な気がする。

 
ありがとう!