Appearance
数据输出
在我们的脚本案例中,数据输出通过使用Print
函数将问候语记录到日志中来实现。必要时,MQL5允许将结果保存到文件和数据库、通过互联网发送,并显示为图形序列(在指标中)或图表上的对象。
即时信息显示
若需要向用户传递简单的即时信息,且不希望用户查看日志(日志是用于监控程序运行的服务工具,可能被隐藏于屏幕外),最简单的方式是使用MQL5 API函数Comment
。它的用法与Print
完全相同。不过,执行该函数后文本不会显示在日志中,而是出现在当前图表的左上角。
例如,在脚本中将Print
替换为Comment
后,我们可以得到以下Greeting
函数:
c++
void OnStart()
{
Comment(Greeting(GreetingHour), ", ", Symbol());
}
在终端中运行修改后的脚本后,效果如下:
警报通知
若需要同时向用户显示文本信息并提醒其注意环境变化(如新的交易信号或需要人工干预的突发事件),最好使用Alert
函数。它会将通知发送到独立的终端窗口,该窗口会弹出在主窗口上方,并伴随声音提示。
Alert
的语法与Print
和Comment
完全相同。
下图展示了Alert
函数的运行效果:
注意
本书未附赠使用Comment
和Alert
函数的脚本版本,建议读者自行编辑GoodTime2.mq5
文件进行尝试,并复现本文提供的截图效果。
功能对比表
函数 | 输出位置 | 特点 | 适用场景 |
---|---|---|---|
Print | 终端日志 | 静默记录 | 日常运行日志记录 |
Comment | 图表左上角 | 实时可见 | 即时状态显示 |
Alert | 弹出窗口+声音提示 | 强提醒功能 | 重要事件通知 |
代码示例扩展
以下是使用三种输出方式的完整示例:
c++
// 定义问候时段枚举
enum ENUM_GREETING_HOURS {
MORNING = 6,
DAY = 12,
EVENING = 18,
NIGHT = 0
};
// 获取问候语函数
string Greeting(int hour)
{
if(hour >= 6 && hour < 12) return "早上好";
if(hour >= 12 && hour < 18) return "下午好";
if(hour >= 18 && hour < 24) return "晚上好";
return "晚安";
}
void OnStart()
{
// 获取当前小时(演示用固定值)
int demoHour = 9;
// 三种输出方式演示
Print("[日志] ", Greeting(demoHour)); // 输出到日志
Comment(Greeting(demoHour), ",当前品种:", Symbol()); // 图表显示
Alert("注意!", Greeting(demoHour), "交易信号"); // 弹出警报
}
操作建议
建议在策略测试器中运行不同版本,观察:
- 日志输出在"专家"标签页
- 图表注释实时更新
- 警报窗口的弹出位置和声音提示(需启用终端通知设置)