文章 "MQL5 Cookbook: 处理 BookEvent" - 页 2

 
denkir:
您需要的很可能不是滚揉机,而是市场交易处理机。
非常感谢!
 
我读了您提到的那篇文章,它当然也很有用,但我的问题是指能否读取其他市场参与者的订单操作,而不是交易员从自己的终端下达的订单。也就是说,我所写的过滤器应适用于当前的市场操作。MetaTrader 是否提供此类信息?我在堆栈事件处理程序中没有看到这种可能性。
Рецепты MQL5 - обработка события TradeTransaction
Рецепты MQL5 - обработка события TradeTransaction
  • 2014.09.08
  • Dennis Kirichenko
  • www.mql5.com
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
 
Rubick:
......但在我的问题中,我指的是可以读取其他市场参与者的订单操作,而不是交易者从自己的终端下单。也就是说,我所写的过滤器应适用于当前的市场操作。MetaTrader 是否提供此类信息?我在堆栈事件处理程序中没有看到这种可能性。
堆栈显示当前市场上的所有限价订单。您说的"当前市场操作 " 是什么意思
 
denkir:
堆栈显示当前市场上的所有限价订单。您说的"当前市场操作 " 是什么意思

如果我没有解释清楚,请原谅。让我再详细解释一下。您看,在ENUM_BOOK_TYPE 堆栈中只列出了四种类型的订单。它们可分为两类:有限订单和市场订单。现在,我要告诉你我是如何理解这笔交易的。我要提醒大家,我在这里有疑问,所以如果我理解错了,请纠正我。就是这样。这里有两组可能的变体。

  1. 当有限订单与市场订单相遇时,就会发生交易 - Tick。或者两个市场出价相遇,出现交易 - Tick。
  2. 当两个有限出价相遇,最后一个出价导致成交 - Tick。

我正在考虑的任务是将交易过滤成两类,第一类是限价出价产生的交易,第二类是市场出价产生的交易。至于要做什么,请私下告诉我。我可以说,我已经看到了这种过滤的实现,而且是通过 1C 实现的!我看到时也非常惊讶。但我喜欢这个想法。现在,我认为有必要将 OnTick 处理程序与 OnBookEvent 处理程序对接。我不知道该怎么做,所以请求您的帮助。

 
是否有可能为外汇市场创建一个预订事件,以查看挂单?当然是针对单一流动性提供商。
 
BlackBart:
是否有可能为外汇市场创建一个预订事件,以查看挂单?对于单一流动性提供商而言,当然可以。
您需要一个能提供这些信息的经纪商。
 

"很明显,在所有卖出指令中,6 号指令的成交量最大,价格为 7700 卢布,成交量为 1011 手。39 号订单在所有买入订单中成交量最大,价格为 7653 卢布,成交量为 534 手。

这不是 6 号订单,也不是 39 号订单。这些水平可以通过

last_bookArray[6]

last_bookArray[39]

MqlBookArray 由从 [0] 到 [ArraySize(bookArray)/2-1] 的卖盘和从 [ArraySize(bookArray)/2] 到 [ArraySize(bookArray)-1] 的买盘组成。据我所知,书籍有 2n 层。如果我没记错的话,级别是从索引 0(零)开始的,因此数学模式(最高成交量、最频繁的卖出报价)的索引是 5(成交量 1011,级别/价格 7700),而买入报价模式是 38(成交量 534,级别/价格 7653)。

买入报价模式可视为支撑位。而卖出报价模式可能是阻力

我希望我能知道如何才能增加水平的数量......

 
你好,丹尼斯;

我曾尝试使用您的指标 BookEventProcessor2.mq5,但在 mql5 元编辑器中编译时,却出现了以下错误。您是否还能告诉我,它是否也能同时包含限价销售订单和限价购买订单,但使用另一种颜色。

问好、

迈克尔
附加的文件:
 
mzapata6724:
嗨,丹尼斯 ;

我曾尝试使用您的指标 BookEventProcessor2.mq5,但在 mql5 元编辑器中编译时,却出现了以下错误。您是否还能告诉我,它是否也能同时包含限价销售订单和限价购买订单,但使用另一种颜色。

问候

迈克尔

迈克尔,感谢您的提问。首先,BookEventProcessor2 不是一个指标,而是一个智能交易系统。您只需将源文件和头文件放到一个文件夹中即可。请看下面的附图


如果你想快速改变颜色,请访问 方法 CBookBarsPanel::Init():

//+------------------------------------------------------------------+
//| 初始化|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height)
  {
//--- 面板尺寸
   this.m_width=_width;
   this.m_height=_height;

//--- 分配内存
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- 内存管理标志 
      this.m_obj_arr.FreeMode(true);
      //--- 面板标签
      CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
      if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
         if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
            if(ptr_rect_label.BorderType(BORDER_RAISED))
               if(this.m_obj_arr.Add(ptr_rect_label))
                 {
                  //--- 条形标签 
                  uint curr_x=this.m_width/5;
                  uint curr_y=35;
                  uint mid_idx=this.m_arr_size/2-1;
                  for(uint idx=0;idx<this.m_arr_size;idx++)
                    {
                     color rec_color=(idx<(mid_idx+1))?clrRed:clrGreen;
                     //---
                     CBookRecord *ptr_record=new CBookRecord;
                     if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
                        if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
                           curr_y,curr_x*3,10))
                           if(this.m_obj_arr.Add(ptr_record))
                              curr_y+=(idx==mid_idx)?24:13;
                    }
                 }
     }

//---
   return this.m_obj_arr.Total()==(this.m_arr_size+1);
  }

或者你也可以像这样稍微修改一下方法参数:

//+------------------------------------------------------------------+
//| 初始化|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height, const color _buy_clr, const color _sell_clr)
  {
//--- 面板尺寸
   this.m_width=_width;
   this.m_height=_height;

//--- 分配内存
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- 内存管理标志 
      this.m_obj_arr.FreeMode(true);
      //--- 面板标签
      CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
      if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
         if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
            if(ptr_rect_label.BorderType(BORDER_RAISED))
               if(this.m_obj_arr.Add(ptr_rect_label))
                 {
                  //--- 条形标签 
                  uint curr_x=this.m_width/5;
                  uint curr_y=35;
                  uint mid_idx=this.m_arr_size/2-1;
                  for(uint idx=0;idx<this.m_arr_size;idx++)
                    {
                     color rec_color=(idx<(mid_idx+1))?_sell_clr:_buy_clr;
                     //---
                     CBookRecord *ptr_record=new CBookRecord;
                     if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
                        if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
                           curr_y,curr_x*3,10))
                           if(this.m_obj_arr.Add(ptr_record))
                              curr_y+=(idx==mid_idx)?24:13;
                    }
                 }
     }

//---
   return this.m_obj_arr.Total()==(this.m_arr_size+1);
  }
附加的文件:
 

丹尼斯


感谢您的回复,专家顾问现在运行得很好。 但我想谈谈这个参考:

在使用OrderSend() 函数 发送交易请求时,某些操作需要指示订单类型。订单类型在特殊结构MqlTradeRequest类型 字段 中指定,可以接受 ENUM_ORDER_TYPE 枚举的值。

枚举订单类型

标识符

描述

买入订单

市场买入订单

卖出订单

市场卖出订单

限价买入挂单

买入限价挂单

卖出限价挂单

卖出限价挂单

买入止损挂单

买入止损挂单

卖出止损挂单

卖出止损挂单

买入止损挂单

达到订单价格后,在止损价位挂出买入限价挂单

卖出止损挂单

当达到订单价格时,挂单卖出限价订单会以止损价挂出

平仓指令

对冲平仓订单


我可以在 Mql5 终端中看到,实验顾问显示 ORDER_TYPE_BUY 和ORDER_TYPE_BUY,但我的问题是,您可以在交易记录中显示并更改这些颜色,因为我知道如何查看买入订单,但大老板把钱放在哪里?


这可能吗?


问候 Michael。

卖出限价挂单

卖出限价挂单

买入止损挂单

买入止损挂单

Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Trade Request Structure - Data Structures - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5