SQLite 数据库

MetaTrader 5 原生支持 SQLite 数据库。它是一款轻量级但功能齐全的数据库管理系统 (DBMS)。传统上,此类系统专注于处理数据表,数据表存储着具有一组共同属性的同类型记录,并且不同类型(即不同表)的记录之间可以建立各种对应关系(链接或关联),因此这类数据库也被称为关系型数据库。我们已经探讨过 经济日历结构之间此类连接的示例,但日历数据库存储在终端内部,而本节的函数将允许你从 MQL 程序创建任意数据库。

DBMS 在这些数据结构上的专业化使其能够优化(加速和简化)许多常用操作,例如对大量数据进行排序、搜索、筛选、汇总或计算其他聚合函数。

然而,这也有另一面:DBMS 编程需要其自身的 SQL(结构化查询语言),仅掌握纯 MQL5 是不够的。与 MQL5(属于imperative语言,即使用运算符指示做什么、如何做、按什么顺序做)不同,SQL 是declarative,也就是说,它描述初始数据和期望的结果,而不指定如何以及按什么顺序执行计算。SQL 中算法的含义以 SQL 查询的形式描述。查询类似于一个单独的 MQL5 运算符,是使用特殊语法形成的字符串。

我们无需编写复杂的循环和比较,只需通过向 SQLite 函数(例如 DatabaseExecuteDatabase Prepare)传递 SQL 查询即可调用它们。要将查询结果获取到现成的 MQL5 结构体中,你可以使用 DatabaseReadBind 函数。这样,你可以在一次调用中读取记录(结构体)的所有字段。

借助数据库函数,可以轻松创建表、向其中添加记录、进行修改,并根据复杂条件进行选择,例如,用于以下任务:

  • 获取交易历史和报价
  • 保存优化和测试结果
  • 准备数据并与其他分析软件包交换
  • 分析经济日历数据
  • 存储 MQL5 程序的设置和状态

此外,SQL 查询中还可以使用广泛的通用、统计和数学函数。而且,即使不创建表,也可以计算包含它们的表达式。

SQLite 不需要单独的应用程序、配置和管理,对资源要求不高,并支持流行的 SQL92 标准的大多数命令。另一个便利之处在于,整个数据库驻留在用户计算机硬盘上的单个文件中,并且可以轻松传输或备份。然而,为了加快读、写和修改操作,也可以使用 DATABASE_OPEN_MEMORY标志在 RAM 中打开/创建数据库,但在这种情况下,这样的数据库将仅对此特定程序可用,不能用于多个程序的协同工作。

务必注意,与功能齐全的 DBMS 相比,SQLite 的相对简单性也带来了一些限制。特别是,SQLite 没有一个专门的进程(系统服务或应用程序)来提供对数据库和表管理 API 的集中访问,这就是为什么不能保证不同进程对同一数据库(文件)的并行、共享访问。因此,如果需要从执行相同 EA 交易实例的优化代理同时对数据库进行读写,将需要在其中编写代码来同步访问(否则,正在写入和读取的数据将处于不一致状态:毕竟,并发非同步进程的写入、修改、删除和读取顺序是随机的)。此外,同时更改数据库的尝试可能会导致 MQL 程序收到“数据库繁忙”的错误(并且不会执行请求的操作)。唯一不需要同步 SQLite 并行操作的场景是仅涉及读取操作时。

我们将仅介绍开始应用 SQL 所必需的基础知识。SQL 语法和工作原理的完整描述超出了本书的范围。请查阅 SQLite 站点的文档。然而,请注意 MQL5 和 MetaEditor 仅支持命令和 SQL 语法结构的有限子集。

MQL Wizard MetaEditor 中的向导有一个用于创建数据库的嵌入式选项,它会立即提议通过定义字段列表来创建第一个表。此外,Navigator提供了一个用于处理数据库的单独选项卡。

使用WizardNavigator的上下文菜单,你可以创建一个包含受支持格式(*.db、*.sql、*.sqlite 等)的空数据库(磁盘上文件,默认情况下放置在 MQL5/Files 目录中)。此外,在上下文菜单中,你可以从 sql 文件导入整个数据库,或从 csv 文件导入单个表。

现有或创建的数据库可以通过同一菜单轻松打开。之后,其表将出现在Navigator中,窗口的右侧主区域将显示一个包含用于调试 SQL 查询的工具和结果表的面板。例如,双击表名会执行对所有记录字段的快速查询,这对应于顶部输入字段中出现的 "SELECT * FROM 'table'" 语句。

在 MetaEditor 中查看 SQLite 数据库

在 MetaEditor 中查看 SQLite 数据库

你可以编辑请求并单击Execute按钮以激活它。可能的 SQL 语法错误会输出到日志中。

有关Wizard、数据库的导入/导出以及与它们进行交互式工作的更多详细信息,请参阅 MetaEditor 文档

该网站使用cookies。了解有关我们Cookies政策的更多信息。