Appearance
数据输入
在MQL程序中,数据传输的基本方式是使用输入参数。这些参数在许多方面类似于函数参数和变量,特别是在描述语法和代码中使用原则方面。
输入参数的特点
输入参数的描述有几个重要区别:
- 位置要求
必须放置在所有代码块之外(即不包含在任何大括号{}
内),通常在源代码开头; - 关键字
使用input
关键字声明; - 默认值
必须初始化默认值。
建议将输入参数放在源代码起始位置,紧接在#property
指令之后。
示例代码
cpp
#property script_show_inputs
input int GreetingHour = 0;
关键特性说明
- 全局变量
GreetingHour
成为全局变量,可在代码任何位置(包括函数内部)访问; - 用户界面可见性
使用input
关键字后,该参数会显示在MQL5程序的属性对话框中,用户可在启动时修改值; - 默认值机制
代码中指定的默认值会显示在对话框中,但用户修改后的新值将覆盖默认值; - 程序类型差异
指标(Indicators)和专家顾问(Expert Advisors)会记住最后一次设置,而脚本(Scripts)需要在代码中添加#property script_show_inputs
指令才能显示参数对话框。
运行时错误示例
当在Greeting
函数中使用输入参数时:
cpp
void OnStart()
{
Print(Greeting(GreetingHour), ", ", Symbol());
}
如果用户输入100
作为小时数,将触发数组越界错误:
GoodTime1 (EURUSD,H1) array out of range in 'GoodTime1.mq5' (19,18)
错误说明:
程序试图访问数组中不存在的索引位置(第19行第18列),这是因为Greeting
函数中的时间判断逻辑未处理非法值。
注意:错误调试是编程的重要环节,需要学会定位和修复这类运行时错误。
参数对话框示例
(原图描述:显示脚本GoodTime1.mq5的参数输入对话框)
当脚本启动时,用户可在此对话框修改GreetingHour
的值。例如:
- 输入
10
会输出:"Good afternoon, EURUSD" - 输入
100
会导致数组越界错误
最佳实践
- 始终为输入参数设置合理的默认值
- 在脚本中必须添加
#property script_show_inputs
指令 - 在代码中添加参数合法性检查
- 不同程序类型要注意参数持久化特性的差异