跳至内容

Input Variables

输入变量

输入存储类定义了外部变量。输入修饰符位于数据类型之前。带有输入修饰符的变量在 mql4-程序内部无法更改,只能用于读取。输入变量的值只能通过程序属性窗口由用户更改。外部变量在调用OnInit()之前会立即重新初始化。

示例:

//--- input parameters
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

输入变量决定了程序的输入参数。它们可以从程序的属性窗口中获取。

为输入参数设置值

还有另一种方式可以在 Inputs 选项卡中设置输入参数的外观。为此,在同一行中,在输入参数的描述之后放置一个字符串注释。这样可以使输入参数的名称对用户更易于理解。

示例:

//--- input parameters
input int            InpMAPeriod=13;         // Smoothing period
input int            InpMAShift=0;           // Line horizontal shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Smoothing method

显示输入参数的合理方法

注意:数组和复杂类型的变量不能作为输入变量使用。

注意:输入变量的字符串注释长度不得超过 63 个字符。

在 MQL4 程序中调用自定义指标时传递参数

自定义指标使用iCustom()函数调用。自定义指标的名称之后,参数应按照该自定义指标的输入变量声明严格匹配。如果指定的参数少于被调用的自定义指标中声明的输入变量,则缺少的参数将用变量声明时指定的值填充。

如果自定义指标使用第一种类型的OnCalculate函数(即,指标使用相同的数据数组计算),那么在调用此类自定义指标时,最后一个参数应使用ENUM_APplied_PRICE值或另一个指标的处理器。所有与输入变量对应的参数必须明确指示。

枚举作为输入参数

不仅是 MQL4 提供的内置枚举,用户定义的变量也可以用作输入变量(mql4 程序的输入参数)。例如,我们可以创建描述一周中每天的 dayOfWeek 枚举,并使用输入变量以更常见的方式指定特定的一天,而不是数字。

示例:

#property script_show_inputs
//--- day of week
enum dayOfWeek
  {
   S=0,     // Sunday
   M=1,     // Monday
   T=2,     // Tuesday
   W=3,     // Wednesday
   Th=4,    // Thursday
   Fr=5,    // Friday,
   St=6,    // Saturday
  };
//--- input parameters
input dayOfWeek swapday=W;

为了允许用户在脚本启动期间从属性窗口中选择所需值,我们使用预处理器命令#property script_show_inputs。我们启动脚本并从列表中选择 dayOfWeek 枚举中的一个值。我们启动 EnumInInput 脚本并转到 Inputs 选项卡。默认情况下,swapday(三重交换收费的日子)的值是星期三(W = 3),但我们可以指定其他任何值,并使用此值来改变程序的操作。

自定义枚举作为输入参数的示例

枚举的可能值数量是有限的。为了选择输入值,使用下拉列表。枚举成员的助记词用于列表中显示的值。如果助记词名称附有注释,如本例所示,则使用注释内容代替助记词名称。

dayOfWeek 枚举的每个值都有从 0 到 6 的值,但在参数列表中会显示每个值的注释。这为编写具有清晰输入参数描述的程序提供了额外的灵活性。

带有 sinput 修饰符的变量

带有输入修饰符的变量不仅允许在启动程序时设置外部参数值,而且在策略测试器中优化交易策略时也是必需的。每个输入变量(字符串类型除外)都可以用于优化。

有时,需要排除一些外部程序参数在所有测试中的使用。sinput 内存修饰符就是为了这种情况而引入的。sinput 代表静态外部变量声明(sinput = 静态输入)。这意味着专家顾问代码中的以下声明

sinput       int layers=6;   // Number of layers

将等同于完整的声明

static input int layers=6;   // Number of layers

用 sinput 修饰符声明的变量是 MQL4 程序的输入参数。在启动程序时可以改变此参数的值。然而,这个变量不用于输入参数的优化。换句话说,在寻找符合特定条件的参数集时,其值不会枚举。

Strategy Tester 中的 sinput 参数

上面显示的专家顾问有 5 个外部参数。“层数”被声明为 sinput 且等于 6。此参数在交易策略优化期间无法更改。我们可以指定所需的值以供后续使用。开始、步长和停止字段不适用于此类变量。

因此,当我们为变量指定 sinput 修饰符后,用户将无法优化此参数。换句话说,终端用户无法在 Strategy Tester 中设置初始和最终值,以便在优化过程中自动枚举指定的范围。

然而,有一个例外:可以使用 ParameterSetRange() 函数在优化任务中更改 sinput 变量。该函数专门用于控制任何输入变量的可用值集,包括声明为静态输入(sinput)的变量。ParameterGetInput() 函数允许在启动优化时接收输入变量的值,并重置变化步长和范围,在此范围内优化的参数值将被枚举。

通过这种方式,结合使用 sinput 修饰符和两个处理输入参数的函数,可以创建灵活的规则来设置输入参数的优化间隔,这些规则取决于其他输入参数的值。

另请参阅

iCustom枚举程序属性

最后更新于