MT開発者向けではない!?INIT_PARAMETERS_INCORRECTを何に置き換えたらいいのでしょうか? - ページ 11

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

OnTester()で遺伝的最適化の際に「無効な」パラメータをふるい落とすというアイディアが浮かびました。

遺伝子を妨害しなければ、INIT_PARAMETERS_INCORRECTの結果は見られないかもしれないことが判明した。

しかし、ここでもう一つ疑問があります。この場合、利益に対して「ディープマイナス」を得ることができるのでしょうか?

これは非常に遅い方法です。パス全体を計算することにリソースを費やしているのです。

 
Mikhail Mitin:

は非常に遅い方法です。通路全体の誤算にリソースを浪費している。

2つの悪のうち...

 
Mikhail Mitin:

は非常に遅い方法です。パス全体を計算するのは資源の無駄遣いです。

INIT_PARAMETERS_INCORRECT_ONTESTERを 入力- OnTesterにロールオーバー します。

 

私がこの問題を解決した方法(いくつかのバリエーション)。

  • 別のパラメータが作成され、その値に応じて他の値が代入されます(上記のいくつかの記事で説明されています)。最適化は、このパラメータに対してのみ行われます
  • この状況を打開する方法も1つありますが、実行するのは簡単ではありません。
    1. 必要なパラメータのみを列挙したcsvファイルを作成しました。
    2. OnInitでファイルを読み、ファイルから値を読み、パラメータに与える(Shared accessフラグでファイルを読み込む)。
    3. 最適化された1つのパラメータ(csvファイルの行番号)のみ。
  • csvファイルからmqhファイルを生成するアルゴリズムを書き、Expert Advisorに接続した(上記の点に似ているが、より高速)。

 
Mikhail Mitin:

私がこの問題を解決した方法(いくつかのバリエーション)。

  • 別のパラメータが作成され、その値に応じて他の値が代入されます(上記のいくつかの記事で説明されています)。最適化は、このパラメータに対してのみ行われます
  • この状況を打開する方法も1つありますが、実行するのは簡単ではありません。
    1. 必要なパラメータのみを列挙したcsvファイルを作成しました。
    2. OnInitでファイルを読み、ファイルから値を読み、パラメータに与える(Shared accessフラグでファイルを読み込む)。
    3. 最適化された1つのパラメータ(csvファイルの行番号)のみ。
  • csvファイルからmqhファイルを生成するアルゴリズムを書き、Expert Advisorに接続した(上記の点に似ているが、より高速)。

また、変数が1つしかないのに、どうしてこれで遺伝的アルゴリズムを 実装できるのでしょうか?

 

夜が明けた!))))

OnInitの行から

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

に移動しました。

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

遺伝子が干渉せず、PARAMETERS_INCORRECTが 計算されない。)))

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

夜が明けた!))))

OnInitの行から

に移動しました。

遺伝子が干渉せず、PARAMETERS_INCORRECTが 計算されない。)))

面白い解決策ですね。そして、どのようにして、遺伝学がうまく行き、一人の子孫に拘泥しないのか?

 
Aleksey Vyazmikin:

それは面白い解決策ですね。また、遺伝はどうですか?1つの子孫に拘泥することなく、うまくいっているのでしょうか?

大丈夫です。失敗していない。)))少なくとも、まだです。どこかで無効なパラメータを大量に持つフクロウがいた。最適化をかけて見ないとわからない。

移植の考え方は、遺伝子がまさに初期化でつまずくことにある。しかし、OnTickにチェックを移すと、初期化がうまくいき、テストが始まり、すぐに終了し、ジェネティクスはゼロへのパスの結果を得ることができます。

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

いいんです。下がらないんです。)))少なくとも、まだです。どこかで無効なパラメータを大量に持つフクロウがいた。最適化をかけて見ないとわからない。

移植の考え方は、遺伝子がまさに初期化でつまずくということです。しかし、OnTickにチェックを移すと、初期化はうまくいき、テストはすぐに始まり、すぐに終わり、ジェネティックはゼロの結果を得ます。

失敗しないのはいいことだ。コードの本質は明確ですが、特に早期終了の条件が多い場合は、一度だけ実行を追加します。

 
Aleksey Vyazmikin:

泥臭くならないのが良いですね。コードの要点は明確ですが、特に早期終了の条件が多い場合は、一度だけ実行を追加します。

先ほどお話したフクロウの最適化も順調に進んでいます。)))

良いアイデアですね。チェックフラグを追加する必要があります。