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

 
klycko 最適化の結果を エクセルの表と最適化キャッシュ・ファイルに出力する方法を教えてください。
opt-filesの読み込みを 参照してください。
How to open cache optimization file (.opt), MT5
How to open cache optimization file (.opt), MT5
  • 2020.07.30
  • DDamasceno
  • www.mql5.com
Hi, Is there a way to open Metatrader 5 optimization cache file (folder -> tester/cache/) with another software and export the data in...
 
klycko 最適化結果を Excelスプレッドシートに出力する方法

フレームを使った作業について読む

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Функции для организации собственной обработки результатов оптимизации в тестере стратегий. Могут вызываться при оптимизации в агентах тестирования...
 
こんにちは!

TesterCache、MultiTester、TypeToBytesライブラリの助けを借りて。
最適化プログラムを開発したのですが、その中に克服できないエラーがあります。

それをローカライズしました:
Run(Contr)プロシージャを実行した後、次の行が最適な値を読み取ろうとしています;
次の行は、Runの実行中に見つかったCacheから最適なパラメータを読み取ろうとしています。
そして、これらのパラメーターが表示され、スクリプトは停止します。

これがそのコードです:

inNum=0;

Run(Contr); // 選択されたパラメータの値で最適化を実行する。

prWrite = MTTESTER::SetSettings2(Sohran); // 保存した設定をロボットに戻します。
prRead = MTTESTER::GetSettings(Contr); // ロボット設定を読み込んで制御する
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // ダブルパラメータ用の最適化キャッシュを読む。

{// 最適化された入力パラメータを読み込む


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Print("GLOC = ",GLOC);


const int Size = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // 要求されたレコードの統計情報を表示します。
Print(Cache.Header.ToString()); // 最適化 Cache のメイン・データを表示します。
Print("Paramas\n");
ArrayPrint(Paramas); // 最適化された入力パラメータを表示します。
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // 最大利益を持つレコードの統計を出力する

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // 最大利益。
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // 最大利益を得たパスの数
int IndexMaxProfit = GetMaxProfitPos(Cache); // パラメータ値を持つ配列インデックス
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // 最大利益に達するパラメータの値

Alert("ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
を返す;



しかし、見つかったパラメータと出力されたパラメータは、Run !!!を実行して得られたものではなく、以前のoptファイルに対応している!
多分、Cache.GetInputs(inNum,Paramas)へのアクセスが間違っているのでは?

Runプロシージャ自体は問題なく動作しました。

なぜCacheから新しいデータを取得できないのでしょうか?

何かアドバイスがありましたら、よろしくお願いします。

よろしくお願いします。
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
optファイルをバイト配列で受け取りました。次に、これをキャッシュに入力する必要があります。

取引、自動取引システム、取引戦略のテストに関するフォーラム。

ライブラリ: TesterCache

fxsaber, 2019.11.11 04:45 pm.

void OnStart()
{
  uchar Bytes[];
  
  MTTESTER::GetLastOptCache(Bytes);
  
  TESTERCACHE<ExpTradeSummary> Cache;

  if (Cache.Load(Bytes)) // 最適化キャッシュを読む。
  {
 
fxsaber #:
バイト配列のoptファイルを受け取った。次に、これを Cache に入力する必要があります。

おっしゃるとおり修正しました:


文字列 Sohran,Contr;

MTTESTER::GetSettings(Sohran); // 現在のロボットの初期設定を読み込んでSohranに一時保存する。

prWrite = MTTESTER::SetSettings2(Odinar); // Odinarをロボットの設定に設定する。

prRead = MTTESTER::GetSettings(Contr); // 先ほど設定したロボットの設定を読み込む。

Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);

Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);


Run(Contr[0]); // 選択されたYパラメータの値で最適化を実行する。

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

TESTERCACHE<ExpTradeSummary> Cache;

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

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // 最大利益

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // 最大利益を得たパスの数

int IndexMaxProfit = GetMaxProfitPos(Cache); // パラメータの値を持つ配列のインデックス https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // 最大利益が達成されたパラメータの値


Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);

を返す;



結果はまだ間違っている。

なぜかProfitNowとParamMaxのデータがキャッシュから読み込まれます。

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

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
ファイル:
 
klycko #:

何らかの理由で、以前実行したときの ProfitNow と ParamMax のデータがキャッシュから読み込まれる。

このスクリプトは 最適化後に正しい値を表示しますか?

もしそうなら、問題は最適化の直後にopt-fileが準備できていない可能性が高いです。Runの後にSleepを入れてみてください。または、Runが正しく動作していない可能性があります。

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
fxsaber #:

このスクリプトは、最適化後に正しい値を表示しますか?

もしそうなら、最適化の直後にoptファイルが準備できていないことが原因である可能性が高いです。Runの後にSleepを入れてみてください。または、Runが正しく動作していない可能性があります。

ありがとう!明日、すべて確認してみます。

でも、新しいパラメータで最適化を設定すれば、すべてが正しく機能することがわかりました。

ということは、テスターは、すでに動作している最適化を再設定した場合、実際にはそれを再度処理するのではなく、以前の結果をメモリーから取り出すだけだということです。

テスターのこのメモリーを事前に破壊するような発明はできないのだろうか?

 
klycko #:

つまり、テスターが以前に実行した最適化を再設定する場合、実際にそれを再び処理するのではなく、単にメモリーから過去の結果を取り出すということがポイントになるようだ。

あなたの仮説は間違っている。問題はあなたの書いたコードにある。

 
fxsaber #:

あなたの仮説は間違っている。問題はあなたが書いたコードだ。

こんにちは!


問題は私が書いたコードにある」というのは同感です。エラーはその中にあり、それを修正する方法を私はまだ知りません。

ただ、実験的に、Run.

を実行する前に、手動でoptファイルを全部削除すると、正しく動作することがわかりました、

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

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

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

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

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


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

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


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

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


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


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

 
実行手順は完璧に機能する。設定を書き込み、スタートボタンを押す。すべて正常です。