MetaEditor 帮助

智能管理

智能管理

为了轻松编程, MetaEditor 提供了各种工具,从自动替换函数名称和提示,到书签和 热键。 这些工具令您可以加快编写代码的过程,使导航更容易,并有助于防止错误。

本节介绍以下功能:

任何更改都可以撤消撤销 撤销命令在 编辑 菜单里或在 标准 工具栏上, 或按 Ctrl+Z.

自动替换函数名称

当您编写程序代码时,MetaEditor 会自动为内置和自定义函数、常量、变量、类成员、关键字等提供可能的替换选项。 这加快了编写代码的速度。 例如,只要输入函数名称的第一个字母,就会立即打开含有相应名称的函数列表。 用键盘方向键选择适当的选项,然后按回车键:

名称列表

如果选项列表太大,多输入几个函数名称的字母。 若要手工调用列表,请单击列表名称 位于 编辑 菜单里的列表名称,或输入头几个字符后按 Ctrl+Space。

参数信息

编写代码时无需打开语言帮助即可看到函数签名。 要做到这一点,将光标放在开始括号之后,即开始描述函数参数的位置,然后单击参数信息 位于 编辑 菜单里的参数信息,或按 Ctrl+Shift+Space。 有关参数和函数返回值类型的信息显示在工具提示中:

参数信息

以下函数信息显示在上图中:

  • [2 之 1] 意即该函数调用选项有不同的参数。 若要在它们之间切换,请使用键盘上的方向键或鼠标左键单击提示行。
  • bool 指定函数的返回值类型。
  • ObjectSetInteger ― 函数名称。
  • (long chart_id, ... ) ― 列举可能的函数参数,在每个参数之前指定一个类型 (此处是 "long")。 光标当前所在的参数以粗体显示。

移动到定义

该工具允许您快速导航到选定函数或变量的声明或定义,以及头文件 ("#include")。 如果某个参数的声明或定义在另一个文件中,则会打开该文件并将光标移到相应的位置。

要移至参数,请将光标放在其名称上并单击跳转到定义 位于 编辑 菜单里的跳转到定义,或按 Alt+G。 若要移动到头文件,请将光标放置在声明行 (#include 指令) 的任意位置并执行上述命令。

函数列表

该工具允许您查看当前文件中所有已声明函数的列表。 若要打开列表,请单击函数列表 位于 编辑 菜单里的函数列表,或按 Alt+M。

函数列表

函数参数在其名称右侧的括号中指示。 若要跳转到该函数,请在列表中单击其名称。 列表中的每个函数都由其图标标记:

  • 函数 ― 函数。
  • 事件处理函数 ― 事件处理函数 (On*)。
  • 公有类方法 ― 公有类方法 (public)。
  • 保护类方法 ― 保护类方法 (protected).
  • 私有类方法 ― 私有类方法 (private).

插入注释

为了简化程序代码中的注释工作,请在 编辑 菜单里和 标准 工具栏里使用函数编号:

  • 函数标题 函数标题 ― 为函数插入空白注释;
  • 注释块 注释块 ― 插入单行注释符号;
  • 注释行 注释行 ― 在选定的每行开头插入 "//" 注释;
  • 取消注释行 取消注释行 ― 从选定的每行开头删除 "//" 注释。

注释块注释块命令 (Ctrl+/) 在当前位置插入单行注释字符:

//---

函数标题函数标题 (Ctrl+.) 在当前光标位置为函数插入空白注释:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

附加的代码编辑功能

您可以轻松地将代码片段从程序的一部分移至另一部分。 要做到这一点,选取片段并将其推拽到必要位置 (Drag'n'Drop)。

在编辑菜单中的 高级 子菜单含有一系列简化源代码编辑的命令:

  • 增加行缩进 增加行缩进 ― 在所选行的开头插入三个空格 (制表符)。 若要在单行中插入空格,请将光标置于其开头。 若要在多行中插入空格,请全选。
  • 减少行缩进 减少行缩进 ― 在所选行的开头删除三个空格 (制表符)。 与按 Tab+Shift 热键执行相同的动作。
  • 转换为大写 变为大写 ― 将所选短语的所有字符转换为大写。 与按 Ctrl+Shift+U 热键执行相同的动作。
  • 转换为小写 转换为小写 ― 将所选短语的所有字符转换为小写。 与按 Ctrl+U 热键执行相同的动作。

使用书签

书签允许您快速跳转到代码的不同部分。 为所需行制作标签,并用 编辑 ― 书签 菜单命令和源代码关联菜单在它们之间导航:

  • 切换书签 切换书签 ― 根据当前状态启用/禁用当前行上的书签。 与按 Ctrl+F2 热键完成相同动作;
  • 下一个书签 下一个书签 ― 移到当前代码中的下一个书签。 与按 F2 热键完成相同动作;
  • 前一个书签 前一个书签 ― 移至当前代码中的前一个书签。 与按 Shift+F2 热键执行相同的动作;
  • 清除所有书签 清除所有书签 ― 从当前代码中删除所有书签。 与按 Ctrl+Shift+F2 热键完成相同动作。

MetaEditor 还有命名书签的功能 ― 为它们分配数字标识。 若要设置这种书签,按住 Ctr l的同时单击 0-9。 若要跳转到先前的设置,按住 Alt 键的同时按相应的数字。

跳转到行

若要快速跳转到当前文件中的任何代码行,请单击跳转到行 跳转到行在 搜索 菜单里或按 Ctrl+G。 以下窗口打开:

跳转到行

窗口显示当前文件中代码的行范围。 若要转到该行,请输入其号码并点击 ОК。

片段

代码片段是描述某些 MQL4/MQL5 语言构造的源代码小模板片段。 它们令编写源代码变得更简单快捷。 例如,它们允许您快速将工件添加到程序代码来描述一个类或循环。 要做到这一点,只需输入一个关键词 ― 'class' 或 'for'。 光标变为可以添加代码片段意即现在可以插入一个代码片段。 按 Tab 键,相应地将一个空白的类或 'for' 循环插入到程序代码中。

示例代码片段

为了在有效代码片段域 (此处,这些是名称,类构造器和析构器) 之间切换,请使用 Tab 和 Shift+Tab。

更改一个有效代码域会自动更改其余部分。 例如,在更改类名称时,构造函数和析构函数名称也会自动更改。 当更改 'for' 循环表达式中的某个变量名时,其它表达式中的变量也会更改。

使用代码片段的系统还可以识别已经描述的结构、类、枚举、方法和函数。 将光标放置在相应结构的描述中,然后按 Ctrl+Enter。 之后,您可以使用 Tab 和 Shift+Tab 键在成员 (类、结构和枚举) 和参数 (方法和函数) 之间导航,并如上述一同编辑它们。

目前支持以下代码片段:

关键字

#import

导入声明。

OnBookEvent

OnBookEvent 处理器。

OnCalculate

OnCalculate 处理器。

case

'case' 选择符。

OnChartEvent

OnChartEvent 处理器。

class

类声明。

OnDeinit

OnDeinit 处理器。

do

'do while' 循环的声明。

enum

枚举的声明。

for

'for' 循环的声明。

if

'if' 条件的声明。

else

'else' 条件的声明。

OnInit

OnInit 处理器。

OnStart

OnStart 处理器。

struct

结构声明。

switch

'switch' 选择器。

OnTester

OnTester 处理器。

OnTesterInit

OnTesterInit 处理器。

OnTesterPass

OnTesterPass 处理器。

OnTesterDeinit

OnTesterDeinit 处理器。

OnTick

OnTick 处理器。

OnTimer

OnTimer 处理器。

OnTrade

OnTrade 处理器。

OnTradeTransation

OnTradeTransation 处理器。

while

'while' 循环的声明。

插入资源

命令来自 编辑 ― 插入 菜单,允许快速插入资源文件,从而可以促进应用程序的开发。

选项如同 #property

在当前位置插入 #property 指令可以立即打开语言中所有程序属性 的列表。

BMP/WAV 作为 #resource

若要在程序资源添加图片或声音文件,请运行该指令并选择BMP或WAV文件(文件必须在\MQL5 目录中)。已选文件相应路径的#resource指令将被插入到程序的当前位置。

#resource "\\Images\\image.bmp"

DLL/EX5 作为 #import

通过执行这个命令和选择合适的文件,您可以从外部程序库或EX5/EX4文件导入函数(文件必须位于\MQL5目录)。已选文件相应路径的一对#import指令将被插入到程序的当前位置。

#import "..\Experts\SendNotification.ex5"
 
#import

在两个指令中间添加已导入函数的描述。

MQH 作为 #include

若要在程序代码中插入包含文件,请运行这个命令并选择一个MQH文件(相应的文件必须位于\MQL5目录)。已选文件相应路径的#include指令将被插入到程序的当前位置。

#include <Arrays\Array.mqh>

一组参数作为 #property

若要向程序代码插入一组用于智能交易系统测试的参数,请运行此命令并选择一个 SET 文件 (相应的文件必须存储在 \MQL5 目录中)。 含有所选文件正确路径的 #property 指令将插入到程序的当前位置。

#property tester_set "\\Profiles\\Tester\\Moving Average.set"

文件作为二元数组

这个命令允许您以二元数组的形式向程序文本添加任何文件。运行这个命令并选择所需的文件(相应的文件必须位于 \MQL5 目录)。char 数组将被插入到程序的当前位置。

此外,这个函数还允许您使用EA或指标传输图表模板:在程序代码中插入您的模板作为一个数组,然后使用 FileSave 函数将其保存到磁盘。在此之后,可以使用 ChartApplyTemplate 函数将模板应用到所需的图表上。

//+------------------------------------------------------------------+
//| 脚本程序起始函数                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 一个模板文件作为二进制数组
   unsigned char my_template[]=
     {
      0xFF,0xFE,0x3C, ... ,0x00 //缩短本例中的数据数组
     };
//--- 保存并应用模板
   if(FileSave("my_template.tpl",my_template))
     {
      Print("自定义模板保存在 \\MQL5\\Files");
      if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
         Print("自定义模板应用于当前图表");
      else
         Print("应用自定义模板失败");
     }
   else
      Print("保存自定义模板失败");
  }

CSV 作为文本数组

若要在程序代码添加文本文件的数据,请运行该命令并选择 TXT 或 CSV 文件(文件必须在 \MQL5 目录中)。包含文件数据所需维度的字符串数组将被插入到当前程序位置:

string data[][3]=
  {
   {"name1","value1"},
   {"name2","value2"},
   {"name3","value3"}
  };

文本转换

MetaEditor允许您轻松转换源数据的格式。打开所需的文件,选择文本并执行一条来自 编辑 ― 转换 菜单的命令:

  • ASCII 到 HEX
  • ASCII 到 Base64
  • ASCII 到二元数组
  • HEX 到 ASCII
  • Base64 到 ASCII