ChartApplyTemplate

在图表中应用指定文件中的特定模板。该命令添加到图表信息队列并且将在处理完之前所有命令后开始执行。

bool  ChartApplyTemplate(
   long          chart_id,     // 图表 ID
   const string  filename      // 模板文件名
   );

参量

chart_id

[in]  图表 ID. 0 意味着当前图表。

filename

[in]  包括模板的文件名。

返回值

如果该命令已添加到图表队列则返回true,否则false。若获得额外错误信息,需要调用函数GetLastError()

注释

成功加载新模板时EA交易会被卸载且不能再继续操作。

当将模板应用到图表时,处于安全原因可能会限制交易权限:

实时交易权限不能扩展到通过使用ChartApplyTemplate()函数应用模板的EA交易。

如果调用ChartApplyTemplate()函数的mql5-程序没有交易权限,那么无论模板如何设置,通过模板启动的EA交易都将不能交易。

如果调用ChartApplyTemplate()函数的mql5-程序有交易权限,而在模板设置中没有这种权限,那么通过模板启动的EA交易将不能交易。

使用模板

MQL5语言资源允许使用ChartSetInteger()函数设置多个图表属性,包括颜色:

  • 图表背景色;
  • 坐标轴,比例和OHLC线的颜色;
  • 网格颜色;
  • 交易量和持仓水平的颜色;
  • 牛市蜡烛图的上柱,阴影和边界的颜色;
  • 熊市蜡烛图的下柱,阴影和边界的颜色;
  • 图表线和Doji蜡烛图的颜色;
  • 牛市蜡烛图主体的颜色;
  • 熊市蜡烛图主体的颜色;
  • 卖价线的颜色;
  • 买价线的颜色;
  • 最后成交价线(收盘价)的颜色;
  • 止损订单水平的颜色(止损和获利)。

此外,在图表上可以有多个图形对象指标。您可以一次性以所有需要的指标设置图表,然后将其保存为模板。这种模板可以应用于任何图表。

ChartApplyTemplate() 函数意于使用之前保存的模板,并且它可以用在任何mql5程序。通过存储模板的文件路径作为ChartApplyTemplate()函数的第二参数。模板文件根据以下规则搜索:

  • 如果反斜杠 "\" 分隔符(写为"\\")位于路径开始,寻找 _terminal_data_directory\MQL5相对路径的模板,
  • 如果没有反斜杠,则寻找调用ChartApplyTemplate()的可执行EX5文件相对的模板;
  • 如果在前两个变量没有找到模板,搜索就在terminal_directory\Profiles\Templates\文件夹下执行。

这里terminal_directory是MetaTrader 5客户端运行的文件夹,terminal_data_directory是存储可编辑文件的文件夹,它的位置取决于操作系统,用户名和计算机安全设置。通常它们是不同的文件夹,但某些情况下它们可能会同时发生。

文件夹terminal_data_directory和terminal_directory的位置可以使用TerminalInfoString()函数获取。

//--- 启动程序端的目录
   string terminal_path=TerminalInfoString(TERMINAL_PATH);
   Print("Terminal directory:",terminal_path);
//--- 程序端数据目录,这里存储MQL5的EA和指标文件夹
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   Print("Terminal data directory:",terminal_data_path);

例如:

//--- 在terminal_data_directory\MQL5\搜索模板
ChartApplyTemplate(0,"\\first_template.tpl"))
//--- 在directory_of_EX5_file\搜索模板, 然后在文件夹terminal_data_directory\Profiles\Templates\
ChartApplyTemplate(0,"second_template.tpl"))
//--- 在directory_of_EX5_file\My_templates\搜索模板,然后在文件夹terminal_directory\Profiles\Templates\My_templates\
ChartApplyTemplate(0,"My_templates\\third_template.tpl"))

模板不是资源,它们不能被包含到可执行EX5文件。

示例:

//+------------------------------------------------------------------+
//| 脚本程序启动函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 应用模板示例,位于\MQL5\Files
   if(FileIsExist("my_template.tpl"))
     {
      Print("The file my_template.tpl found in \Files'");
      //--- 应用模板
      if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
        {
         Print("The template 'my_template.tpl' applied successfully");
         //--- 重绘图表
         ChartRedraw();
        }
      else
         Print("Failed to apply 'my_template.tpl', error code ",GetLastError());
     }
   else
     {
      Print("File 'my_template.tpl' not found in "
            +TerminalInfoString(TERMINAL_PATH)+"\\MQL5\\Files");
     }
  }

另见

资源