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

 
Aleksey Vyazmikin:

不正なパラメータは、一般的に3つの理由で無効になります。

1.調査対象地域に興味がない(例:最も理解しやすい選択肢として多くの時間軸を除外する)。

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

全くその通りです。

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

さて、「無効な」パラメータを含めずに、例のMA最適化をどのように整理するのでしょうか。

OK、私は同意する、私は慎重に見ていませんでした。

 
TheXpert:

最適化するために、無効なギャップを切り取った別のパラメータを出す。

具体例を教えてください。

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

例を挙げてみましょうか。

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

私もそう思います。タイムフレームの場合はどうでしょうか。

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

私もそう思います。また、タイムフレームの場合はどうすればいいのでしょうか?

同じ - 連続区間の int を時間軸に変換する。例えば、すべての TF 値で配列を作成し、配列のインデックスで 最適化する。

 
TheXpert:

例えば、すべてのTFの値で配列を作成し、配列のインデックスで 最適化する場合

まあ、これは松葉杖にしか見えませんが...。間違っているかもしれませんが、私のスタート時の例とほぼ同じです。ただし、この場合、あらかじめ配列全体をファイルにダンプしておく必要はないのですが...。

 

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

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

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

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

 

私のやり方:別のパラメータを作成し、その値に応じて他の値を代入する。

簡単な例(2週間前)です。

TF_UP(シニア)とTF_DOWN(ジュニア)という時間枠のパラメータがあり、シニアは常にジュニアより大きくなければならず、逆の場合は input_incorrect が出ます。テスターではNullの結果が多く、遺伝子が「無駄に働いている」(スピードは速いが)。その結果、この2つのパラメータを削除し、後述の型を持つ新しいパラメータを作成し、それだけを最適化し、すでにOnInit関数 内で、このパラメータに応じて他の2つのパラメータに置換するようにしました。

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};