Discussion de l'article "Création d'un algorithme de market making en MQL5"

 

Un nouvel article Création d'un algorithme de market making en MQL5 a été publié :

Comment fonctionnent les market makers ? Examinons ce problème et créons un algorithme primitif de market making.

Beaucoup de gens pensent qu'un market maker ne court aucun risque. Mais ce n'est pas le cas. Le principal risque pour un market maker est le risque lié aux stocks, son inventaire. Ce risque réside dans le fait qu'une position peut évoluer brusquement dans une direction sans qu'il soit possible de s'en défaire et de réaliser un profit sur le spread. Par exemple, lorsqu'une foule paniquée vend un actif, le market maker est contraint de racheter la totalité de l'offre. En conséquence, le prix devient négatif, entraînant des pertes pour le MM. 

Les entreprises tentent d'éviter ce risque en utilisant des équations de centrage de spread spécifiques et en déterminant le prix optimal d'achat et de vente. Mais cela n'est pas toujours réalisable. Même si le prix n'est pas optimal, le rôle du MM est d'assurer la liquidité du marché, et ils doivent accomplir cette mission, même s'ils opèrent temporairement à perte. 


Auteur : Yevgeniy Koshtenko

 

Merci, Eugène, pour cet article ! De nombreuses lacunes dans le puzzle de mes connaissances sur le marché des devises sont presque entièrement comblées.

Il y a une seule nuance : certains lecteurs de votre article pourraient ne pas démarrer le conseiller expert dans le testeur de stratégie si la paire de devises testée a un suffixe ou un préfixe. Ils doivent en tenir compte et le spécifier dans les paramètres de l'Expert Advisor.

Mais bon - tout est SUPER !!!

Cordialement, Vladimir.

 
MrBrooklin #:

Merci, Eugène, pour cet article ! De nombreuses lacunes dans le puzzle de mes connaissances sur le marché des devises ont été presque entièrement comblées.

Il y a une seule nuance : certains lecteurs de votre article pourraient ne pas démarrer le conseiller expert dans le testeur de stratégie si la paire de devises testée a un suffixe ou un préfixe. Ils devraient en tenir compte et le spécifier dans les réglages des paramètres de l'Expert Advisor.

Sinon, tout est SUPER !!!

Cordialement, Vladimir.

Merci beaucoup ! Je vérifierai demain avec les préfixes d'un autre courtier. S'il y a lieu, je ferai un ajout)

 

Eugène, hier je n'ai pas regardé de près le code de l'Expert Advisor, car j'étais plus intéressé par la partie texte de l'article, et je n'ai donc pas posé de question sur la partie du code surlignée en jaune :

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountOrders(string symb,ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type && PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
            count++;
        }
     }
   return(count);
  }

J'ai tout de suite prêté attention à votre avertissement : Voici les fonctions de comptage des ordres ouverts et des positions ouvertes. CountOrders et CountTrades s'occupent de compter les ordres ouverts et les positions pour un certain symbole en tenant compte du numéro magique EA. Elles ne sont pas encore utilisées dans le code, mais elles le seront dans les versions futures, lorsque j'écrirai enfin une fonction normale pour centrer l'écart entre les limites.....

Mais je ne comprends pas très bien - était-ce votre idée ou cela devrait-il être différent ?

Cordialement, Vladimir.

 
MrBrooklin positions ouvertes. CountOrders et CountTrades s'occupent de compter les ordres ouverts et les positions pour un certain symbole en tenant compte du numéro magique EA. Elles ne sont pas encore utilisées dans le code, mais elles le seront dans les versions futures, lorsque j'écrirai enfin une fonction normale pour centrer l'écart entre les limites.....

Mais je ne comprends pas bien - était-ce votre idée ou cela devrait-il être différent ?

Cordialement, Vladimir.

C'était prévu - sinon l'Expert Advisor peut commencer à confondre les ordres de son magicien avec d'autres) Symb a l'intention de faire une version multi-devises de l'Expert Advisor dans le futur. Je n'ai pas encore réussi à la réaliser)))))

 
Yevgeniy Koshtenko #:

C'est voulu - parce que sinon l'EA peut commencer à confondre les ordres de son magicien avec d'autres) Par symbole il est prévu de faire une version multi-devises de l'EA dans le futur. Je n'ai pas encore pu la réaliser)))))

Tout est clair avec les ordres, mais pourquoi les positions des symboles et du magicien sont-elles vérifiées dans cette fonction ? ))

Cordialement, Vladimir.

 

Il s'agit d'une honte pour MQ, et non d'un article. Comment une telle chose peut-elle être autorisée à être publiée ?

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            count++;
           }
        }
     }
   return(count);
  }

PositionGetTicket(i) selon la documentation"La fonction renvoie un ticket d'une position par index dans la liste des positions ouvertes et sélectionne automatiquement cette position pour la suite du travail...". Et pourquoi sélectionner une position par son ticket en utilisant la fonction PositionSelectByTicket si elle est déjà sélectionnée ? Enseignez-vous aux nouveaux venus comment ne pas le faire ?

La remarque de Vladimir est tout à fait juste. Et votre réponse n'a rien à voir avec cela... Pourquoi vérifier le symbole et le magik POSITION si nous travaillons avec des commandes ????

 

En dehors du code, je n'ai pas non plus aimé la partie texte.

C'est n'importe quoi, ce n'est rien de plus qu'un bout de papier.

C'est un sujet intéressant, pas d'argument.

Quel type de tenue de marché créons-nous, quel est l'intérêt ?

Le fait qu'il n'ait pas été possible de le créer est un fait, parce que l'auteur n'avait pas de matrice.

et il y en a beaucoup.

Il faut y penser pendant encore au moins ...dix ans, peut-être qu'on arrivera à le faire.

comme un début et comme un moyen de s'améliorer - ok, en cela je suis d'accord.

 

Renat Akhtyamov #:

Quel type de tenue de marché créons-nous, quel est l'intérêt ?

Le fait qu'il n'ait pas été possible de le créer est un fait, car l'auteur ne disposait pas de la matrice nécessaire

Vous devriez lire l'article non pas en diagonale, mais du début à la fin, c'est-à-dire complètement, de sorte que de telles questions ne se posent pas.

Jesuis tout à fait d'accord avec la critique d'Alexey Viktorov concernant l'utilisation de la fonctionPositionSelectByTicket() lorsqu'un billet a déjà été sélectionné sans elle. D'ailleurs, je n'y avais pas prêté attention moi-même.

Mais merci quand même pour l'article !

Cordialement, Vladimir.

 
MrBrooklin #:

L'article ne doit pas être lu en diagonale, mais du début à la fin, c'est-à-dire dans son intégralité, afin que de telles questions ne se posent pas.

Je suis tout à fait d'accord avec la critique d'Alexey Viktorov concernant l'utilisation de la fonction PositionSelectByTicket () lorsqu'un billet a déjà été sélectionné sans elle. D'ailleurs, je n'y ai pas prêté attention moi-même.

Mais merci quand même pour l'article !

Cordialement, Vladimir.

Ce n'est pas un ticket qui est sélectionné, mais une position qui est sélectionnée pour travailler avec ses propriétés au moyen des fonctions correspondantes.

 
Alexey Viktorov #:

Ce n'est pas un billet qui est sélectionné, mais une position qui permet de travailler avec ses propriétés grâce aux fonctions appropriées.

Bonjour Alexei, merci pour cet éclaircissement. )) Lorsque j'ai écrit mon message, je me suis appuyé sur la même documentation (surlignée en jaune) :

Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней 
при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

ulong  PositionGetTicket(
   int  index      // numéro dans la liste des éléments
   );

Параметры

index

[in]  Индекс позиции в списке открытых позиций, начиная с 0.

Возвращаемое значение

Тикет позиции. В случае неудачного выполнения возвращает 0.

Cordialement, Vladimir.