下载MetaTrader 5

输入变量

输入存储类称作外部变量。input修饰符位于数据类型前。输入修饰符变量不可以在mql5程序中修改,只能只读访问这个变量。用户只能通过程序属性窗口改变输入变量值。

示例:

//--- 输入参量
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

输入变量决定程序的输入参数。可以在程序属性窗口中得到。

Set a value for an input parameter

 

输入标签中可以通过其他方法显示输入参数名。使用字符注解,放在同行输入参数描述后。因此对于用户来说,与名字匹配的参数更容易理解。

示例:

//--- 输入参量
input int            InpMAPeriod=13;         // 平滑周期
input int            InpMAShift=0;           // 水平移动行
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // 平滑函数

Reasonable method to display input parameters

注:Note: A复合型数组和变量不能作为输入变量。

MQL5程序访问自定义指标时传送参数

iCustom()函数访问自定义指标。其名后,参数要与该指标声明的输入变量严格一致。如果参数少于变量,缺失的参数要在变量声明时用特殊值填满。

如果自定义指标使用第一型的OnCalculate函数(例如用同数据数组计算的指标),那么ENUM_APPLIED_PRICE 值或者其他指标处理程序作为访问这个自定义指标的上一个参数被使用。与输入变量一致的所有参赛必须清楚指明。

计数作为输入参数

MQL5提供得嵌入计数和用户指定的变量都可以用作输入变量(mql5程序的输入参数)。例如,可以创建dayOfWeek计数,描述一周的天数,使用输入变量指定某一天,不是数字,用更通常的方法。

示例:

#property script_show_inputs
//--- 一周内每天
enum dayOfWeek 
  {
   S=0,     // 周日
   M=1,     // 周一
   T=2,     // 周二
   W=3,     // 周三
   Th=4,    // 周四
   Fr=5,    // 周五,
   St=6,    // 周六
  };
//--- 输入参量
input dayOfWeek swapday=W;

脚本启动时,为使用户从属性窗口选择必要的值,使用预处理命令#property script_show_inputs。启动脚本并从列表中选择一个dayOfWeek列举值。启动EnumInInput脚本然后去输入标签。默认情况下,swapday值(三个交换日)是周三(W=3),但可以指定另一个值,用这个值改变程序操作。

Example of a custom enumeration as an input parameter

列举值有限。因此,若要选择输入值,需使用下拉列表。为列表中显示的值使用列举助记名。如果注释和助记名有关,正如示例显示,注释内容代替助记名。

每个dayOfWeek计数值都是0-6,但是参数列表中,显示每个值的注释。明确描述输入参数使编程更灵活。

 

Sinput变量修饰符

输入变量修饰符不仅允许启动程序时设置外部参数值也是策略测试中优化交易策略时所必须的。每个不包括字符串类型的输入变量可用于优化。

有时,需要从测试的所有通过的区域排除一些外部程序参数。这种情况下,就会引入sinput内存修饰符。sinput代表静态外部变量声明(sinput =静态输入)。这意味着EA交易代码的以下声明。

sinput       int layers=6;   // 层数

将相当于全面声明

static input int layers=6;   // 层数

Sinput修饰符声明的变量是MQL5程序的一个输入参数。当启动程序时可以更改该参数的值。然而,这个变量不用于输入参数的优化。换句话说,当寻找适合指定条件的最好的一组参数时不会枚举它的值。

sinput parameter in the Strategy Tester

上面所示的EA交易有5个外部参数。“层数”声明输入并等于6。交易策略优化期间该参数不能改变。我们可以指定必要的值用于进一步使用。开始,步骤和停止字段都不可用于这样的一个变量。

因此,为变量指定sinput修饰符之后用户将无法优化该参数。换句话说,程序端用户将无法在策略测试为其设置初始和最终值用于优化期间指定范围的自动枚举。

然而,该规则有一个例外:sinput变量可以使用ParameterSetRange()函数在优化任务中有所不同。这个函数的引入是专门用于任何输入变量可用值集的程序控制,包括声明为静态输入(sinput)的变量。ParameterGetInput()函数允许接收优化启动(在OnTesterInit()处理程序)时的输入变量值和重置步骤变化值和范围,在这范围内将会枚举优化参数值。

通过这种方式,结合sinput修饰符和输入参数使用的两个函数,根据另一个输入参数值,允许创建一个灵活的设置输入参数优化间隔的规则,。

另见

i自定义计数程序属性


更新: 2015.12.03