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

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

EAのパラメータを同じにして、いくつかの最適化を行った場合、異なる最適化の結果が一致するか? もし一致するなら、問題はオプティマイザーとシングルパスの違いにあることになります。

 

説明しよう。ここの流行の文章は、:

if (condition) {

} else if (!condition) {

}

コードの可読性や理解度を高めると思われがちだが、実は悪である

さらに、ダブルで非常に慎重に作業する必要があります。

 
Andrey Dik:

EAのグローバル 変数が、過去のオプティマイザーの実行時の値を保持し、次の実行時に引き継がれると考えているのですか?

そうですね、そのくらいがちょうどいいんです。ということを心がけていました。

ただ、それが単なるグローバル変数ではなく、静的なクラスメンバやターミナル変数などであった。


さらに、端末起動直後の1回の テストと、同じエージェントでの繰り返しテストでは、異なる場合があります。同じ理由です。

すべてにおいて、初期化を行い、細心の注意を払う必要があるのです。


ps: いや、そういえばそうでした。初期化は問題なく、スタティックが不具合で初期化されるビルドの一つでした。迅速に修理してもらった。

 
Andrey Dik:

ある実行から別の実行へのEA変数の内容の転送は、たとえそれがターミナルのグローバル変数に関するものであっても、テスターのバグとして考慮されるべきです。

リアルタイムでチャート上で1つのEAが複数稼働している場合、ユーザーはメイジなどを使って識別し、最適化プロセスでは同じメイジで1つのEAを複数かつ互いに独立して稼働させることを意味し、そうでない場合、最適化の思想的観点から間違っているだけでなく、最適化に影響を与え、購入者をミスリードして市場製品を乱用する可能性を開くことになります。

TCの未剪定案件のレポートを待っているところですが、興味津々です。

聖なる盗人には設定されていない。

ポイントは、いつものように単純で、EAをアンロードして高速に最適化することではありません。EXのファイルは大きくなることがあります。

 

今日になってようやく、この問題に取り組む時間ができました。小さく始めることにしました。ひとつひとつ、丁寧に。開いているファイルのチェックも含む。コードは以下の通りです。

      int      h     = FileOpen(filename, FILE_BIN|FILE_READ|FILE_COMMON);
      if(h == INVALID_HANDLE)
      {
         Print("Ошибка открытия файла обученной сети по индикатору >>> ",name);
         writeErrorFile(program_name,program_version,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name);
         writeOptTestFile(file_Opt_Tst,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name+"\n");
         FileClose(h);
         return(TRADESIGNAL_NO);
      }

最適化を実行した上で、単発のテストをしています。その結果、2つのファイルが出来上がりました。

1_100_100_300_300_.opt
1_100_100_300_300_.tst

この2つのファイルをWinMergeプログラムで開いてみました。そして、そこで見たものがこれです。

オプティマイザーでファイルを開くと問題が 発生します。なお、テスターではこのようなエラーはありません

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

オプティマイザーがファイルを開く際に問題が 発生します。なお、テスターではこのようなエラーはありません

複数のコアで同時にファイルを開く。一人が開けば、残りはダメになる。
待ち時間があるコード、少なくともFILE_SHARE_READ フラグが必要

 

もし、あなたが

  • は、コモンズエリアのEAから同じファイルにアクセスしています。
  • アクセスエラーになる
  • 複数の並列プロセスによる共有アクセスから保護しない、タイムアウトで繰り返し試行しない
そうすると、当然オプティマイザーとシングルパスの差が出てきます。これは論理的な誤りである。
 
Andrey Khatimlianskii:

複数のコアで同時にファイルを開く。一人が開けば、他はダメになる。
待ち時間があるコード、少なくともFILE_SHARE_READ フラグが必要です。

まあ、オプティマイザーのために特別にコードを書いたわけではないんですけどね。そのようなニュアンスは、オプティマイザーがすでに認識しているものと思われた。フラグを付けてみる、悪化はしないでしょう。)))

レナト・ファットフーリン

もし、あなたが

  • は、Expert AdvisorからCOMON ZONEの同じファイルにアクセスしています。
  • アクセスエラーになる
  • は、複数の同時アクセスから保護せず、タイムアウトで繰り返そうとしない。
そうすると、当然オプティマイザーとシングルパスの差が出てきます。これは論理的な誤りである。

  1. コミットゾーンを入れているのは、単にファイルを探すのに便利だからです。
  2. ....
  3. 共有アクセスはしていない。これらのファイルは、1つのEAからしかアクセスできない。
 

まだコードもなく、テスト条件も何も記述されておらず、明らかに誤った発言をしているのですから、それなら自分で対処してください。

ファイルを開くことさえできない場合は、Expert Advisorに多くの問題があることを意味します。

これらのファイルの名前さえも隠していますね。

 
Renat Fatkhullin:

まだコードもなく、テスト条件も何も記述されておらず、明らかに誤った発言をしているのですから、それなら自分で対処してください。

ファイルを開くことさえできない場合は、Expert Advisorに多くの問題があることを意味します。

このファイル名まで隠しているんですね。

バルーンを追加することで本当に問題が解決されたので、コードはありません。これで、最適化 結果とシングルランが完全に一致するようになりました。

ただ、以前はEAでファイルをほとんど使わなかった(少なくとも最適化・テスト中の書き込み・読み込みはすべて無効にしていた)のですが、オプティマイザで1つのEAからのアクセスの問題が解決されたと思ったのですが、どうでしょう?