输入变量
启动时,MQL5 中的所有程序都可以向用户查询参数。唯一例外是库,库无法独立执行,而是作为其他程序的一部分(参见相关章节以详细了解 库)。
MQL 程序的输入参数是在代码中描述的全局变量,这些变量具有一个特殊修饰符 input 或 sinput。用户可以在程序特性对话框使用它们输入值。我们在第一章的脚本中看到了 GreetingHour 输入变量的说明。
输入变量的一个特殊特性是它们的值不能在程序代码中更改,即其表现与常量相似。
输入变量只能是简单的内置或枚举类型。对于枚举,通过下拉列表输入值;在所有其他情况下则使用输入字段输入值。不允许将以下类型描述为 input: 数组, 结构体或联合体以及 类。
开发人员可以设置不同于变量标识符的输入参数名称。该名称将在程序特性对话框中显示给用户。定义输入参数时,应添加详细说明(单行字符串注释)。
input int HourStart = 0; // Start of trading (hour, including):
|
这会让界面对用户更友好、详细,并且不受 MQL5 对 标识符的语法约束。此外,名称(以及注释)可以是您的母语。
比如,MetaTrader 5 自带 MQL5/Indicators/Examples/Custom Moving Average.mq5 指标源代码,其中包含以下输入变量:
input int InpMAPeriod = 13; // Period
|
该说明会生成以下特性对话框。
MQL 程序特性对话框示例
输入变量的文本表示(格式为“标识符 = 值”对),其最大长度(包括字符 "=")不得超过 255 个字符(该约束由终端和测试代理的内部数据交换协议施加)。这个限制对于字符串变量尤其重要,因为其他类型的值长度永远不会超过字符串变量。我们知道,标识符长度被限制为 63 个字符;因此,根据标识符长度,输入字符串变量的值可以占用 191 至 253 个字符。超过组合阈值(255 个字符)的完整文本在传输到测试程序时可能会被截断。如果需要在 MQL 程序中输入一个更长的字符串,请使用多个输入字段(后面会介绍)或允许用户指定文件的名称,编译器从这个文件中读取文本。
为了方便操作 MQL 程序,可以使用 group 关键字将输入与命名代码块组合(组字符串结尾无需分号)。
input group "group_name"
|
对于组说明后(直到另一个组的说明或文件结尾)带有 input 修饰符的所有变量,在 MQL 程序的特性对话框中以嵌套列表形式显示在组标题下面。此外,在适用于指标和 EA 的策略测试程序中,通过鼠标点击可以展开或折叠参数组。
sinput 关键字是 static input 的缩写,两种形式是等效的。
使用 sinput 和 static input 修饰符描述的变量不能进行优化。这两个修饰符只有在 EA 交易中使用时才有意义,因为 EA 交易是唯一支持优化的 MQL 程序类型。有关更多详细信息,请参见涉及 测试和优化 EA 交易的章节。