ParameterGetRange

在策略测试优化EA期间,接收范围值的数据和输入变量的改变步骤。有两个函数变量。

1. 接收整型输入参数的数据

bool  ParameterGetRange(

   const string  name,          // 参数 (输入变量) 名称

   bool&         enable,        // 启用参数优化

   long&         value,         // 参数值

   long&         start,         // 初始值

   long&         step,          // 改变步骤

   long&         stop           // 最终值

   );

2. 接收真实类型输入参数的数据

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() 处理程序调用。它已被引入接收EA输入参数值和策略测试优化期间的变量范围。

当调用OnTesterInit()时,获得的数据可以通过ParameterSetRange()函数被用于重新定义任何输入变量的枚举规则。因此,可以设置新的Start,Stop 和 Step值并且无论策略测试如何设置,输入参数甚至可以完全脱离优化。这可以使您根据EA交易的关键参数值,通过排除一些优化参数,管理优化输入参数的区域。

例如:

#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()

  {

//--- EA是只为策略测试操作而设计的

   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))

     {

      MessageBox("Should be launched in the optimization mode of the Strategy Tester!");

      //--- 提前完成EA操作并从图表删除

      return(INIT_FAILED);

     }

//--- 成功完成初始化

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| TesterInit 函数                                                   |

//+------------------------------------------------------------------+

void OnTesterInit()

  {

//--- 长整型输入参数的示例

   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);

//--- 双精度型输入参数的示例

   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);



//--- 布尔型输入参数的示例

   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");

  }