Discussion de l'article "Le MQL5 Cookbook : Manipulation BookEvent" - page 2

 
denkir:
Vous n'avez probablement pas besoin d'un gobelet, mais d'un gestionnaire de transactions de marché.
Nous vous remercions de votre attention.
 
J'ai lu l'article que vous avez mentionné, qui est certainement aussi utile, mais dans ma question, je voulais parler de la possibilité de lire les actions sur les ordres d'autres participants au marché, et non ceux passés par un négociant à partir de son terminal. En d'autres termes, le filtre dont j'ai parlé devrait être appliqué aux opérations courantes du marché. MetaTrader fournit-il de telles informations ? Je n'ai pas vu de telles possibilités dans le gestionnaire d'événements de la pile.
Рецепты MQL5 - обработка события TradeTransaction
Рецепты MQL5 - обработка события TradeTransaction
  • 2014.09.08
  • Dennis Kirichenko
  • www.mql5.com
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
 
Rubick:
...mais dans ma question, je voulais parler de la possibilité de lire les actions sur les ordres d'autres participants au marché, et non ceux passés par un négociant à partir de son terminal. En d'autres termes, le filtre dont j'ai parlé devrait être appliqué aux opérations de marché en cours. MetaTrader fournit-il de telles informations ? Je n'ai pas vu de telles possibilités dans le gestionnaire d'événement de la pile.
La pile affiche tous les ordres à cours limité qui sont sur le marché à ce moment-là. Qu'entendez-vous par "opérations de marché en cours" ?
 
denkir:
La pile affiche tous les ordres à cours limité qui sont actuellement sur le marché. Qu'entendez-vous par "opérations de marché en cours" ?

Je vous prie de m'excuser si je ne l'ai pas expliqué clairement. Permettez-moi d'essayer de développer un peu plus. Dans ENUM_BOOK_TYPE, il n'y a que quatre types d'ordres répertoriés dans la pile. Ils peuvent être divisés en deux catégories : les ordres limités et les ordres de marché. Je vais maintenant vous expliquer comment je comprends la transaction. Je vous préviens que j'ai des doutes, alors si je comprends mal quelque chose, corrigez-moi s'il vous plaît. Voici donc ce qu'il en est. Il existe deux groupes de variantes possibles.

  1. Lorsqu'un ordre limité rencontre un ordre de marché et qu'une transaction - Tick - se produit. Ou lorsque deux offres au marché se rencontrent et qu'il y a une transaction - Tick.
  2. Lorsque deux offres limitées se rencontrent et que la dernière d'entre elles aboutit à une transaction - Tick.

La tâche que j'envisage est de filtrer les transactions en deux catégories, 1ère - celles produites par les offres à cours limité, 2ème - celles produites par les offres au marché. L'objectif de cette opération est pour moi un sujet privé s'il vous plaît. Je peux dire que j'ai vu la mise en œuvre d'un tel filtre, et au moyen de 1C ! J'ai également été très surpris lorsque je l'ai vu. Mais l'idée m'a plu. Et maintenant, si j'ai bien compris, il est nécessaire d'associer le gestionnaire OnTick au gestionnaire OnBookEvent. Je n'ai aucune idée de la manière de procéder, c'est pourquoi je vous demande de m'aider.

 
Est-il possible de créer un book event pour le marché du forex afin de voir les ordres en attente? Naturellement pour un seul fournisseur de liquidité.
 
BlackBart:
Est-il possible de créer un book event pour le marché du forex afin de voir les ordres en attente? Naturellement pour un seul fournisseur de liquidité.
Vous avez besoin d'un courtier qui fournit ces informations.
 

"Il est évident que parmi tous les ordres de vente, l'ordre n°6 a eu le plus grand volume avec le prix de 7700 Rub et un volume de 1011 lots. L'ordre n°39 a eu le plus grand volume de tous les ordres d'achat avec un prix de 7653 Rub et un volume de 534 lots".

Il ne s'agit pas de l'ordre n° 6, ni de l'ordre n° 39. Il s'agit de niveaux auxquels on peut accéder par

last_bookArray[6]

ou

last_bookArray[39]

Les MqlBookArrays sont composés d'offres de vente allant de [0] à [ArraySize(bookArray)/2-1], et d'offres d'achat allant de [ArraySize(bookArray)/2] à [ArraySize(bookArray)-1]. Pour autant que je sache, les livres ont 2n niveaux. Et, si je ne me trompe pas, les niveaux commencent avec l'indice 0 (zéro), donc le mode mathématique (le volume le plus élevé, l'offre de vente la plus fréquente) est l'indice 5 (volume 1011, niveau/prix 7700), tandis que le mode d'offre d'achat est 38 (volume 534, niveau/prix de 7653).

Le mode d'offre d'achat pourrait être considéré comme un support. Et le mode d'offre de vente pourrait être une résistance.

J'aimerais savoir comment augmenter le nombre de niveaux...

 
Bonjour Denis ;

J'ai essayé d'utiliser votre indicateur, le BookEventProcessor2.mq5, mais en essayant de le compiler dans l'éditeur méta mql5, il me donne l'erreur suivante, vous pourriez avoir la gentillesse de résoudre ces petits problèmes pour voir comment il fonctionne dans ces temps. Pourriez-vous aussi me dire s'il peut aussi inclure les ordres limites de vente et d'achat en même temps mais avec une autre couleur.

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,

Michael
Dossiers :
 
mzapata6724:
Bonjour Denis ;

J'ai essayé d'utiliser votre indicateur, le BookEventProcessor2.mq5, mais en essayant de le compiler dans l'éditeur méta mql5, il me donne l'erreur suivante, vous pourriez avoir la gentillesse de résoudre ces petits problèmes pour voir comment il fonctionne dans ces temps. Pourriez-vous aussi me dire s'il peut aussi inclure les ordres limites de vente et d'achat en même temps mais avec une autre couleur.

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,

Michael

Michael, merci pour vos questions. Tout d'abord, BookEventProcessor2 n'est pas un indicateur - c'est un Expert Advisor. Tout ce dont vous avez besoin, c'est de placer les fichiers source et les fichiers d'en-tête dans un seul dossier. Jetez un coup d'œil aux images jointes ci-dessous.


Si vous souhaitez changer les couleurs rapidement , allez à la méthode CBookBarsPanel::Init() :

//+------------------------------------------------------------------+
//| Initialisation|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height)
  {
//--- taille du panneau
   this.m_width=_width;
   this.m_height=_height;

//--- allouer de la mémoire
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- l'indicateur de gestion de la mémoire 
      this.m_obj_arr.FreeMode(true);
      //--- étiquette du panneau
      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))
                 {
                  //--- étiquette de la barre 
                  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);
  }

Ou vous pouvez changer légèrement les paramètres de la méthode comme ceci :

//+------------------------------------------------------------------+
//| Initialisation|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height, const color _buy_clr, const color _sell_clr)
  {
//--- taille du panneau
   this.m_width=_width;
   this.m_height=_height;

//--- allouer de la mémoire
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- l'indicateur de gestion de la mémoire 
      this.m_obj_arr.FreeMode(true);
      //--- étiquette du panneau
      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))
                 {
                  //--- étiquette de la barre 
                  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);
  }
Dossiers :
 

Bonjour Dennis


Merci pour cette réponse rapide, le conseiller expert fonctionne maintenant assez bien, mais j'essayais de parler de cette référence :

Lors de l'envoi d'une demande de transaction à l'aide de la fonction OrderSend(), certaines opérations requièrent l'indication du type d'ordre. Le type d'ordre est spécifié dans le champ type dela structure spécialeMqlTradeRequest et peut accepter les valeurs de l'énumération ENUM_ORDER_TYPE.

ENUM_ORDER_TYPE

Identifiant

Description

ORDER_TYPE_BUY

Ordre d'achat sur le marché

ORDRE_TYPE_SELL

Ordre de vente sur le marché

ORDRE_TYPE_BUY_LIMIT

Ordre en attente de limite d'achat

ORDRE_TYPE_SELL_LIMIT

Ordre de vente limite en attente

TYPE D'ORDRE_BUY_STOP

Ordre en attente Buy Stop

ORDRE_TYPE_SELL_STOP

Ordre de vente stop en attente

TYPE D'ORDRE_BUY_STOP_LIMIT

Lorsque le prix de l'ordre est atteint, un ordre d'achat limite en attente est placé au prix du StopLimit.

ORDRE_TYPE_SELL_STOP_LIMIT

Lorsque le prix de l'ordre est atteint, un ordre de vente à cours limité en attente est placé au prix StopLimit.

TYPE D'ORDRE_CLOSE_BY

Ordre de fermeture d'une position par une position opposée


Je vois dans le terminal de Mql5, que l'expert advisor affiche ORDER_TYPE_BUY et ORDER_TYPE_BUY, mais ma question est que vous pouvez montrer la transaccion dans le bookevent à propos et changer ces couleurs, parce que je sais comment voir l'ordre d'achat, mais où est le big boss qui met son argent, avec l'Iceberg et l'étreinte de l'ordre en attente à un certain niveau de prix.


Est-ce possible ?


Cordialement, Michael.

RDER_TYPE_SELL_LIMIT

Ordre en attente Sell Limit

TYPE_D'ORDRE_BUY_STOP

Ordre en attente 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