Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
フレームを使った作業について読む
これがそのコードです:
inNum=0;
{// 最適化された入力パラメータを読み込む
Print("GLOC = ",GLOC);
取引、自動取引システム、取引戦略のテストに関するフォーラム。
ライブラリ: TesterCache
fxsaber, 2019.11.11 04:45 pm.
バイト配列の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のデータがキャッシュから読み込まれます。
ありがとう、アレクサンダー
何らかの理由で、以前実行したときの ProfitNow と ParamMax のデータがキャッシュから読み込まれる。
このスクリプトは 最適化後に正しい値を表示しますか?
もしそうなら、問題は最適化の直後にopt-fileが準備できていない可能性が高いです。Runの後にSleepを入れてみてください。または、Runが正しく動作していない可能性があります。
このスクリプトは、最適化後に正しい値を表示しますか?
もしそうなら、最適化の直後にoptファイルが準備できていないことが原因である可能性が高いです。Runの後にSleepを入れてみてください。または、Runが正しく動作していない可能性があります。
ありがとう!明日、すべて確認してみます。
でも、新しいパラメータで最適化を設定すれば、すべてが正しく機能することがわかりました。
ということは、テスターは、すでに動作している最適化を再設定した場合、実際にはそれを再度処理するのではなく、以前の結果をメモリーから取り出すだけだということです。
テスターのこのメモリーを事前に破壊するような発明はできないのだろうか?
つまり、テスターが以前に実行した最適化を再設定する場合、実際にそれを再び処理するのではなく、単にメモリーから過去の結果を取り出すということがポイントになるようだ。
あなたの仮説は間違っている。問題はあなたの書いたコードにある。
あなたの仮説は間違っている。問題はあなたが書いたコードだ。
こんにちは!
問題は私が書いたコードにある」というのは同感です。エラーはその中にあり、それを修正する方法を私はまだ知りません。
ただ、実験的に、Run.
を実行する前に、手動でoptファイルを全部削除すると、正しく動作することがわかりました、
を選択すると、私のコードは正しく動作し、選択されたパラメータで最適化が実行されます。
このフォルダがクリーンアップされていない場合、Testerは(同じ未変更のデータで)繰り返し最適化を実行せず、このフォルダから既に存在するopt-fileを読み出します。
を読み出します。これは、手動で同じ最適化を繰り返し実行したときにはっきりとわかります。
実際の最適化が実行されるのは最初の1回だけで、その後はフォルダからoptファイルを読み出すだけであることがわかる。
この読み取りの繰り返しではキャッシュの内容が更新されないようで、これが私のコードでエラーを引き起こしている。
このフォルダをクリアすれば、エラーが解決するかもしれない。もちろん、これは悪い解決策で、キャッシュ内の正しいデータを復元できるほうがエレガントだろう。
しかし、その方法がわからない。今のところ、前回の実際の最適化のデータがキャッシュにぶら下がっている(フォルダからの再読み込みと一致しない)。
残念ながら、このフォルダはスクリプトからFolderCleanを使ってクリーニングすることができません。
このフォルダは「サンドボックス」の外にあり、Strategy Testerによってのみ埋められます。
C++で外部アドオンを作成し、スクリプトから実行する必要があるかもしれません。
ありがとう、アレクサンダー