Hedger sous MT5 avec le Virtual Order Manager

 

Cet article repose sur le travail de de Paul du blog Paul’s Forex Random Walk et de ses articles “Writing a Virtual Order Manager to enbale Hedging in MT5et “Testing the Virtual Order Manager with hedging orders from two EAs“.

Il est certain que l’un des plus gros ainsi que polémique changement apporté par le passage de la plateforme MetaTrader 4 à Metatrader 5 est la gestion des ordres ouverts comme des positions (cf l’article parlant du management des positions sous Metatrader 5). A un moment donné, il ne peut y avoir qu’une seule position ouverte pour chaque sous jacent tradé, et la taille de cette position s’ajuste à chaque fois que les ordres sont traités par le broker. Cela permets entre autre de respecter les nouvelles règles FIFO et anti hedging instaurées par la NFA aux US.

Pour travailler dans cet environnement centré sur la position, chaque EA écrit en MQL5 nécessite des développements supplémentaires pour garder en mémoire quels trades a-t-il ouvert car il n’y a pas de manières simples d’obtenir ces informations via le broker. L’exemple le plus frappant serait l’utilisation de deux EAs tournant sur la même paire, l’un suiveur de tendance et un autre scalpeur. Ils peuvent générer au même moment des trades dans des directions opposées. Sous MT4, le résultat serait l’ouverture d’une position short et long sans utilisation de marge. En MT5, aucune position ne sera ouverte.

Un exemple quand à lui d’un challenge au niveau de la programmation est la fonction suivante utilisée très largement dans les EAs de MT4. Cette fonction permet de s’assurer si un ordre est ouvert et d’en retourner le nombre. Une fonction similaire est bien entendue inutilisable en MQL5.

{xtypo_code}int OpenOrders(int magic)
{

int OrderCount = 0;

for (int i = OpenOrdersTotal()-1 ; i >= 0 ; i–)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic
&& (OrderType() == OP_BUY || OrderType() == OP_SELL)
&& OrderSymbol() == Symbol())
{
OrderCount++;
}
}
return(OrderCount);

}{/xtypo_code}

 

Et c’est ici que l’on arrive au Virtual Order Manager

Afin de travailler dans cet nouvel environnement de gestion des ordres, il est possible de mettre en place un utilitaire appelé Virtrual Order Manager, VOM, qui maintiens un enregistrement local des ordres ouverts par chaque EA.

Voici les caractéristiques du VOM :

Comportement


  • Les ordres réels au niveau du broker reflètent la positions totale pour cette paire, mais le VOM maintiens également un ensemble virtuel d’ordres au niveau du terminal MT5. Par exemple, un EA pourrait être virtuellement long sur EURUSD de 0.2 lot et un autre pourrait être virtuellement short de 0.3 lot, le tout avec une position globale et réelle affichée par MT5 de 0.1 lot short.
  • Les stoploss virtuels, takeprofits, magic numbers et les commentaires doivent être supprotés. Les stoploss et takeprofits virtuels doivent pouvoir être modifiés.
  • Les stop loss réels du broker doivent être maintenus à une distance configurable des stop loss virtuels afin de conserver une protection de sécurité en cas de problèmes au niveau de l’ordinateur ou de la perte de connexion.
  • Les prix d’entrée virtuels, ainsi que les stop loss et les take profits peuvent être optionnellement affichés en lignes horizontales sur le graphique.
  • [pour des développements éventuels] Un rapport virtuel virtual_statement.htm peut être produit de manière similaire au rapport usuel statement.htm qui listera l’ensemble les ordres virtuels ouverts et fermés dans un ordre historique.

 

Mise en oeuvre/Implémentation

 

  • La fonctionnalité du VOM est ajouté par un #include dans chaque EA.
  • L’API du VOM est modelé sur les fonctions de trading de MT4. Ce sont des fonctions familières et qui ont déjà fait leur preuve, ce qui facilitera la migration des EAs de MT4. Par conséquent, au lieu d’écrire OrderSend(…), il faudra écrire VirtualOrderManager.OrderSend(….). Quelques fonctions ont été simplifiées donc elles ne sont nécessairement des plug-in de remplacement, mais on peux envisage de mettre au point la version complète de ces fonctions pour faciliter la migration.
  • La liste des ordres ouverts par tous les EAs utilisant le VOM est maintenue dans un fichier auquel peuvent accéder ces-dits EAs. Un tableau listant tous les ordres ouverts sera visible en utilisant l’indicateur OpenVirtualOrderViewer.mq5.

 

Challenges


Quelques uns des plus gros challenges de l’écriture du VOM sont listés ci dessous :

  • Le VOM doit être capable de tracker l’activation d’un pending orders. On peut utiliser l’évènement OnTrade() dans MT5 pour cela.
  • Puisque plusieurs EAs lisent et écrivent le même fichier unique, il faut utiliser les variables globale comme mécanisme de blocage (cf les poblémes classiques d’accès multiples).
  • La valeur du stoploss de protection de catastrophe n’est pas aisé à déterminer parce qu’il est obtenu à partir d’un nombre d’ordres virtuels.

 

Premiers Résultats


Voici la documentation générée par Doxygen pour le Virtual Order Manager. Notez bien que vous devrez enregistrer localement le fichier (clic droit et sauver) pour le lire. Voici pour résumer 3 images.

Le premier diagramme montre comment le Virtual Order Manager s’interface avec l’EA.

Le second diagramme représente les modules du Virtual Order Manager :

… et enfin voici une copie d’écran de l’EA permettant de tester le VOM :

Vous trouverez ici la dernière version du Virtual Order Manager Beta V0.5 et la documentation.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>