文章 "MQL5 酷客宝典: 实现您自己的市场深度"

 

新文章 MQL5 酷客宝典: 实现您自己的市场深度已发布:

本文展示了如何利用市场深度 (DOM) 编程, 并介绍了 CMarketBook 类的操作原理, 它可扩展 MQL5 标准库的类, 并提供使用 DOM 的便利方法。

MQL5 语言持续发展, 并在每年当中提供更多交易信息的操作机会。其中一类交易数据是有关市场深度的信息。这是一个特殊的表格, 显示价格水平和限价指令的交易量。MetaTrader 5 有一个内置的市场深度用于显示限价单, 但是这还不够。首先, 您的 EA 必须要可以简单、便利的访问市场深度。当然, MQL5 语言有一些特别的功能可以操作这些信息, 但它们有一些低级功能需要附加的数学计算。

然而, 能够避免所有中间计算。您所有要做的就是编写一个特殊的类, 用于操作市场深度。所有复杂计算都在市场深度内执行, 且类本身可以提供操纵 DOM 价格和级别的便利方法。这个类能够以指标的形式简单地创建一个有效的面板, 它可以即刻反应出市场深度的价格状态:


图示. 1. 作为面板显示的市场深度

读完本文的第一章之后, 对于 MetaTrader 5 提供的规范市场深度所具有的令人印象深刻的能力更加清晰。我们不会在我们的指标里试图重复所有这些, 因为我们的任务将是完全不同的。通过实施创建用户友好的市场深度交易面板的例程, 我们将展示面向对象编程简单处理复杂数据结构的原理。我们将确保利用 MQL 5 从您的 EA 里直接访问市场深度不会很困难, 以及据此产生的视觉示意能够为我们提供便利。

作者:Vasiliy Sokolov

 
读了很久,却不明白这到底是怎么回事?
 
Михаил:
我读了很久,但不明白为什么?

我认为,至少应该有一个现成的类(如标准库)来分析仪器当前的流动性。

瓦西里做得很好!代码水平高,方法系统。干得好

 
Михаил:
读了很久,但不明白为什么会这样?
Dennis Kirichenko:

我认为,至少要有一个现成的类(如标准库)来分析仪器当前的流动性。

瓦西里干得好!代码水平高,方法系统。干得好!

正是如此。我的 "MQL Recipes "的任务是用新的非繁琐类扩展 MQL 标准库,使交易者的工作更方便。

至于价格堆栈,提供最有效的二级数据访问机制至关重要。在这种情况下,通过中间类进行操作比在每个 OnBookEvent 上完全搜索堆栈要快得多(当然也更方便)。价格玻璃类中嵌入的算法是有原因的。

 
Vasiliy Sokolov:

没错。我的 "MQL Recipes "的任务是用新的非繁琐类扩展标准 MQL 库,使交易者的工作更加方便。

至于价格书,提供最有效的二级数据访问机制至关重要。在这种情况下,通过中间类进行操作比在每个 OnBookEvent 上完全搜索堆栈要快得多(当然也更方便)。价格玻璃类中嵌入的算法是有原因的。

 
玻璃交易的有用信息!有志同道合的人参与此事真是太好了 )
 
Михаил:

米哈伊尔,我们仍在等待您在邻近的主题中 告诉我们最后一笔交易的方向。

我想您也答应过要写一篇关于如何在 MetaTrader5 中使用事件模型的文章。我想最后读一读。

 
Vasiliy Sokolov:

米哈伊尔,我们仍在等待您在邻近的主题中 告诉我们最后一笔交易的方向。

我想您也答应过要写一篇关于如何在 MetaTrader5 中使用事件模型的文章。我想最后读一读。

这篇文章尚未发表(篇幅较小,与您的文章不同),但您可以在我的博客中阅读。

P/S 在邻近的主题中阅读有关方向...

顺便说一句,关于这篇文章。

你不能按照你写的方式来做:

//+------------------------------------------------------------------+
//| BookEvent 函数|
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//---
   printf("价格玻璃" + symbol +  "改变"); 
  }

因为 BookEvent 事件是广播式的。

只要您订阅接收,您就会在 OnBookEvent() 中接收到所有信息、

中打开的所有内容。

这就是为什么您需要过滤选定符号的事件:

//+------------------------------------------------------------------+
//| BookEvent 函数|
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//---
    if ( symbol == _Symbol )
    { 
      printf("价格玻璃" + symbol +  "改变");
    } 
  }
 
Михаил:

这篇文章没有发表(篇幅较小,与您的文章不同),但您可以在我的博客中阅读。

P/S 在邻近的主题中阅读关于方向....

顺便说一句,关于这篇文章。

你不能按照你写的方式来做:

因为 BookEvent 事件是广播式的。

只要您订阅接收,您就会在 OnBookEvent() 中接收到所有内容

中打开的所有内容。

这就是为什么您需要只针对选定的符号过滤事件:

迈克尔,来自文档:

MarketBookAdd

为指定工具打开价格簿,并订阅接收指定 价格簿变化的通知

bool MarketBookAdd(
stringsymbol// symbol
);

也就是说,开发人员引入MarketBookAdd 的目的是,只有当 MarketBookAdd 中预定义的符号堆栈发生变化时,才会调用 OnBookEvent。因此,除了预定义的符号外,其他任何符号都不会被调用到 OnBookEvent。

 

读取 OnBookEvent()

В отличие от других событий, событие BookEvent является широковещательным.
Это означает, что достаточно одному эксперту подписаться на получение события BookEvent с помощью функции MarketBookAdd,
все остальные эксперты, имеющие обработчик OnBookEvent(), будут получать это событие.
Поэтому необходимо анализировать имя символа, которое передается в обработчик в качестве параметра const string& symbol.
 

您好、

非常感谢你的贡献。

这正是我一直在寻找的。

市场深度对于黄牛来说是一个很好的指示。

但问题是,我从未在我的终端上真正看到过市场深度的交易量信息。

如何获取经纪人提供的交易量信息?