English Русский Español Deutsch 日本語 Português
MQL5 对决 QLUA - 为什么在 MQL5 中交易操作速度快达 28 倍?

MQL5 对决 QLUA - 为什么在 MQL5 中交易操作速度快达 28 倍?

MetaTrader 5示例 |
5 540 69
MetaQuotes
MetaQuotes

您可曾想过您的订单是如何迅速传递到交易所, 它的执行速度如何, 而您的终端需要多久才能收到操作结果?

同时, 有一种提高订单执行品质的方法, 即通过接收一个更快的响应和实现更快的业务速度。

2016 年 9 月 12 日, 我们在 "Otkrytie" 经纪商提供的一个实盘账户里同步运行三个速度测试, 终端则为 MetaTrader 5 集成编译 1415 和 Quik 7.2.23。每次测试瞄准的目标是衡量速度特征, 这对算法交易很重要。:
  1. 同步操作测试 — 一系列 10 次同步连续买入操作, 在交易所执行的每笔业务均成功确认。暂停执行下一个操作, 直到收到来自交易服务器确认的先前在交易所的操作已执行或未执行的响应。执行速度依赖整个链条: 终端 — 交易服务器 — 交易所 — 交易服务器 — 终端。同步交易操作的平均时间越小越佳。
  2. 异步操作测试 — 一系列 10 次异步买入操作, 无需任何业务执行成功的确认。它是一个纯速率测试, 其衡量的是订单发送到交易所有多快。最好的终端是能够更快执行 10 次异步买入操作的那个。
  3. 订单盘口更新 — 衡量市场深度内的订单 (订单盘口) 更新速度有多快。这是一个简单的单位时间内市场深度逐笔报价 (更新) 计数器。终端从交易所接收到的报价越频繁, 订单盘口更新越快。因此, 自动交易应用每秒接收的逐笔报价越多, 它对市场需求/供给结构的变化响应越快。最好的终端是订单盘口更新速度更快的那个。


测试条件

两个终端安装在一台位于莫斯科的 VPS主机上, 就像 "Otkryite" 经纪商的交易服务器。交易操作的执行使用同一个莫斯科交易所衍生品市场的真实账户; 交易工具是 Si-9.6。

我们拍摄了三次测试的视频以便轻松分析:

  1. 交易操作都在同一个真实账户进行
  2. 交易同样的金融工具 Si-9.16
  3. 使用相同的计算机
  4. 交易操作是在同一时间执行
  5. 同样的市场条件
  6. 市场深度 (订单盘口) 的更新速度在同一工具上相同
  7. 连接经纪商服务器的网络延迟为 2 毫秒

交易操作速度结果: MetaTrader 5 对决 QUIK

三次试验的结果详情列于汇总表, 每次测试的附加详细结果列于稍后的章节。

测试
MetaTrader 5
QUIK
MT5 领先
同步操作平均时间
9.59 毫秒277.80 毫秒28.96 倍
异步操作平均时间0.09 毫秒0.30 毫秒 3.33 倍
市场深度更新速度
42.7 次每秒8.4 次每秒5.08 倍

如您所见, MetaTrader 5 在所有测试中展示了更胜一筹。您可使用附带的源代码重现同样的测试。测试过程展示于以下的视频里。

交易速度对比视频



结论:  MetaTrader 5 执行交易操作的速度比 QUIK 要快高达 28 倍。

这些测试表明, MQL5 语言在莫斯科交易所执行交易操作时, 以及扫描市场深度时, 比 QLUA 更快捷。除了执行 计算快速 50-600 倍, MQL5 的交易机器人速度也快捷高达 28 倍。还有, 开发工具的整体完备, 无需使用额外的连接器, DLL, 等等。您可以使用来自标准库, 以及有关自动交易的 大量文章 里的现成 交易类

一个健壮的交易机器人必须检查交易发送的结果; 即, 它必须等待来自交易服务器的响应。测试已经证明, MetaTrader 5 在执行同步操作时明显更快。如果您需要使用异步操作, 您可以在 MetaTrader 5 里获得 3 倍速度提升。如果您需要分析订单盘口, MetaTrader 5 将为您提供 5 倍快速报价流的优势, 没有遗漏。

这些测试也证明了 MQL5 语言是创建快速执行的自动交易系统的理想解决方案。即使 QUIK 终端使用旨在加速计算的额外连接器或代码库, 也不会有太多帮助, 因为瓶颈在于交易操作的执行时间。

现在让我们来分析枯燥而重要的测试细节。

MetaTrader 5 对决 QUICK 的详尽比较报告

在 QLUA 里的一款应用通过调用操作系统计时器, 以省缺分辨率 10…15.6 毫秒 (通常是 15.6 毫秒) 测量时间。我们不得不改进 QLUA 的测量时间精度, 即简单地降低系统计时器分辨率为 1 毫秒。这可通过脚本 SpeedupSystemTimer.mq5 来完成, 其调用系统库 Winmm.dll 的 timeBeginPeriod function

#import "winmm.dll"
int timeBeginPeriod(uint per);
#import

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }


我们在 MetaTrader 5 里允许 DLL 调用, 并在开始测试之前运行脚本, 此结果会导致 QUIK 的操作测量误差不超过 1 毫秒。

MQL5 语言提供了一个现成的函数 GetMicrosecondCount(), 因此在 MetaTrader 5 终端里速度测量的精度是 1 微秒 (1 微秒=1000 豪秒)

#1 同步交易操作速度

测试隐含测量同步交易操作的速度, 即交易操作只能在收到交易服务器从交易所得到之前的操作成功执行的完全确认后返回的响应时才可执行。

首先, 一系列的交易操作通过 MetaTrader 5 终端执行, 然后通过 QUIK 终端执行同一系列。

测试的目的是测量 10 次同步市价买入 1 手操作的平均时间:

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

执行一次同步操作所花费的时间测量如下:

  • MQL5 语言提供同步 OrderSend 函数, 时间可在交易系列的开始和结尾处轻易地测量。

  • QLUA 语言没有提供同步交易函数, 因此业务的状态应单独监视。使用 os.closck() 函数调用 sendTransaction() 之前正确记录操作开始时间。首次调用内置的 OnOrder() 处理器期间, 当收到交易所关于交易执行的事件时, 监视到业务成功完成。在这些不同事件之间就是交易操作执行所花费的时间。
测量结果表明, MetaTrader 5 执行同步操作 速度高达 28 倍

#2 异步交易操作速度测试

这个测试是如此容易。一笔买入 一份 Si-9.16 期货合约的订单在一行中发送十次。这令我们测量到在 QLUA 中传递异步的平均时间是精确的 1 毫秒 / 10 = 0.10 毫秒。MetaTrader 5 没有测量错误, 它采用的计时器是一微秒。

我们不必等待操作结果: 发送一笔订单至交易服务器, 紧接着发送下一笔订单:

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
结果表明, MetaTrader 5 执行异步操作 速度为 3.33 倍

#3 市场深度更新测试

一些交易策略利用订单盘口分析。在 MQL5 中, 市场深度的变化事件可在 OnBookEvent() 处理器里跟踪; QLUA 为此目的提供了 OnQuote()。

市场深度的变化速度使用下列程序测试, 它们可从所附的 ZIP 里得到:

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

在两个终端里运行程序之后, 我们记录到市场深度的更新频率在 MetaTrader 5 中 更频繁大约是 5 倍。也许, QUIK 限制了订单盘口的更新频率, 并没有表现出一定的变化。

所有的源代码文件已附加到文章末尾, 所以任何人都可以重现这些测试并自行检查结果。

为什么差别如此令人印象深刻?

我们努力地追求高性能, 以及每微秒价值的同时, 多年来不断优化交易平台。

这就是为什么我们内置的 MQL5 算法语言已经达到了惊人的表现, 以及令人印象深刻的交易业务速度。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/2635

附加的文件 |
最近评论 | 前往讨论 (69)
s_mike
s_mike | 5 9月 2017 在 16:04
Renat Fatkhullin:

你先用你的代码来证明你的话,而不是我们的证明。

你为什么要在庸俗的博学水平上掷地有声,却不知道 LUA 是什么?


有两种语言进行过比较。

其中一种语言在速度上要输给另一种语言 50-600 倍,而在与交易平台结合进行纯粹的交易时,语言的最低速度也要输给另一种语言 28 倍。

Quick 本身与语言没有深度整合,只是附带的。而 MetaTrader 5 是围绕满足MQL5 的需求 而建立的,此时所有数据都可以在 MQL5 中使用。此外,LUA 语言是作为高级调用之间的绑定而创建的,但不是用于计算操作。


用 C++ 编写模块然后发布?谁会冒险在交易环境中安装别人的 EXE/DLL 呢?

但在 MQL5 中是安全的,因为在 MQL5 中,您可以获得安全的代码和几乎与 C++ 相同的速度。


那些生活在 Quick 中的人并不了解真实数据的概念。

当你能用 LUA 重复下面的代码时,再来讨论 "巨大数组 "吧:

冷运行,在 2.6 秒内产生了 1700 万个真实的 RTS-9.17 刻度和 60278 个分钟条形图。

平台内使用的数据不受限制。这些数据用于构建指标、分析等。

这正是 MQL 程序的操作数据。终端本身在工作中也使用这些数据。

你说的是一些表格。


你只是不了解这种语言及其内部结构。这就是为什么所有语言对你来说都是一样的。

你是否意识到,你是在与一个创造编程语言并为效率和生产力而奋斗的人交谈?

你知道你在和谁说话吗?

当你还不在计划中时,与你交谈的人已经在 pdp-11 上安装了 ansi C vax 编译器。

我无法控制自己:绵羊。

你们拿钱写了这么多测试,却在不懂装懂的用户耳边擤鼻涕。我不会免费写文章和参加这个节目。快 600 倍,手要张开,手要张开。

放大镜支架连接到侧面的终端是正确的。本应如此(虽然我们不能说 Quick 的开发人员计划如此:他们别无他法)。而贵公司的发展方向--一切都应该是彩色的、闪烁的、封闭的--令人怀疑。最重要的是--Ponts,Ponts...

"我们写了一个测试器,现在你不需要 amibroker 和 welslab 了"。速度也快了 600 倍?小丑们

"我们可以发送比 Quick 多 28 倍的交易。这他妈是为了什么?为了
还有修复,速度也快了 28 倍。

我们的加法速度是 1+1 的 100 倍。即便如此(事实并非如此),为什么?基础设施带宽仍然是决定性因素。从希姆基到维德诺耶,你开法拉利比开索拉里快吗?

所有这些都是泡沫和空谈。公关是为了吸引傻瓜。不过那是你的目标受众。



已经封杀我了。写诗的
MetaQuotes
Renat Fatkhullin | 5 9月 2017 在 16:06

我想你太老了,比不了了。在这里,言语是赢不了的。

祝你好运

prostotrader
prostotrader | 5 9月 2017 在 16:23

妈的,快多少倍有什么关系?!!!!

以 FORTS 为例,一次登录每秒可进行 30 笔交易!!!!!

什么 MT5、什么KVIC+ 经纪人的网络都不尽如人意!

但重要的是可以在交易所进行全面交易 - 期权 + 期货 + 货币 + Spot!!!!。

市场上没有一款软件可以通过机器人(LUA, QLUA - JUST BAD)进行全面的交易所交易!

MetaQuotes
Renat Fatkhullin | 5 9月 2017 在 16:30
prostotrader:

妈的,快多少倍有什么关系?!!!!

以 FORTS 为例,登录一次,每秒可完成 30 笔交易!!!

经纪商网关的限制更高。

即使是一个经纪人的客户,通过 MetaTrader 5 每秒也能接收 30 多笔交易。但很明显,他们会容忍到一定程度。


遗憾的是,俄罗斯交易所不能或不想从根本上升级和统一其系统。因此,20 年来,俄罗斯的交易技术一直不尽如人意--没有人愿意在那里投资。

Dmitriy Skub
Dmitriy Skub | 5 9月 2017 在 16:34
prostotrader:

妈的,快多少倍有什么关系?!!!!

以 FORTS 为例,登录一次每秒可处理 30 笔交易!

您只需支付额外费用,就能获得高达 600 次的速度。)

在外汇市场中货币篮子的运作 在外汇市场中货币篮子的运作
本文论述了如何将货币对分组 (篮子), 以及如何使用某些指标来获取它们的有关状态数据 (例如, 超买和超卖), 以及如何在交易中应用此数据。
交易员之活学活用: "平静" 优化或绘制交易分布 交易员之活学活用: "平静" 优化或绘制交易分布
分析交易历史, 并依据仓位的入场时间以 HTML 形式绘制交易结果的分布图表。图表显示三个部分 - 按小时, 按周内天数和按月份。
图形界面 VIII: 文件导航器控件 (第三章) 图形界面 VIII: 文件导航器控件 (第三章)
在系列文章第八部分前面的章节中,我们的库加入了几个类用于开发鼠标指针,日历和树形视图,本文介绍的是文件导航器控件,可以用作MQL应用程序图形界面的一部分。
图形界面 VIII: 树形视图控件 (第二章) 图形界面 VIII: 树形视图控件 (第二章)
图形界面第八部分前面的章节中介绍了静态与下拉日历元件,第二章将集中介绍一个同样复杂的元件 — 树形视图(tree view), 它在每个用于创建图形界面的完整开发库中都会包含。本文中实现的树形视图包含了多种灵活的设置和模式,使得这个控件元件易于调整以满足您的需求。