Diskussion zum Artikel "MQL5-Kochbuch: Verarbeitung des Ereignisses BookEvent" - Seite 2

 
denkir:
Höchstwahrscheinlich brauchen Sie keinen Becher, sondern einen Marktabwickler.
Herzlichen Dank!
 
Ich habe den von Ihnen erwähnten Artikel gelesen, der sicherlich auch nützlich ist, aber in meiner Frage meinte ich die Möglichkeit, die Aktionen auf Aufträge anderer Marktteilnehmer zu lesen, nicht die eines Händlers von seinem Terminal aus. D.h. der Filter, von dem ich geschrieben habe, sollte auf laufende Marktoperationen angewendet werden. Bietet MetaTrader solche Informationen? Ich habe solche Möglichkeiten im Stack Event Handler nicht gesehen.
Рецепты MQL5 - обработка события TradeTransaction
Рецепты MQL5 - обработка события TradeTransaction
  • 2014.09.08
  • Dennis Kirichenko
  • www.mql5.com
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
 
Rubick:
...aber in meiner Frage meinte ich die Möglichkeit, Aktionen auf Orders anderer Marktteilnehmer zu lesen, nicht die eines Händlers von seinem Terminal aus. D.h. der Filter, von dem ich schrieb, sollte auf laufende Marktoperationen angewendet werden. Bietet MetaTrader solche Informationen? Ich habe solche Möglichkeiten im Stack Event Handler nicht gesehen.
Der Stack zeigt alle aktuellen Limit-Orders an, die sich gerade auf dem Markt befinden. Was meinen Sie mit dem Begriff "aktuelle Marktoperationen"?
 
denkir:
Der Stapel zeigt alle aktuellen Limit-Aufträge an, die im Moment auf dem Markt sind. Was meinen Sie mit dem Begriff "aktuelle Marktoperationen"?

Ich bitte um Entschuldigung, wenn ich mich nicht klar ausgedrückt habe. Lassen Sie mich versuchen, es etwas genauer zu erklären. Sehen Sie, in ENUM_BOOK_TYPE sind nur vier Arten von Aufträgen im Stapel aufgeführt. Sie können in zwei Kategorien unterteilt werden: limitiert und Markt. Jetzt werde ich Ihnen sagen, wie ich den Handel verstehe. Ich möchte Sie darauf hinweisen, dass ich hier Zweifel habe, wenn ich also etwas falsch verstehe, korrigieren Sie mich bitte. Also hier ist es. Hier gibt es zwei Gruppen von möglichen Varianten.

  1. Wenn ein limitierter Auftrag auf einen Marktauftrag trifft und ein Geschäft - Tick - zustande kommt. Oder zwei Marktgebote treffen aufeinander und es kommt zu einem Abschluss - Tick.
  2. Wenn zwei limitierte Gebote zusammentreffen und das letzte von ihnen zu einem Geschäft führt - Tick.

Die Aufgabe, die ich in Betracht ziehe, besteht darin, die Abschlüsse in zwei Kategorien zu filtern: 1. diejenigen, die durch limitierte Gebote zustande kommen, 2. diejenigen, die durch Marktgebote zustande kommen. Wozu das gut sein soll, möchte ich lieber für mich behalten. Ich kann sagen, dass ich die Implementierung eines solchen Filters gesehen habe, und zwar mit Hilfe von 1C! Ich war auch sehr überrascht, als ich es sah. Aber ich mochte die Idee. Und jetzt, wie ich es verstehe, ist es notwendig, den OnTick-Handler mit dem OnBookEvent-Handler anzudocken. Wie es zu tun, habe ich keine Ahnung, so dass ich für Ihre Hilfe bitten.

 
Ist es möglich, ein Buchungsereignis für den Forex-Markt zu erstellen, um die ausstehenden Aufträge zu sehen? Natürlich für einen einzigen Liquiditätsanbieter.
 
BlackBart:
Ist es möglich, ein Buchungsereignis für den Forex-Markt zu erstellen, um die ausstehenden Aufträge zu sehen? Natürlich für einen einzelnen Liquiditätsanbieter.
Sie benötigen einen Broker, der diese Informationen zur Verfügung stellt.
 

"Es ist offensichtlich, dass von allen Verkaufsaufträgen der Auftrag Nr. 6 das größte Volumen mit einem Preis von 7700 Rub und einem Volumen von 1011 Lots hatte. Auftrag #39 hatte das größte Volumen aller Kaufaufträge mit einem Preis von 7653 Rub und einem Volumen von 534 Lots."

Es handelt sich weder um die Order #6 noch um die Order #39. Es handelt sich um Niveaus, auf die man über

last_bookArray[6]

oder

last_bookArray[39]

MqlBookArrays bestehen aus Verkaufsangeboten von [0] bis [ArraySize(bookArray)/2-1], und Kaufangeboten von [ArraySize(bookArray)/2] bis [ArraySize(bookArray)-1]. Soweit ich weiß, haben Bücher 2n Ebenen. Und wenn ich mich nicht irre, beginnen die Ebenen mit dem Index 0 (Null), so dass der mathematische Modus (höchstes Volumen, häufigstes Verkaufsangebot) der Index 5 ist (Volumen 1011, Niveau/Preis 7700), während der Modus des Kaufangebots 38 ist (Volumen 534, Niveau/Preis von 7653).

Der Kaufangebotsmodus könnte als Unterstützung angesehen werden. Und das Verkaufsangebot könnte ein Widerstand sein.

Ich wünschte, ich wüsste, wie ich die Anzahl der Ebenen erhöhen könnte...

 
Hallo Denis ;

Ich habe versucht, Ihren Indikator, den BookEventProcessor2.mq5. zu verwenden, aber wenn ich versuche, ihn im mql5-Meta-Editor zu kompilieren, bekomme ich folgende Fehlermeldung, könnten Sie so freundlich sein, diese kleinen Probleme zu lösen, um zu sehen, wie er in diesen Zeiten funktioniert. Könnten Sie mir auch sagen, ob es auch die Limit-Orders von Verkauf und Kauf zur gleichen Zeit, aber mit einer anderen Farbe enthalten kann.

Mit freundlichen Grüßen,

Michael
Dateien:
 
mzapata6724:
Hallo Denis ;

Ich habe versucht, Ihren Indikator, den BookEventProcessor2.mq5. zu verwenden, aber wenn ich versuche, ihn im mql5-Meta-Editor zu kompilieren, bekomme ich folgende Fehlermeldung, könnten Sie so freundlich sein, diese kleinen Probleme zu lösen, um zu sehen, wie er in diesen Zeiten funktioniert. Könnten Sie mir auch sagen, ob es auch die Limit-Orders von Verkauf und Kauf zur gleichen Zeit, aber mit einer anderen Farbe enthalten kann.

Mit freundlichen Grüßen ,

Michael

Michael, vielen Dank für Ihre Fragen. Zunächst einmal ist BookEventProcessor2 kein Indikator - es ist ein Expert Advisor. Sie müssen lediglich die Quell- und Header-Dateien in einem Ordner ablegen. Schauen Sie sich die angehängten Bilder unten an.


Wenn Sie die Farben schnell ändern möchten , gehen Sie zur Methode CBookBarsPanel::Init() :

//+------------------------------------------------------------------+
//| Initialisierung|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height)
  {
//--- Plattengröße
   this.m_width=_width;
   this.m_height=_height;

//--- Speicher zuweisen
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- das Kennzeichen für die Speicherverwaltung 
      this.m_obj_arr.FreeMode(true);
      //--- Beschriftung der Tafel
      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))
                 {
                  //--- Balkenetikett 
                  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);
  }

Oder Sie können die Methodenparameter wie folgt leicht ändern:

//+------------------------------------------------------------------+
//| Initialisierung|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height, const color _buy_clr, const color _sell_clr)
  {
//--- Plattengröße
   this.m_width=_width;
   this.m_height=_height;

//--- Speicher zuweisen
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- das Kennzeichen für die Speicherverwaltung 
      this.m_obj_arr.FreeMode(true);
      //--- Beschriftung der Tafel
      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))
                 {
                  //--- Balkenetikett 
                  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);
  }
Dateien:
 

Hallo Dennis


Danke für die schnelle Antwort, der Expert Advisor funktioniert jetzt ziemlich gut. Aber ich habe versucht, über diese Referenz zu sprechen:

Wenn eine Handelsanfrage mit der Funktion OrderSend() gesendet wird, erfordern einige Operationen die Angabe des Auftragstyps. Der Ordertyp wird im Feld typeder speziellen StrukturMqlTradeRequestangegebenund kann Werte der Aufzählung ENUM_ORDER_TYPE annehmen.

ENUM_ORDER_TYPE

Bezeichner

Beschreibung

ORDER_TYPE_BUY

Marktkaufauftrag

ORDER_TYPE_SELL

Marktverkaufsauftrag

ORDER_TYPE_BUY_LIMIT

Buy Limit schwebende Order

ORDER_TYPE_SELL_LIMIT

Sell Limit schwebende Order

AUFTRAGSART_BUY_STOP

Buy Stop schwebende Order

ORDER_TYPE_SELL_STOP

Sell Stop schwebende Order

ORDER_TYPE_BUY_STOP_LIMIT

Bei Erreichen des Orderpreises wird eine schwebende Buy-Limit-Order zum StopLimit-Preis platziert

ORDER_TYPE_SELL_STOP_LIMIT

Bei Erreichen des Orderpreises wird eine schwebende Sell-Limit-Order zum StopLimit-Preis platziert.

ORDER_TYPE_CLOSE_BY

Auftrag zur Schließung einer Position durch eine andere


Ich kann im Terminal von Mql5 sehen, dass der exper advisor ORDER_TYPE_BUY und ORDER_TYPE_BUY anzeigt , aber meine Frage ist, ob man die Transaktionen im Bookevent anzeigen und die Farbe ändern kann, denn ich weiß, wie ich die Kauforder sehen kann, aber wo ist der Big Boss, der sein Geld mit Iceberg und hug pending order auf einem bestimmten Preisniveau anlegt.


Ist das möglich?


Mit freundlichen Grüßen Michael.

RDER_TYPE_VERKAUF_LIMIT

Sell Limit schwebende Order

AUFTRAGSART_KAUFEN_STOPP

Buy Stop schwebende Order

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