ParameterGetRange

ストラテジーテスターでエキスパートアドバイザーを最適化する際に、値範囲のデータを受け取り入力変数のステップを変更します。この関数には 2 つのバージョンがあります。

1. 整数型入力パラメータのデータを受け取る

bool  ParameterGetRange(
  const string  name,          // パラメータ(入力変数)名
  bool&        enable,        // パラメータ最適化が有効
  long&        value,        // パラメータ値
  long&        start,        // 初期値
  long&        step,          // ステップ変更
  long&        stop          // 最終値
  );

2. real 型入力パラメータのデータを受け取る

bool  ParameterGetRange(
  const string  name,          // パラメータ(入力変数)名
  bool&       enable,        // パラメータ最適化が有効
  double&      value,        // パラメータ値
  double&      start,        // 初期値
  double&      step,          // ステップ変更
  double&      stop          // 最終値
  );

パラメータ

name

[in] 入力変数 ID。これらの変数は、アプリケーションの外部パラメータです。チャート起動中または単一のテスト中での指定が可能です。

enable

[out]  このパラメータがストラテジーテスターで最適化の際に値を列挙するために使用することが出来るというフラグ

value

[out]  パラメータ値

start

[out]  最適化中の初期のパラメータ値

step

[out]  値の列挙中のパラメータ変更ステップ

stop

[out]  最適化中の最終パラメータ値

戻り値

成功の場合は true、それ以外の場合は false 。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

この関数は OnTesterInit()OnTesterPass() 及び OnTesterDeinit() ハンドラ—のみから呼び出されます。これは、エキスパートアドバイザーの入力パラメータ値を受信するために導入され、変動はストラテジーテスターで最適化中に範囲されています。

OnTesterInit()で呼び出された場合、取得されたデータは、任意の入力変数列挙のためのルールのParameterSetRange() 関数を使用しての再定義に使用することが出来ます。そのため、新たな Start、Stop 及び Step 値を設定することができ、ストラテジーテスターの設定にかかわらず、入力パラメータを完全に最適化から除外することも出来ます。なので、エキスパートアドバイザーの重要なパラメータの値に応じて最適化からいくつかのパラメータを除外することによって最適化の際に入力パラメータのエリアを管理することが出来ます。

例:

#property description "Expert Advisor for ParameterGetRange() function demonstration."
#property description "Should be launched in the optimization mode of the Strategy Tester"
//--- 入力パラメータ
input int                 Input1=1;
input double             Input2=2.0;
input bool               Input3=false;
input ENUM_DAY_OF_WEEK   Input4=SUNDAY;
 
//+------------------------------------------------------------------+
//| エキスパート初期化に使用される関数                                        |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- エキスパートアドバイザーはストラテジーテスター内のみで動作するように設計されている
  if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
    {
    MessageBox("Should be launched in the optimization mode of the Strategy Tester!");
    //--- 事前にエキスパートアドバイザー操作を終了してチャートから削除する
    return(INIT_FAILED);
    }
//--- 初期化が正常に完了した
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| TesterInit 関数                                                   |
//+------------------------------------------------------------------+
void OnTesterInit()
 {
//--- long 型入力パラメータの例
  string name="Input1";
  bool enable;
  long par1,par1_start,par1_step,par1_stop;
  ParameterGetRange(name,enable,par1,par1_start,par1_step,par1_stop);
  Print("First parameter");
  PrintFormat("%s=%d  enable=%s  from %d to %d with step=%d",
              name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- double 型入力パラメータの例
  name="Input2";
  double par2,par2_start,par2_step,par2_stop;
  ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
  Print("Second parameter");
  PrintFormat("%s=%G  enable=%s  from %G to %G with step=%G",
パブリック               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- bool 型入力パラメータの例
  name="Input3";
  long par3,par3_start,par3_step,par3_stop;
  ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
  Print("Third parameter");
  PrintFormat("%s=%s  enable=%s  from %s to %s",
              name,(string)par3,(string)enable,
              (string)par3_start,(string)par3_stop);
//--- 列挙型入力パラメータの例
  name="Input4";
  long par4,par4_start,par4_step,par4_stop;
  ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
  Print("Fourth parameter");
  PrintFormat("%s=%s  enable=%s  from %s to %s",
              name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
              EnumToString((ENUM_DAY_OF_WEEK)par4_start),
              EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
 }
//+------------------------------------------------------------------+
//| TesterDeinit 関数                                                |
//+------------------------------------------------------------------+
void OnTesterDeinit()
 {
//--- このメッセージは最適化が完了した後に表示されます
  Print(__FUNCTION__," Optimization completed");
 }