"MQL5 Cookbook: BookEvent İşleme" makalesi için tartışma - sayfa 2

 
denkir:
Büyük olasılıkla bir tumbler'a değil, bir piyasa işlemi işleyicisine ihtiyacınız var.
Çok teşekkür ederim!
 
Bahsettiğiniz makaleyi okudum, bu da kesinlikle faydalı, ancak sorumda, bir tüccar tarafından terminalinden verilenleri değil, diğer piyasa katılımcılarının emirleri üzerindeki eylemleri okuma olasılığını kastetmiştim. Yani, yazdığım filtre mevcut piyasa işlemlerine uygulanmalıdır. MetaTrader böyle bir bilgi sağlıyor mu? Yığın olay işleyicisinde bu tür olasılıklar görmedim.
Рецепты MQL5 - обработка события TradeTransaction
Рецепты MQL5 - обработка события TradeTransaction
  • 2014.09.08
  • Dennis Kirichenko
  • www.mql5.com
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
 
Rubick:
...ancak sorumda, bir tüccar tarafından kendi terminalinden verilen emirleri değil, diğer piyasa katılımcılarının emirleri üzerindeki eylemleri okuma olasılığını kastetmiştim. Yani, hakkında yazdığım filtre mevcut piyasa işlemlerine uygulanmalıdır. MetaTrader böyle bir bilgi sağlıyor mu? Yığın olay işleyicisinde böyle bir olasılık görmedim.
Yığın, şu anda piyasada olan tüm mevcut limit emirlerini gösterir. "Mevcut piyasa işlemleri" terimiyle ne demek istiyorsunuz?
 
denkir:
Yığın, şu anda piyasada olan tüm mevcut limit emirlerini gösterir. "Mevcut piyasa işlemleri" terimiyle ne demek istiyorsunuz?

Açıkça ifade edemediysem özür dilerim. Biraz daha detaylandırmaya çalışayım. Bakın, ENUM_BOOK_TYPE 'de yığında listelenen yalnızca dört emir türü vardır. Bunlar iki kategoriye ayrılabilir: sınırlı ve piyasa. Şimdi size ticareti nasıl anladığımı anlatacağım. Burada şüphelerim olduğu konusunda sizi uyaracağım, bu yüzden yanlış bir şey anladıysam lütfen beni düzeltin. İşte burada. Burada iki grup olası varyant vardır.

  1. Sınırlı bir emir bir piyasa emriyle karşılaştığında ve bir anlaşma - Tick - gerçekleştiğinde. Ya da iki piyasa teklifi karşılaşır ve bir anlaşma olur - Tick.
  2. İki sınırlı teklif karşılaştığında ve bunlardan sonuncusu bir anlaşmaya yol açtığında - Tick.

Düşündüğüm görev, işlemleri iki kategoriye ayırmaktır, 1 - limit teklifleri tarafından üretilenler, 2 - piyasa teklifleri tarafından üretilenler. Bunun ne için olduğu benim için özel lütfen. Böyle bir filtrenin uygulanmasını gördüğümü söyleyebilirim ve 1C aracılığıyla! Gördüğümde ben de çok şaşırdım. Ama fikir hoşuma gitmişti. Ve şimdi, anladığım kadarıyla OnTick işleyicisini OnBookEvent işleyicisi ile kenetlemek gerekiyor. Bunu nasıl yapacağım hakkında hiçbir fikrim yok, bu yüzden yardımınızı rica ediyorum.

 
Bekleyen emirleri görmek için forex piyasası için bir kitap etkinliği oluşturmak mümkün mü? Doğal olarak tek bir likidite sağlayıcısı için.
 
BlackBart:
Bekleyen emirleri görmek için forex piyasası için bir kitap etkinliği oluşturmak mümkün mü? Doğal olarak tek bir likidite sağlayıcısı için.
Bu bilgileri sağlayan bir komisyoncuya ihtiyacınız var.
 

"Tüm satış emirleri arasında 6 numaralı emrin 7700 Rub fiyat ve 1011 lot hacimle en büyük hacme sahip olduğu açıktır. 39 numaralı emir, 7653 Rub fiyat ve 534 lot hacimle tüm alım emirleri arasında en büyük hacme sahipti."

Ne 6. sıra, ne de 39. sıra. Bunlar, aşağıdakiler tarafından erişilebilen seviyelerdir

last_bookArray[6]

veya

last_bookArray[39]

MqlBookArrays [0] ile [ArraySize(bookArray)/2-1] arasındaki satış tekliflerinden ve [ArraySize(bookArray)/2] ile [ArraySize(bookArray)-1] arasındaki alış tekliflerinden oluşur. Bildiğim kadarıyla kitapların 2n seviyesi var. Ve eğer yanılmıyorsam, seviyeler 0 (sıfır) indeksi ile başlar, bu nedenle matematiksel mod (en yüksek hacim, en sık satış teklifi) indeksi 5 (hacim 1011, seviye/fiyat 7700) iken, satın alma teklifi modu 38'dir (hacim 534, seviye/fiyat 7653).

Alış teklifi modu destek olarak alınabilir. Ve satış teklifi modu direnç olabilir.

Keşke seviye sayısını nasıl artırabileceğimi bilebilseydim...

 
Merhaba Denis ;

Göstergenizi, BookEventProcessor2.mq5'i kullanmaya çalıştım, ancak mql5 meta Editöründe derlemeye çalışırken bana aşağıdaki hatayı veriyor, bu zamanlarda nasıl çalıştığını görmek için bu küçük sorunları çözecek kadar nazik olabilirsiniz. Ayrıca, aynı anda ancak başka bir renkle satış ve satın alma limit emirlerini de dahil edip edemeyeceğini söyleyebilir misiniz?

Saygılar,

Michael
Dosyalar:
 
mzapata6724:
Merhaba Denis;

Göstergenizi, BookEventProcessor2.mq5'i kullanmaya çalıştım, ancak mql5 meta Editöründe derlemeye çalışırken bana aşağıdaki hatayı veriyor, bu zamanlarda nasıl çalıştığını görmek için bu küçük sorunları çözecek kadar nazik olabilirsiniz. Ayrıca, aynı anda ancak başka bir renkle satış ve satın alma limit siparişlerini de dahil edip edemeyeceğini söyleyebilir misiniz?

Saygılar ,

Michael

Michael, sorularınız için teşekkürler. Her şeyden önce, BookEventProcessor2 bir gösterge değildir - bir Uzman Danışmandır. İhtiyacınız olan tek şey kaynak ve başlık dosyalarını tek bir klasöre yerleştirmektir. Aşağıdaki ekli resimlere bir göz atın.


Renkleri hızlı bir şekilde değiştirmek isterseniz CBookBarsPanel::Init() yöntemine gidin:

//+------------------------------------------------------------------+
//| Başlatma|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height)
  {
//--- panel boyutu
   this.m_width=_width;
   this.m_height=_height;

//--- bellek ayırma
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- bellek yönetimi bayrağı 
      this.m_obj_arr.FreeMode(true);
      //--- panel etiketi
      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))
                 {
                  //--- çubuk etiketi 
                  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);
  }

Ya da yöntem parametrelerini şu şekilde biraz değiştirebilirsiniz:

//+------------------------------------------------------------------+
//| Başlatma|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height, const color _buy_clr, const color _sell_clr)
  {
//--- panel boyutu
   this.m_width=_width;
   this.m_height=_height;

//--- bellek ayırma
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- bellek yönetimi bayrağı 
      this.m_obj_arr.FreeMode(true);
      //--- panel etiketi
      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))
                 {
                  //--- çubuk etiketi 
                  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);
  }
Dosyalar:
 

Merhaba Dennis.


Yakında cevap verdiğiniz için teşekkürler, uzman danışman şimdi oldukça iyi çalışıyor. Ama bu referans hakkında konuşmaya çalışıyordum:

OrderSend() işlevini kullanarak bir işlem talebi gönderirken, bazı işlemler emir türünün belirtilmesini gerektirir. Emir türü,MqlTradeRequest özel yapısının tür alanında belirtilirve ENUM_ORDER_TYPE numaralandırmasının değerlerini kabul edebilir.

ENUM_ORDER_TYPE

Tanımlayıcı

Açıklama

ORDER_TYPE_BUY

Piyasa Alış emri

ORDER_TYPE_SELL

Piyasa Satış emri

ORDER_TYPE_BUY_LIMIT

Limit satın al bekleyen emir

ORDER_TYPE_SELL_LIMIT

Satış Limiti bekleyen emir

ORDER_TYPE_BUY_STOP

Alış Durdurma bekleyen emir

ORDER_TYPE_SELL_STOP

Satış Durdurma bekleyen emir

ORDER_TYPE_BUY_STOP_LIMIT

Emir fiyatına ulaşıldığında, StopLimit fiyatından bekleyen bir Limit Alış emri verilir

ORDER_TYPE_SELL_STOP_LIMIT

Emir fiyatına ulaşıldığında, StopLimit fiyatından bekleyen bir Satış Limiti emri verilir

ORDER_TYPE_CLOSE_BY

Bir pozisyonu karşıt bir pozisyonla kapatma emri


Mql5 terminalinde, deney danışmanının ORDER_TYPE_BUY VE ORDER_TYPE_BUY gösterdiğini görebiliyorum, ancak sorum şu ki, kitapevindeki transaccion'u gösterebilir ve bu rengi değiştirebilirsiniz, çünkü satın alma emrini nasıl göreceğimi biliyorum, ama büyük patron oraya para koyuyor, Iceberg ile ve belirli bir fiyat seviyesinde bekleyen emri kucaklıyor.


Bu mümkün mü?


Saygılarımla Michael.

RDER_TYPE_SELL_LIMIT

Satış Limiti bekleyen emir

ORDER_TYPE_BUY_STOP

Alış Durdurma bekleyen emir

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