Обсуждение статьи "Рецепты MQL5 - обработка события 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.

Задачу, которую я рассматриваю, заключается в фильтрации сделок на две категории, 1-ая - те, которые были произведены лимитированными заявками, 2-ая - те, которые были заключены с использованием рыночных заявок. Для чего это нужно - это ко мне в личку пожалуйста. Я могу сказать, что видел реализацию такого фильтра, причем средствами 1С! Я тоже сильно удивился когда увидел. Но идея понравилась. И вот теперь, как я понимаю необходимо состыковать обработчик OnTick с обработчиком OnBookEvent. Вот как это сделать, я пока ума не приложу, поэтому и прошу вашей помощи.

 
Можно ли создать событие книги для рынка форекс, чтобы видеть отложенные ордера? Естественно, для одного поставщика ликвидности.
 
BlackBart:
Можно ли создать событие книги для рынка форекс, чтобы видеть отложенные ордера? Естественно, для одного поставщика ликвидности.
Вам нужен брокер, который предоставляет такую информацию.
 

"Очевидно, что из всех ордеров на продажу ордер №6 имел наибольший объем с ценой 7700 руб. и объемом 1011 лотов. Ордер №39 имел наибольший объем из всех ордеров на покупку с ценой 7653 руб. и объемом 534 лота."

Это не ордер №6 и не ордер №39. Это уровни, доступ к которым можно получить с помощью

last_bookArray[6]

или .

last_bookArray[39]

MqlBookArrays состоят из предложений на продажу от [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() некоторые операции требуют указания типа ордера. Тип ордера указывается в поле typeспециальной структурыMqlTradeRequest и может принимать значения из перечисления ENUM_ORDER_TYPE.

ENUM_ORDER_TYPE

Идентификатор

Описание

ORDER_TYPE_BUY

Рыночный ордер на покупку

ORDER_TYPE_SELL

Рыночный ордер на продажу

ORDER_TYPE_BUY_LIMIT

Отложенный ордер Buy Limit

ORDER_TYPE_SELL_LIMIT

Отложенный ордер Sell Limit

ORDER_TYPE_BUY_STOP

Отложенный ордер Buy Stop

ORDER_TYPE_SELL_STOP

Отложенный ордер Sell Stop

ORDER_TYPE_BUY_STOP_LIMIT

При достижении цены ордера размещается отложенный ордер Buy Limit по цене StopLimit

ORDER_TYPE_SELL_STOP_LIMIT

При достижении цены ордера, отложенный ордер Sell Limit размещается по цене StopLimit

ORDER_TYPE_CLOSE_BY

Ордер на закрытие позиции по противоположной позиции


Я вижу в терминале Mql5, что советник показывает ORDER_TYPE_BUY и ORDER_TYPE_BUY, но мой вопрос, вы можете показать транзакцию в bookevent о и изменить эти цвета, потому что я знаю, как увидеть ордер на покупку, но где большой босс ставит там деньги, с Iceberg и обнять отложенный ордер на определенном ценовом уровне.


возможно ли это?


С уважением, Майкл.

RDER_TYPE_SELL_LIMIT

Отложенный ордер Sell Limit

ORDER_TYPE_BUY_STOP

Отложенный ордер Buy Stop

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