一体どうなっているのでしょうか。 - ページ 4

 
SeriousRacoon:
そして、現在のロジックを無効にして、普通のウィザードに置き換えてみてください。猫がどこで間違ったのか、ロジックか実行か、すぐにわかります。

良いアドバイスだ.少なくとも、ユーザーが望むこと、開発者が望んだことは、最適化とはシングルランの個別インスタンスにほかならないという考えに至るべきではないでしょう。

つまり、Expert Advisorのアルゴリズムがいかに複雑であっても、最適化の際に1回の実行で 得られる結果は、複数の実行で得られる結果と同一でなければならないのです。

私は(Renatがアドバイスするように)最適化中の各実行が完了した時点で、パラメータを含むファイルに取引履歴を印刷し(作成されたファイルの山から検索しやすくするため)、1回の実行についても同じことをします。このようにして、最適化と1回の実行後の結果の違いを見つけることが可能になります。 というのが真相のようです。

しかし、最適化とシングルランで結果が異なるのは、どのようなニュアンスなのでしょうか?

 
Алексей Тарабанов:

" ほぼ全てのデータがループで初期化される " 。

みんな、ループの中で初期化してはいけないよ。ループで読まないといけない。

どのような場合に、それが可能であるばかりでなく、必要であり、他に方法がないかを示したのです。

 

アンドレイ・ディック さん、ファイルへの印刷をどのように行うか、具体的に教えてください。ファイルはそのまま書き込めばいいようです。そして、そこには具体的に何を書けばいいのか。価格は参考にはならない。 矛盾の理由を理解するのに役立つ情報を書く必要があります。どのような情報ですか?どこにあるのでしょうか?まだ全然わからないです。

 
Сергей Таболин:

アンドレイ・ディック さん、ファイルへの印刷をどのように行うか、具体的に教えてください。ファイルはそのまま書き込めばいいようです。そして、そこには具体的に何を書けばいいのか。価格 - 参考にはならない。矛盾の理由を理解するのに役立つ情報を書く必要があります。どのような情報ですか?どこにあるのでしょうか?まだ何も考えていません。

OnTester()関数内で、InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +...というファイルを作成します。を作成し、その中に全ての取引(ポジションではない)の履歴を記録することで、分析に必要な情報、時間、価格などが全て記録されることになります。また、このファイルには、特定のEAについて非常に興味深いことを書き込むことができます。これは、オプティマイザと1回の実行の間に矛盾がないかを検索するのに便利でしょう。

MQLInfoInteger (MQL_OPTIMIZATION)) をチェックして、最適化後に同じファイルを上書きしないように、一回の実行でファイル名に postfix を追加することを忘れないようにしてください。


SZY. もし、内容の異なる2つのファイルがあったとしても、それは開発者にとって十分なものではなく、さらに掘り下げるべき方向を示すだけで、再現可能な問題コードを持ってくる必要があります。

 
Andrey Dik:

OnTester()関数内で、InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +...という名前のファイルを作成します。を作成し、その中に全ての取引(ポジションではない)の履歴を記録することで、分析に必要な情報、時間、価格などが全て記録されることになります。また、このファイルには、特定のEAについて非常に興味深いことを書き込むことができます。これは、オプティマイザと1回の実行の間に矛盾がないかを検索するのに便利でしょう。

MQLInfoInteger (MQL_OPTIMIZATION)) をチェックして、最適化後に同じファイルを上書きしないように、一回の実行でファイル名に postfix を追加することを忘れないようにしてください。


SZY.内容の異なる2つのファイルを取得しても、開発者にとっては十分ではなく、次にどこを掘ればいいかの方向性を示すだけなので、再現性のあるコードの問題を挙げてください。 EAのコードに問題があるといいのですが。

ありがとうございます。します。

 
Сергей Таболин:

ありがとうございます。していきます。


 
Сергей Таболин:

ありがとうございます。します。

グローバルに宣言された変数の初期化を 確認する。

初期化がOnInit()内ではなく、宣言内であり、コード内でその値が変更された場合。

 
Andrey F. Zelinsky:

グローバルに宣言された変数の初期化を 確認する。

初期化がOnInit()内ではなく、宣言内であり、コード内でその値が変更された場合。

変数が初期化されているかどうかに関係なく、両方のテスターモード(最適化と単一実行)で結果が一致する必要があります。

 
Andrey Dik:

良いアドバイスだ.少なくとも、ユーザーが望むこと、開発者が望むことは、そうであるべきなのです。

つまり、Expert Advisorのアルゴリズムがいかに複雑であっても、最適化の際に1回の実行で 得られる結果は、複数の実行で得られる結果と同一でなければならないのです。

私は(Renatがアドバイスするように)最適化中の各実行が完了した後、パラメータを含むファイルに取引の履歴を印刷し(作成されたファイルのヒープから検索しやすくするため)、単一の実行中に同じことを行うことで、最適化と単一の実行後の結果の違いを見つけることが可能です。

しかし、最適化後のシングルランと最適化バッチランが同一であれば、論理的には原理的にありえないことなので、何が、どういうニュアンスで、異なる結果になるのか、非常に気になるところではあります。

全般的には賛成です。もしowlが本当に環境(optimizerで動いているかtesterで動いているか)によって分岐しないのであれば、最適化モードではtesterの一部のapiコールが速度的に最適化されすぎているとしか考えられません、トートロジーで失礼します。おそらく、使用する関数のフラグに依存するのでしょう。トランザクションと実行結果の詳細なログがあると助かりますね、はい。

個人的には出会ったことがない。

 
Andrey Dik:

変数が初期化されているかどうかに関係なく、両方のテスターモード(最適化と単一実行)で結果が一致する必要があります。

int kk=0 のように、変数をグローバルに宣言し、宣言時に初期化する。

そして、OnTick()で、Print("kk=",kk); ++kkのように、unprintして値を変更します。

そして、TFやパラメータを変更し、その結果をご覧ください。