Skip to content

数据输出

在我们的脚本案例中,数据输出通过使用Print函数将问候语记录到日志中来实现。必要时,MQL5允许将结果保存到文件和数据库、通过互联网发送,并显示为图形序列(在指标中)或图表上的对象。

即时信息显示

若需要向用户传递简单的即时信息,且不希望用户查看日志(日志是用于监控程序运行的服务工具,可能被隐藏于屏幕外),最简单的方式是使用MQL5 API函数Comment。它的用法与Print完全相同。不过,执行该函数后文本不会显示在日志中,而是出现在当前图表的左上角。

例如,在脚本中将Print替换为Comment后,我们可以得到以下Greeting函数:

c++
void OnStart()
{
  Comment(Greeting(GreetingHour), ", ", Symbol());
}

在终端中运行修改后的脚本后,效果如下:

使用Comment函数在图表上显示文本信息

警报通知

若需要同时向用户显示文本信息并提醒其注意环境变化(如新的交易信号或需要人工干预的突发事件),最好使用Alert函数。它会将通知发送到独立的终端窗口,该窗口会弹出在主窗口上方,并伴随声音提示。

Alert的语法与PrintComment完全相同。

下图展示了Alert函数的运行效果:

使用Alert函数显示通知

注意
本书未附赠使用CommentAlert函数的脚本版本,建议读者自行编辑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), "交易信号");  // 弹出警报
}

操作建议
建议在策略测试器中运行不同版本,观察:

  1. 日志输出在"专家"标签页
  2. 图表注释实时更新
  3. 警报窗口的弹出位置和声音提示(需启用终端通知设置)