【MQL5】TesterHideIndicators関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

TesterHideIndicators関数の働き・役割

TesterHideIndicators関数は、エキスパートアドバイザーEA)で使用されるインジケータの表示または非表示を設定するために使用されます。具体的には、ストラテジーテスターでEAをテストしている間にインジケータがチャートに表示されるかどうかを制御します。

通常、EAがテスト中に生成したインジケータはテストチャートに表示されますが、TesterHideIndicators関数を使うことで、この表示を無効にして非表示にすることができます。これにより、特定のテストではインジケータの視覚的な出力を抑制し、テスト結果に集中することが可能です。

EAで新しく生成されたインジケータの可視性を操作するには、この関数を使用して事前に設定を行い、必要に応じて非表示モードを有効または無効にします。

TesterHideIndicators関数の引数について

void  TesterHideIndicators(
  bool      hide     // フラグ
  );

TesterHideIndicators関数は、1つの引数を取ります。

第1引数:

  • hide
    種類: bool型
    説明: テスト中にインジケータを非表示にするかどうかを決定するフラグです。
    trueを指定すると、EAによって生成されたインジケータがテスト中およびテスト後に開かれるチャートに表示されなくなります。
    falseを指定すると、通常通りインジケータが表示されます。

この関数は、インジケータの表示状態を制御するために、テストの開始時や途中で呼び出すことができます。

TesterHideIndicators関数の戻り値について

TesterHideIndicators関数は、戻り値を返しません。

TesterHideIndicators関数を使う際の注意点

TesterHideIndicators関数は、EAインジケータを生成する前に呼び出す必要があります。生成後に関数を使用しても、既に表示されたインジケータを非表示にすることはできません。

特定のテンプレート(EAのテンプレートやテスターテンプレート)が存在する場合、それらのテンプレートに定義されたインジケータが優先して表示されます。このため、TesterHideIndicators関数で設定した内容が無効になることがあります。

テンプレートがない場合、default.tplテンプレートが自動的に使用される可能性があります。この場合、default.tplのインジケータ設定が適用されます。

TesterHideIndicators関数を使ったサンプルコード

bool CSampleExpert::InitIndicators(void)
{
  // インジケータを非表示に設定(テスト中のチャートにインジケータが表示されなくなる)
  TesterHideIndicators(true);
  
  // MACDインジケータを作成する
  // m_handle_macdが無効ハンドルの場合、MACDインジケータを作成
  if(m_handle_macd == INVALID_HANDLE)
    // MACDインジケータを作成(パラメータ: シンボルはNULL、タイムフレームは0、MACDの期間は12, 26, 9、価格は終値)
    if((m_handle_macd = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE)) == INVALID_HANDLE)
    {
      // MACDインジケータ作成時にエラーが発生した場合、エキスパートログにエラーメッセージを出力
      printf("Error creating MACD indicator");
      return(false); // エラーが発生したためfalseを返し、処理を中断
    }

  // インジケータの非表示モードを無効に設定(以降に作成されるインジケータは表示される)
  TesterHideIndicators(false);
  
  // EMA(指数移動平均)インジケータを作成し、コレクションに追加
  // m_handle_emaが無効ハンドルの場合、EMAインジケータを作成
  if(m_handle_ema == INVALID_HANDLE)
    // EMAインジケータを作成(パラメータ: シンボルはNULL、タイムフレームは0、移動平均の期間はInpMATrendPeriod、価格は終値)
    if((m_handle_ema = iMA(NULL, 0, InpMATrendPeriod, 0, MODE_EMA, PRICE_CLOSE)) == INVALID_HANDLE)
    {
      // EMAインジケータ作成時にエラーが発生した場合、エキスパートログにエラーメッセージを出力
      printf("Error creating EMA indicator");
      return(false); // エラーが発生したためfalseを返し、処理を中断
    }

  // 成功した場合はtrueを返す
  return(true);
}

このコードは、クラス変数の定義が含まれていないため、そのままではコンパイルエラーが発生します。特に、CSampleExpertクラスやm_handle_macd、m_handle_ema、InpMATrendPeriodといった変数の宣言が行われていない点に注意してください。

サンプルコード解説1

bool CSampleExpert::InitIndicators(void)
{

このコードは、CSampleExpertクラスのInitIndicatorsメソッドの一部です。InitIndicatorsメソッドは、エキスパートアドバイザーEA)内でインジケータの初期化を行うための関数です。このメソッドが呼び出されることで、EAが使用するインジケータが設定されます。

戻り値bool型で、インジケータの作成が成功した場合にtrueを返し、失敗した場合にはfalseを返します。これにより、インジケータの初期化が正しく行われたかどうかを確認できる仕組みになっています。

特に、エラーが発生した場合にはエラーメッセージがエキスパートログに出力され、インジケータの作成が失敗したことをユーザーに知らせます。また、このメソッドは、複数のインジケータ(例えば、MACD EMA)を生成し、それらのハンドルを管理する役割も担っています。

サンプルコード解説2

  // インジケータを非表示に設定(テスト中のチャートにインジケータが表示されなくなる)
  TesterHideIndicators(true);
  
  // MACDインジケータを作成する
  // m_handle_macdが無効ハンドルの場合、MACDインジケータを作成
  if(m_handle_macd == INVALID_HANDLE)
    // MACDインジケータを作成(パラメータ: シンボルはNULL、タイムフレームは0、MACDの期間は12, 26, 9、価格は終値)
    if((m_handle_macd = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE)) == INVALID_HANDLE)
    {
      // MACDインジケータ作成時にエラーが発生した場合、エキスパートログにエラーメッセージを出力
      printf("Error creating MACD indicator");
      return(false); // エラーが発生したためfalseを返し、処理を中断
    }

  // インジケータの非表示モードを無効に設定(以降に作成されるインジケータは表示される)
  TesterHideIndicators(false);

この部分では、テスト中にインジケータの表示を制御し、MACDインジケータを作成する処理を行っています。

まず、TesterHideIndicators関数をtrueで呼び出すことにより、テスト中に作成されるインジケータがチャートに表示されない設定が適用されます。これにより、この時点で生成されるインジケータはテストチャート上には表示されません。

次に、MACDインジケータを作成する処理が行われます。m_handle_macdが無効なハンドルである場合(インジケータがまだ作成されていない場合)、iMACD関数を使用してMACDインジケータを生成します。iMACD関数は、MACDを作成するための関数で、パラメータには以下が含まれます:

  • シンボルにはNULL(現在のチャートのシンボルを使用)
  • タイムフレームには0(現在のタイムフレームを使用)
  • MACDの期間は12, 26, 9(それぞれの期間パラメータ)
  • 価格は終値であるPRICE_CLOSE

もしインジケータの作成に失敗した場合、”Error creating MACD indicator”というエラーメッセージがエキスパートログに出力され、処理が中断されます。この際、falseが返されるため、インジケータの作成が正常に行われなかったことを知らせます。

その後、TesterHideIndicators関数をfalseで呼び出すことで、インジケータの非表示設定を解除し、以降に作成されるインジケータはチャートに表示されるようになります。この処理により、テスト中に生成されたMACDインジケータが非表示にされ、その後に生成される他のインジケータ(次の部分で EMAが生成される)に関しては表示されるように設定されます。

サンプルコード解説3

// EMA(指数移動平均)インジケータを作成し、コレクションに追加
  // m_handle_emaが無効ハンドルの場合、EMAインジケータを作成
  if(m_handle_ema == INVALID_HANDLE)
    // EMAインジケータを作成(パラメータ: シンボルはNULL、タイムフレームは0、移動平均の期間はInpMATrendPeriod、価格は終値)
    if((m_handle_ema = iMA(NULL, 0, InpMATrendPeriod, 0, MODE_EMA, PRICE_CLOSE)) == INVALID_HANDLE)
    {
      // EMAインジケータ作成時にエラーが発生した場合、エキスパートログにエラーメッセージを出力
      printf("Error creating EMA indicator");
      return(false); // エラーが発生したためfalseを返し、処理を中断
    }

  // 成功した場合はtrueを返す
  return(true);
}

この部分では、 EMA指数移動平均インジケータを作成し、EAが管理するコレクションに追加する処理が行われています。

まず、m_handle_emaが無効なハンドルである場合、 EMAインジケータがまだ作成されていないと判断し、iMA関数を使用して EMAインジケータを作成します。この関数のパラメータは次のように設定されています。

  • シンボルにはNULLが指定されており、これは現在のチャートで使用されているシンボルを意味します。
  • タイムフレームには0が指定されており、現在のタイムフレームを使用します。
  • 移動平均の期間はInpMATrendPeriodという変数で指定されています。これはEA内で事前に設定された値で、移動平均の計算に使用する期間を表します。
  • 価格には終値(PRICE_CLOSE)が使用されています。

もし EMAインジケータの作成に失敗した場合、”Error creating EMA indicator”というエラーメッセージがエキスパートログに出力されます。この際、インジケータの作成ができなかったことを示すために、falseが返され、処理が中断されます。

EMAインジケータが正常に作成された場合、メソッド全体としてはtrueが返され、インジケータの初期化が成功したことを示します。この処理により、EA移動平均に基づいた取引戦略を構築するための準備が整います。

TesterHideIndicators関数を使ってEAを作る際のアイディア

TesterHideIndicators関数は、EAがテスト中に生成するインジケータの表示を制御する強力なツールです。この機能を活用することで、EAのパフォーマンス向上やテスト効率の向上が期待できます。以下は、この関数を活用したEA開発のアイディアです。

テストパフォーマンスの最適化

ストラテジーテスターで多くのインジケータを表示すると、特にビジュアルテストの場合、パフォーマンスが低下する可能性があります。TesterHideIndicators関数を使用して、インジケータの表示を無効にすることで、テスト時のリソース消費を軽減し、パフォーマンスを向上させることができます。

視覚的な要素を最小限にしてテストに集中

インジケータの視覚的な出力が多すぎると、テスト結果を視覚的に確認するのが難しくなることがあります。例えば、複数のインジケータを使用する戦略では、特定のインジケータだけを表示し、他のインジケータは非表示にすることで、視覚的な混乱を避け、テストに集中できる環境を作ることが可能です。

カスタムテンプレートとの組み合わせ

特定のテンプレートファイル(.tplなど)を利用して、テスト時にインジケータを表示・非表示にするルールを決めておくと、EAごとに異なる視覚的出力をカスタマイズできます。これにより、同じEAのテストでも異なる視点からテスト結果を評価することが可能です。たとえば、移動平均線などの基本的なインジケータのみを表示し、補助的なインジケータを非表示にすることで、テスト結果の解釈を簡素化できます。

複数の戦略の効率的なテスト

TesterHideIndicators関数を利用して、異なるインジケータセットを複数の戦略でテストできます。特定の戦略に応じて必要なインジケータのみを表示し、それ以外は非表示にすることで、EAが複数の異なる取引戦略を同時にテストする場合でも、視覚的に分かりやすい結果が得られるでしょう。

自動化されたテスト環境の構築

TesterHideIndicators関数EAに組み込み、テストの自動化プロセスにおいて、テスト条件に応じてインジケータの表示を動的に切り替えることができます。例えば、特定の条件が満たされた場合にインジケータを表示し、他の条件では非表示にするなど、動的なテスト環境を構築することが可能です。これにより、テストの効率を向上させ、より柔軟なテスト戦略を実現できます。

これらのアイディアは、TesterHideIndicators関数を効果的に活用し、EA開発におけるテストプロセスを最適化する方法を提供します。

タイトルとURLをコピーしました