English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Stratégies d’ordres. Un Expert Advisor polyvalent

Stratégies d’ordres. Un Expert Advisor polyvalent

MetaTrader 5Trading | 22 décembre 2021, 17:16
457 2
Dmitry Fedoseev
Dmitry Fedoseev

 

Introduction

L'élément clé initial de toute stratégie de trading est l'analyse des prix et l'analyse des indicateurs techniques constituant la base de l'ouverture d'une position. Nous l'appellerons analyse de marché, c'est-à-dire tout ce qui se passe sur le marché et est hors de notre contrôle.

En outre, les stratégies peuvent nécessiter un autre type d'analyse. Nous l'appellerons analyse de la situation de trading courante. Cela englobe l'analyse de l'état de la position de trading et l'analyse de tous les ordres en attente disponibles/manquants (s’il y en a qui sont utilisés dans une stratégie). Les résultats d'une telle analyse nous amènent à décider si certaines actions avec des positions ou des ordres doivent être effectuées, par exemple l’option de clôturer, déclencher l’ordre Stop Loss, le placement ou la suppression des ordres en attente, etc. En d'autres termes, une telle analyse comprend l'étude de notre activité de marché, des actions en fonction de la situation que nous (ou un Expert Advisor) avons créée et les règles de la stratégie utilisée.

Un Trailing Stop communément connu peut dans une certaine mesure être considéré comme le deuxième type d'éléments dans une stratégie de trading. Considérez l'analyse suivante : s'il existe une position ouverte avec un profit supérieur à la valeur définie, alors que le Stop Loss n'est pas défini ou est plus éloigné du prix courant tel que spécifié dans les paramètres, un mouvement de Stop Loss s’en suivra.

Le Trailing Stop est une fonction assez simple pour être particulièrement intéressante. En outre, il peut être classé dans une catégorie totalement différente d'éléments de stratégie de trading, étant une fonction de gestion de position. Ainsi, une stratégie de trading peut être composée de trois catégories d'éléments :

  1. Analyse du marché et actions basées sur celle-ci.

  2. Analyse de la situation trading et actions fondées sur celle-ci.

  3. Gestion des positions.

Cet article se concentre sur les stratégies qui utilisent activement les ordres en attente (nous les appellerons stratégies d'ordre en abrégé), un métalangage qui peut être créé pour décrire de telles stratégies et le développement et l'utilisation d'un outil polyvalent (Expert Advisor) dont le fonctionnement est basé sur ces descriptions.

 

Exemples des stratégies d’ordres

Le trading commence normalement par l'ouverture d'une position initiale. Cela peut se faire de plusieurs manières :

  1. Ouverture d'une position sur le marché :

    • Dans le sens suggéré par les indicateurs.

    • Dans le sens sélectionné par l'utilisateur dans la fenêtre des propriétés de l'Expert Advisor.

    • Selon les résultats à la clôture de la dernière position. Au lieu d'être une position initiale, une telle position peut être une phase de fonctionnement intermédiaire.

  2. Deux ordres Stop opposés. Lorsque l'un des ordres se déclenche, le deuxième ordre est supprimé.

  3. Deux ordres Limit opposés. Lorsque l'un des ordres se déclenche, le deuxième ordre est supprimé.

  4. Ordre Limit et ordre Stop placés dans le même sens. Dans ce cas, il faut décider du sens des ordres, comme au point 1.

Une fois la position initiale ouverte, vous pouvez utiliser différentes stratégies d’ordres.

Graduation à l'aide d'ordres Limit (Fig. 1.)

Vous ouvrez une position initiale et définissez un ou plusieurs ordres Limit dans le même sens avec un volume de lot croissant. Lorsque les ordres Limit se déclenchent, de nouveaux ordres Limit sont définis jusqu'à ce que la position soit close au Take Profit. Lorsque la position est close au Take Profit, les ordres en attente restants sont supprimés.

Fig. 1. Graduation à l'aide d'ordres Limit
Fig. 1. Graduation à l'aide d'ordres Limit

Arrêt et Inversion (Fig. 2.)

Vous ouvrez une position initiale et définissez l'ordre Stop opposé avec un volume de lot accru au niveau Stop Loss de la position initiale. Lorsque la position est close au Stop Loss, l'ordre en attente lance un nouvel ordre Stop opposé qui est à nouveau défini à son niveau Stop Loss, et ainsi de suite jusqu'à ce que la position soit close au niveau Take Profit. Lorsque la position est close au Take Profit, l'ordre en attente restant est supprimé.

Fig. 2. Stop et Reverse
Fig. 2. Stop et Reverse

Construction de pyramides (Fig. 3.)

Vous ouvrez une position initiale et si elle semble gagnante, vous augmentez son volume (scale in) et déplacez le Stop Loss jusqu'au seuil de rentabilité. Si la position est close au Take Profit, on s'attend alors à ce qu'elle ait atteint un volume assez important et, par conséquent, un profit. Si toutefois le Stop Loss se déclenche pendant la phase intermédiaire, il n'y aura tout simplement aucun profit.

Fig. 3. Construction de pyramides
Fig. 3. Construction de pyramides

Réouverture (Fig. 4.)

Vous ouvrez une position sur le marché. La clôture au Stop Loss est suivie d'une nouvelle ouverture avec un volume de lot accru, et ainsi de suite jusqu'à ce que la position se clôture au Take Profit. Cette stratégie est similaire à la graduation lors de l’utilisation des ordres Limit.

Fig. 4. Réouverture
Fig. 4. Réouverture

Il est tout à fait possible de combiner toutes les stratégies ci-dessus. Si une position semble être gagnante, la construction de la pyramide s’effectue harmonieusement ; sinon, si des pertes sont en cours, il peut être approprié de faire de la graduation à l'aide des ordres Limit. Cela dit, la graduation à l'aide des ordres Limit n'a pas besoin d'être continue. Par exemple, vous pouvez d'abord graduer trois fois, puis faire plusieurs Stop et Reverse et passer à la graduation en utilisant à nouveau les ordres Limit, etc.

Dans la pratique, le développement de stratégies des ordres peut prendre beaucoup de temps non seulement en raison de la portée du codage requis, mais également en raison de la nécessité d'utiliser un esprit créatif dans chaque cas. Essayons de faciliter la programmation de telles stratégies en créant un Expert Advisor polyvalent qui nous permettrait de mettre en œuvre n'importe quelle stratégie d’ordres.

 

Le principe de base

Le principe de base du développement d'une stratégie d’ordres est l'identification de la phase d'opération de la stratégie courante et la réalisation d'actions en fonction de cette phase.

Suivons l'exemple suivant : nous devons ouvrir une position de marché, disons, ce sera une position d'achat. Une fois la position ouverte, deux ordres en attente doivent être définis : un ordre Stop au-dessus et un ordre Limit au-dessous. Alors que nous commençons, il n'y a pas de position ou d'ordre sur le marché, donc nous identifions la phase comme celle de l'opération initiale où nous devons ouvrir une position. L'existence d'une position sur le marché suggère qu'il s'agit de la prochaine phase d'exploitation. Les phases que l'on peut identifier sont donc les suivantes :

  1. Il n'y a ni position ni ordre. Une position doit être ouverte.

  2. Il y a une position mais aucun ordre n'est défini. Un ordre Stop est requis.

  3. Il y a une position et un ordre Stop. Un ordre Limit est requis.

Le travail conforme à ces règles sera mis en œuvre de manière fiable, mais il nécessitera trois traits : le premier pour identifier l'absence de la position et l'ouverture de la position, le trait suivant pour identifier la position et l'absence d'ordres et le troisième pour identifier la position et un ordre. La stratégie exige que les trois actions soient effectuées en une seule fois.

Nous devons donc essayer d'effectuer toutes les actions à la fois : s'il n'y a pas de position ou d'ordre, nous devons ouvrir une position. Si la position a été ouverte avec succès, nous devons envoyer une demande pour définir un ordre Stop et une autre demande pour définir un ordre Limit. Il se peut bien qu'aucune des demandes envoyées pour définir un ordre en attente ne soit acceptée (en raison de problèmes de connectivité, d'un manque d'informations sur les prix, etc.), mais la situation de trading a transitionné vers une autre phase où nous avons une position ouverte. Cela signifie que toutes les phases intermédiaires possibles doivent être couvertes :

  1. Il n'y a aucune position. Une position doit être ouverte. Si la position a été ouverte avec succès, les demandes d'ordre Stop et d'ordre Limit doivent être envoyées.

  2. Il y a une position mais il n'y a pas d'ordre en attente. Les demandes d'ordre Stop et d'ordre Limit doivent être envoyées.

  3. Il y a une position et un ordre Stop mais l'ordre Limit manque. Une demande d'ordre Limit doit être envoyée.

  4. Il y a une position et un ordre Limit mais l'ordre Stop manque. Une demande d'ordre Stop doit être envoyée.

Veuillez noter que pour identifier la phase dans l'exemple donné, la situation de trading doit correspondre parfaitement aux règles d'identification fournies. Il devrait y avoir certains ensembles d'ordres : une seule position et aucun ordre ou une position et l'un ou l'autre des ordres - il ne peut y avoir d'autre option. La description des phases de fonctionnement de la stratégie suivant ce principe peut devenir très longue et rendre l'ensemble du processus très chronophage en raison de la nécessité de prendre en compte toutes les options possibles qui peuvent finalement s'avérer irréalisables. Les règles de fonctionnement de l'exemple ci-dessus peuvent être définies d'une manière légèrement différente :

  1. Il n'y a aucune position. Une position doit être ouverte. Si la position est ouverte avec succès, des demandes d'ordre Stop et d'ordre Limit doivent être envoyées.

  2. Il existe une position. Dans ce cas, il devrait y avoir deux ordres en attente sur le marché. Vérifiez s'il existe un ordre Stop sur le marché et définissez-le s'il est manquant. Vérifiez s'il existe un ordre Limit sur le marché et définissez-le s'il est manquant.

Dans ce cas, nous avons un ensemble minimum de règles pour l'identification de la phase d'exploitation et une description complète d'une situation de trading où nous devrions avoir atteint cette phase.

L'application de ce principe nécessitera que la position elle-même soit identifiée afin de distinguer s'il s'agit de la position initiale ou si un certain ordre s'est déjà déclenché. Dans ces circonstances, il n'y aura pas besoin d'essayer de placer le deuxième ordre, car le système est dans la nouvelle phase d'exploitation. L'identification des ordres sera également requise, mais nous verrons l'identification des positions et des ordres un peu plus tard. Posons maintenant le principe de base de la description des stratégies d'ordres de manière plus claire et compacte :

  1. Nous avons besoin d'une méthode d'identification de la phase d'exploitation courante avec le moins d'informations possible.

  2. Chaque phase d'exploitation doit avoir une description complète de la situation correspondant à cette phase.

  3. Si des actions de marché (ouverture, clôture, graduation, suppression de graduation, etc.) ou des ordres en attente sont nécessaires à une phase donnée, cette phase doit être divisée en deux sous-phases : avant l'exécution de l'action de marché et après (afin de permettre nous d'effectuer toutes les actions en une seule fois et de répéter les tentatives des ordres en attente ayant échoués).

  4. Si des actions de marché (ouverture, clôture, graduation, suppression de graduation, etc.) ou des ordres en attente sont requis à une phase donnée, les ordres en attente seront traités après la réussite de l'action de marché.

  5. Une phase ne peut correspondre qu'à une seule action de marché et à un nombre quelconque d'actions avec des ordres en attente.

 

Identification d'ordres et de positions

Les positions et les ordres peuvent être identifiés de plusieurs manières : à l'aide des commentaires sur les ordres, du nombre magique ou des variables globales. Utilisons les commentaires. Les principaux problèmes liés à l'utilisation des commentaires sont le volume limité des commentaires et le fait que le courtier peut ajouter aux commentaires quelque chose qui lui est propre. S'il n'y a pas assez d'espace pour l'apport du courtier, une partie du commentaire sera coupée.

Vous devez donc prendre le moins de place possible dans le commentaire et essayer de trouver un moyen de le séparer des éventuels apports du courtier. Chaque ordre n'a besoin que d'un seul identifiant. En pratique, il peut s'agir de 1 ou 2 chiffres ou d'une combinaison d'une lettre et d'un ou deux chiffres. À la fin de l'identifiant, nous mettrons une marque, disons, "=" (il n'a jamais été remarqué qu'il était utilisé par les courtiers dans leurs apports). Nous avons donc au maximum 4 caractères. Pour obtenir l'identifiant d'un commentaire, on peut utiliser la fonction suivante :

//+------------------------------------------------------------------+
//|   Function for obtaining the identifier from the aComment string |
//+------------------------------------------------------------------+
string GetID(string aComment)
  {
   int    p =StringFind(aComment,"=",0); // Determine the position of the separator
   string id=StringSubstr(aComment,0,p); // Get the substring located before the separator
   return(id);
  }
//+------------------------------------------------------------------+

Si la position ou l'ordre doit être vérifié par rapport à un identifiant connu, cela peut être fait comme suit :

//+------------------------------------------------------------------+
//|   Checking the comment against the set identifier                |
//+------------------------------------------------------------------+
bool FitsID(string aID,string aComment)
  {
   return(StringFind(aComment,aID+"=",0)==0);
  }
//+------------------------------------------------------------------+

 

Métalangage pour la description des stratégies d’ordres

Définissons maintenant le langage à utiliser pour la mise en place des stratégies d'ordres. Il doit être concis, clair et intuitif tout en étant conforme à la MQL5 pour assurer une exécution rapide de ses ordres sans calculs inutiles. Je laisserai aux lecteurs le soin de décider si le résultat a été un succès ou non.

La description de la stratégie se fait dans un fichier texte qui est ensuite connecté à l'Expert Advisor en précisant son nom dans la fenêtre de propriétés de l'Expert Advisor.

Une ligne du fichier correspond à une phase de fonctionnement du système. La ligne est divisée en deux champs. Le premier champ contient les règles d'identification de phase. Le second couvre la liste des actions. Les champs sont séparés par la ligne verticale "|". Les règles d'identification et les éléments de la liste d'actions sont définis, séparés par un point-virgule ";".

Outre les ordres, le côté droit de chaque ligne peut contenir un commentaire séparé du reste du texte par "#", par exemple :

Nothing | Buy(M1,1,0,0) #If there is no position or order in the market, open a Buy position, mark it with "М1", lot 1, no Stop Loss, no Take Profit.

 

Phase d’identification

L'identification de la phase peut nécessiter des informations sur la position actuelle du marché, les ordres en attente ou la dernière transaction. En plus du statut de la position, certains détails de la position peuvent être requis, tels que le prix, le profit, la valeur Stop Loss, le cas échéant, etc. Les informations requises sur la dernière transaction peuvent inclure les résultats de la transaction. Pour les ordres en attente, il peut être nécessaire de préciser leur cours d'ouverture, le Stop Loss, le Take Profit (qui sera très probablement requis lors de la phase d'exécution).

Ces informations peuvent être obtenues à l'aide des ordres d'accès aux données trading. La plupart de ces ordres auront deux paramètres : l'identifiant de position ou d’ordre et l'identifiant de paramètre. Si l’identifiant de paramètre n'est pas renseigné, seule l'existence de l'objet de trade spécifié par l’ordre et l'identifiant fera l'objet d'un contrôle.

Par exemple, l’ordre Buy(M1) suggère qu'il doit y avoir une position de marché avec l'identifiant "M1". L’ordre Buy() seul (ou simplement Buy sans les parenthèses) signifie qu'il doit y avoir une position Buy avec n'importe quel identifiant. Si vous spécifiez l'identifiant du paramètre, il indiquera la valeur du paramètre, par exemple Buy(M1,StopLossInPoints) - valeur Stop Loss en points définie pour une position d'achat avec l'identifiant "M1". Si aucun identifiant n'est spécifié - Buy(,StopLossInPoints), nous le considérons comme un Stop Loss d'une position d'achat avec n'importe quel identifiant (tant qu'il y a une position d'achat).

La valeur obtenue peut être utilisée dans l'expression de la vérification des conditions, par exemple Buy(M1,StopLossInPoints)>=0 - la position est au seuil de rentabilité. S'il n'y a pas de position ou s'il y a une position avec un identifiant différent, la phase ainsi exprimée dans les règles d'identification ne sera pas identifiée, c'est-à-dire qu'il n'y a pas besoin de tenir compte de deux conditions - vérifier le statut de la position et la valeur Stop Loss. Cependant, dans ce cas, l'existence du Stop Loss devra être vérifiée à l'avance - Buy(M1,StopLossExists); Acheter(M1,StopLossInPoints)>=0.

Lors de la vérification des valeurs, toute expression de comparaison peut être utilisée : ">=", "<=", "==", "!=", ">", "<". La valeur dans la partie droite de la comparaison peut être exprimée sous forme de nombre ou représentée par des variables spéciales : Var1, Var2 ... Var20. "p" ajouté à un nombre ou à une variable suggérera que la valeur sera en plus multipliée par la valeur du point (la variable _Point).

Alternativement, il peut y avoir une expression arithmétique plus complexe dans la partie droite de l'expression de comparaison. Cela peut être comme suit : X1*X2+X3*X4 ("+" peut certainement être remplacé par "-"), où X1, X2, X3 et X4 peuvent être des nombres, des variables ou des commandes d'accès aux données. L'exemple ci-dessous peut théoriquement être considéré comme correct (si nous ne tenons pas compte de sa valeur pratique) :

-BuyStop(BS1,StopLossInPoints)*-SellLimit(SL1,StopLossInPoints)+-SellStop(SS1,StopLossInPoints)*-BuyLimit(SL1,StopLossInPoints)

Le tableau 1 présente la liste de toutes les commandes d'accès.

Tableau 1. Commandes d'accès aux données

Indice Commande Paramètres possibles But
0 Rien Absence de paramètres Il n'y a pas de position ou d'ordre en attente sur le marché
1 Pas de position Absence de paramètres Il n'y a pas de position sur le marché
2 En attente Identifiant d'objet, identifiant de paramètre de commande Un ordre en attente avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors tout ordre en attente quelle que soit la valeur de l'identifiant de l'objet
3 Buy Identifiant d'objet, identifiant de paramètre de position Une position d'achat avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors juste une position d'achat
4 Sell Identifiant d'objet, identifiant de paramètre de position Une position Sell avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c;est juste une position Sell
5 BuyStop Identifiant d'objet, identifiant de paramètre de commande Un ordre BuyStop avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c’est juste un ordre BuyStop
6 SellStop Identifiant d'objet, identifiant de paramètre de commande Un ordre SellStop avec l'identifiant d'objet spécifié. Si l'objet identifié n'est pas précisé, alors c’est juste un ordre SellStop
7 BuyLimit Identifiant d'objet, identifiant de paramètre de commande Un ordre BuyLimit avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c’est juste un ordre BuyLimit
8 SelLimit Identifiant d'objet, identifiant de paramètre de commande Un ordre SellLimit avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c’est juste un ordre SellLimit
9 BuyStopLimit Identifiant d'objet, identifiant de paramètre de commande Un ordre BuyStopLimit avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c’est juste un ordre BuyStopLimit
10 SellStopLimit Identifiant d'objet, identifiant de paramètre de commande Un ordre SellStopLimit avec l'identifiant d'objet spécifié. Si l'identifiant de l'objet n'est pas spécifié, alors c’est juste un ordre SellStopLimit
11 LastDeal Vide, identifiant de paramètre trade Le dernier trade
12 LastDealBuy Vide, identifiant de paramètre trade Le dernier trade est le trade Buy
13 LastDealSell Vide, identifiant de paramètre trade Le dernier trade est le trade Sell
14 NoLastDeal Absence de paramètres Il n'y a pas de données sur le trade dans l'historique ; cela est nécessaire au cas où l'Expert Advisor vient de commencer à opérer sur le compte
15 SignalOpenBuy Absence de paramètres Signal indicateur pour ouvrir une position Buy
16 SignalOpenSell Absence de paramètres Signal indicateur pour ouvrir une position Sell
17 SignalCloseBuy Absence de paramètres Signal indicateur pour fermer une position Buy
18 SignalCloseSell Absence de paramètres Signal indicateur pour fermer une position Sell
19 UserBuy Absence de paramètres Commande utilisateur pour acheter
20 UserSell Absence de paramètres Commande utilisateur pour vendre
21 Offre Absence de paramètres Prix de l'offre
22 Demande Absence de paramètres Prix de demande
23 ThisOpenPrice Absence de paramètres Prix à l'ouverture de l’ordre dont le paramètre est calculé. Il est utilisé dans les commandes d'action pour les ordres en attente, à l'exception des ordres de type StopLimit
24 ThisOpenPrice1 Absence de paramètres Prix à l'ouverture-1 de l'ordre dont le paramètre est calculé. Il est utilisé dans les commandes d'action pour les ordres en attente de type StopLimit
25 ThisOpenPrice2 Absence de paramètres Prix à l'ouverture-2 de l'ordre dont le paramètre est calculé. Il est utilisé dans les commandes d'action pour les ordres en attente de type StopLimit
26 LastEADeal Identifiant d'objet, identifiant de paramètre trade Le dernier trade exécuté par l'Expert Advisor. Le dernier trade qui a "=" dans son commentaire est recherché dans l'historique puis vérifié par rapport à l'identifiant de l'objet
27 LastEADealBuy Identifiant d'objet, identifiant de paramètre trade Le dernier trade exécuté par l'Expert Advisor est le trade Buy. Le dernier trade qui a "=" dans son commentaire est recherché dans l'historique, puis vérifié par rapport à l'identifiant de l'objet et à la direction du trade
28 LastEADealSell Identifiant d'objet, identifiant de paramètre trade Le dernier trade exécuté par l'Expert Advisor est le trade Sell. Le dernier trade qui a "=" dans son commentaire est recherché dans l'historique, puis vérifié par rapport à l'identifiant de l'objet et à la direction du trade
29 NoTradeOnBar Absence de paramètres Il n'y a pas de trade sur la dernière barre

 

Les commandes présentées dans le tableau 1 vous permettent d'accéder aux types d'objets de trade suivants : positions, ordres, trades et ordres à définir. Différents objets ont des ensembles de paramètres différents.

Le tableau 2 présente tous les identifiants de paramètres ainsi que les types d'objets auxquels ils peuvent être appliqués.

Tableau 2. Identifiants d'accès aux données.

Indice Identifiant But Type d'objet de trade
0 ProfitInPoints Gain en points Position
1 ProfitInValute Bénéfice dans la devise de dépôt Positions, trades
2 OpenPrice Cours à l'ouverture Positions, ordres en attente (sauf pour les ordres StopLimit)
3 LastPrice Cours Trades
4 OpenPrice1 Cours transitionnel StopLimit-to-Limit Ordres en attente de type StopLimit. L'identifiant OpenPrice s'applique lorsque l’ordre est transmis vers l’ordre Limit
5 OpenPrice2 Prix de transition StopLimit-to-position Ordres en attente de type StopLimit. L'identifiant OpenPrice s'applique lorsque l’ordre est transmis vers l’ordre Limit
6 StopLossValue Valeur StopLoss Positions, ordres en attente
7 TakeProfitValue Valeur du Take Profit Positions, ordres en attente
8 StopLossInPoints Stop Loss en points Positions, ordres en attente
9 TakeProfitInPoints Take Profit en points Positions, ordres en attente
10 StopLossExists Existence de Stop Loss Positions, ordres en attente
11 TakeProfitExists Existence de Take Profit Positions, ordres en attente
12 Direction Direction 1 - Buy, -1 - Sell Positions, ordres en attente, trades

 

Description des actions

Les actions comprennent l'ouverture et la clôture de positions de marché, la définition, la modification et la suppression d'ordres en attente, l'exécution de fonctions de gestion : Trailing Stop, Breakeven, Trailing Stop pour un ordre en attente (toutes autres fonctions de gestion de position).

Les actions d'ouverture de position et de définition d'ordre impliquent l'utilisation de paramètres nécessaires à l'exécution de ces actions. Ces paramètres seront spécifiés après l’ordre entre parenthèses, de la manière dont les fonctions sont généralement appelées. L'identifiant est le premier paramètre de tous les ordres. Lors de la spécification des paramètres, vous pouvez utiliser des valeurs numériques, des variables, ainsi que des paramètres de la position ou de l'ordre existant. Vous pouvez également utiliser des expressions arithmétiques telles que X1*X2+X3*X4 évoquées dans la section Identification de phase pour tous les paramètres des commandes d'action.

Le tableau 3 montre toutes les commandes d'action.

Tableau 3. Commandes d'action

Indice Commande But
0 Buy(ID,Lot,StopLoss,TakeProfit) Ouvrir une position Buy
1 Sell(ID,Lot,StopLoss,TakeProfit) Ouvrir une position Sell
2 Close(ID) Fermer une position market
3 BuyStop(ID,Lot,Price,StopLoss,TakeProfit) Définir un ordre BuyStop
4 SellStop(ID,Lot,Price,StopLoss,TakeProfit) Définir un ordre SellStop
5 BuyLimit(ID,Lot,Price,StopLoss,TakeProfit) Définir un ordre BuyLimit
6 SellLimit(ID,Lot,Price,StopLoss,TakeProfit) Définir un ordre SellLimit
7 BuyStopLimit(ID,Lot,Price1,Price2,StopLoss,TakeProfit) Définir un ordre BuyStopLimit
8 SellStopLimit(ID,Lot,Price1,Price2,StopLoss,TakeProfit) Définir un ordre SellStopLimit
9 Delete(ID) Supprimer un ordre en attente
10 DeleteAll(ID,BuyStop,SellStop,BuyLimit,SellLimit,BuyStopLimit,SellStopLimit) Suppression des types spécifiés d’ordres en attente
11 Modify(ID,Price1,Price2,StopLoss,TakeProfit) Modification de position ou d’ordre
12 TrailingStop Fonctionnement de la fonction Trailing Stop. Les paramètres fonctionnels sont définis dans la fenêtre des propriétés de l'Expert Advisor
13 BreakEven Fonctionnement de la fonction Breakeven. Les paramètres fonctionnels sont définis dans la fenêtre des propriétés de l'Expert Advisor

 

Les descriptions des paramètres de commande d'action sont fournies dans le tableau 4.

Tableau 4. Paramètres de commande d'action

Paramètre But
ID Identifiant de l'objet de trade (position, ordre)
Lot Volume de lot en unités. La variable Lots qui définit la valeur unitaire se trouve dans la fenêtre des propriétés de l'Expert Advisor
StopLoss Valeur du Stop Loss
TakeProfit Valeur du Take Profit
Cours Valeur de l'ordre en attente (sauf pour les ordres de type StopLimit)
Price1 Cours transitionnel StopLimit-to-Limit
Price2 Cours transitionnel StopLimit-to-position

 

Essayons maintenant de mettre en place les stratégies d'ordre examinées plus tôt dans notre nouveau métalangage.

 

Exemples de stratégies de commande en métalangage

Les programmes sont affichés dans des tableaux où toutes les commandes d'identification de phase et d'action sont organisées en colonnes pour une meilleure compréhension et annotées de commentaires. Attachés à l'article sont tous les programmes dans des fichiers texte sous la forme dans laquelle ils doivent être utilisés dans l'Expert Advisor.

Remarque importante : "+", "-" et "*" ne sont pas autorisés dans les identifiants. Il est préférable d'utiliser simplement des chiffres.

 

Graduation à l'aide d'ordres Limit

La position initiale sera ouverte selon la direction spécifiée par l'utilisateur dans la fenêtre des propriétés. La graduation est autorisée jusqu'à 5 fois (ordres Limit). Il ne peut y avoir que trois ordres sur le marché en même temps.

Tableau 5. Métaprogramme pour graduation à l'aide d'ordres Limit

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
UserBuy
Buy(1,1,0,Ask+Var1p) ;
BuyLimit(2,2,Buy(1,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(3,4,BuyLimit(2,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(4,8,BuyLimit(3,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p)
S'il n'y a pas de position ou d'ordre market, la direction Buy est définie dans les propriétés de l'Expert Advisor, nous ouvrons une position avec un lot initial. Si la position a été ouverte avec succès, nous essaierons de définir trois ordres Limit. Cela dit, chaque ordre suivant ne sera défini avec succès que si le précédent a été défini, car le cours de l’ordre est calculé sur la base du cours de l’ordre précédent.
2 Buy(1) BuyLimit(2,2,Buy(1,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(3,4,BuyLimit(2,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(4,8,BuyLimit(3,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p)
Si la position a été ouverte avec succès dans la phase 1 mais que tous les ordres en attente n'ont pas été définis, les tentatives de définition de tous les ordres en attente se poursuivront.
3 Buy(2) BuyLimit(3,4,Buy(2,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(4,8,BuyLimit(3,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(5,16,BuyLimit(4,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p)
Si le premier ordre Limit (avec l'identifiant 2) a démarré, les tentatives pour définir les deux autres ordres qui auraient dû être définis (mais qui n'ont pas été définis) au cours des phases précédentes se poursuivent et un nouvel ordre est défini de sorte qu'il y ait toujours un total de trois ordres Limit sur le marché.
4 Buy(3) BuyLimit(4,8,Buy(3,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(5,16,BuyLimit(4,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(6,32,BuyLimit(4,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p)
Un autre ordre limite s'est déclenché et nous devons nous assurer de la présence de trois ordres Limit sur le marché, comme dans la phase précédente.
5 Buy(4) BuyLimit(5,16,Buy(4,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p);
BuyLimit(6,32,BuyLimit(5,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p)
Cette phase assure la présence de deux ordres en attente uniquement car le total des ordres est proche du nombre maximum d’ordres.
6 Buy(5) BuyLimit(6,32,Buy(5,OpenPrice)-Var2p,0,ThisOpenPrice+Var3p) Cette phase ne comporte qu'un seul dernier ordre.
7 Buy(6) Modify(6,,,Buy(6,OpenPrice)-Var4p,) Si le dernier ordre a été lancé, un Stop Loss est défini pour celui-ci.
8 Rien ;
UserSell
Sell(1,1,0,Var1p); SellLimit(2,2,Sell(1,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(3,4,SellLimit(2,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(4,8,SellLimit(3,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p)
Similaire à la phase 1 mais en direction Sell.
9 Sell(1) SellLimit(2,2,Sell(1,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(3,4,SellLimit(2,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(4,8,SellLimit(3,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p)
Similaire à la phase 2 mais en direction Sell.
10 Sell(2) SellLimit(3,4,Sell(2,OpenPrice)+Var2p,0,Var3);
SellLimit(4,8,SellLimit(3,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(5,16,SellLimit(4,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p)
Similaire à la phase 3 mais en direction Sell.
11 Sell(3) SellLimit(4,8,Sell(3,OpenPrice)+Var2p,0,Var3);
SellLimit(5,16,SellLimit(4,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p);
SellLimit(6,32,SellLimit(4,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p)
Similaire à la phase 4 mais en direction Sell.
12 Sell(4) SellLimit(5,16,Sell(4,OpenPrice)+Var2p,0,Var3);
SellLimit(6,32,SellLimit(5,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p)
Similaire à la phase 5 mais en direction Sell.
13 Sell(5) SellLimit(6,32,Sell(5,OpenPrice)+Var2p,0,ThisOpenPrice-Var3p) Similaire à la phase 6 mais en direction Sell.
14 Sell(6) Modify(6,,,Sell(6,OpenPrice)+Var4p,) Similaire à la phase 7 mais en direction Sell.
15 NoPos ;
En attente
DeleteAll(,0,0,1,1,0,0) Il y a des commandes en attente mais pas de position. Cela se produit lorsque le Take Profit de la position est déclenché. Dans ce cas, les ordres doivent être supprimés. Après la suppression des ordres, le système passe en phase 1 ou 9. Si l'utilisateur a désactivé la direction initiale pendant le fonctionnement du système, il n'y aura aucune action.

 

Utilisation de variables : Var1 - Take Profit de l'ordre initial, Var2 - niveau auquel les ordres Limit sont fixés par rapport au cours à l'ouverture de l'ordre précédent, Var3 - Stop Loss du dernier ordre.

La figure 5 est le graphique qui montre les performances de ce métaprogramme.

Fig. 5. Performances du métaprogramme de graduation à l'aide d'ordres Limit
Fig. 5. Performances du métaprogramme de graduation à l’aide d'ordres Limit

Remarque : les règles en rapport avec les directions Sell et Buy sont décrites séparément. Chaque niveau d’ordres en attente suivant est calculé en fonction du niveau d’ordre précédent. Si une tentative de définition d'un ordre échoue, le prochain ordre ne sera pas défini en raison de l'absence du paramètre requis. Il serait erroné de calculer le niveau en fonction du cours de la position market. Il y a, dans ce cas, risque que certains ordres manquent.

 

Stop et Reverse

La tâche commence avec deux ordres Stop en attente. Il est permis d'avoir jusqu'à cinq ordres Reverse.

Tableau 6. Métaprogramme pour Stop etd Reverse

Numéro de phase Phase d’identification Actions Commentaires
1 Rien BuyStop(1,1,Ask+Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p);
SellStop(1,1,Bid-Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p)
Il n'y a pas de position ou d'ordre sur le marché ; nous essayons de définir deux ordres Stop avec l'identifiant 1.
2 NoPos ;
BuyStop(1)
SellStop(1,1,Bid-Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Il n'y a pas de position mais il y a un BuyStop avec l'identifiant 1 ce qui signifie qu'il devrait y avoir un SellStop avec l'identifiant 1.
3 NoPos ;
SellStop(1)
BuyStop(1,1,Ask+Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Il n'y a pas de position mais il y a un SellStop avec l'identifiant 1 ce qui signifie qu'il devrait y avoir un BuyStop avec l'identifiant 1.
4 Buy(1) Delete(1);
SellStop(2,2,Buy(1,StopLossValue),ThisOpenPrice+Var2p,ThisOpenPrice-Var3p)
Il existe une position Buy avec l'identifiant 1 dans market ; dans ce cas, il ne devrait pas y avoir d'autres ordres avec l'identifiant 1, mais il devrait y avoir un SellStop avec l'identifiant 2.
5 Sell(1) Delete(1);
BuyStop(2,2,Sell(1,StopLossValue),ThisOpenPrice-Var2p,ThisOpenPrice+Var3p)
Similaire à la phase 4 mais le premier SellStop s'est déclenché.
6 Buy(2) SellStop(3,4,Buy(2,StopLossValue),ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Le deuxième BuyStop a démarré, le troisième SellStop doit donc être défini.
7 Sell(2) BuyStop(3,4,Sell(2,StopLossValue),ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Le deuxième SellStop a démarré, le troisième BuyStop doit donc être défini.
8 Buy(3) SellStop(4,8,Buy(3,StopLossValue),ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Le troisième BuyStop a démarré, le quatrième SellStop doit donc être défini.
9 Sell(3) BuyStop(4,8,Sell(3,StopLossValue),ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Le troisième SellStop a démarré, le quatrième BuyStop doit donc être défini.
10 Buy(4) SellStop(5,16,Buy(4,StopLossValue),ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Le quatrième BuyStop a démarré, le cinquième SellStop doit donc être défini.
11 Sell(4) BuyStop(5,16,Sell(4,StopLossValue),ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Le quatrième SellStop a démarré, le cinquième BuyStop doit donc être défini.
12 Buy(5) SellStop(6,32,Buy(5,StopLossValue),ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Le cinquième BuyStop a démarré, le sixième SellStop doit donc être défini.
13 Sell(5) BuyStop(6,32,Sell(5,StopLossValue),ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Le cinquième SellStop a démarré, le sixième BuyStop doit donc être défini.
14 NoPos ;
BuyStop(2)
Delete(2) Il n'y a pas de position mais nous avons toujours BuyStop ; cela peut se produire lorsque la position a clôturé en Take Profit. Dans ce cas, l’ordre restant est supprimé et le système passe en phase 1.
15 NoPos ;
SellStop(2)
Delete(2) Similaire à la phase 14.
16 NoPos ;
BuyStop(3)
Delete(3) Similaire à la phase 14.
17 NoPos ;
SellStop(3)
Delete(3) Similaire à la phase 14.
18 NoPos ;
BuyStop(4)
Delete(4) Similaire à la phase 14.
19 NoPos ;
SellStop(4)
Delete(4) Similaire à la phase 14.
20 NoPos ;
BuyStop(5)
Delete(5) Similaire à la phase 14.
21 NoPos ;
SellStop(5)
Delete(5) Similaire à la phase 14.
22 NoPos ;
BuyStop(6)
Delete(6) Similaire à la phase 14.
23 NoPos ;
SellStop(6) |
Delete(6) Similaire à la phase 14.

 

Utilisation de variables : Var1 - niveau auquel les ordres initiaux sont définis à partir du cours market courant, Var2 - Stop Loss, Var3 - Take Profit.

La figure 6 est le graphique qui montre les performances d’un tel métaprogramme.

Fig. 6. Performance du métaprogramme pour Stop et Reverse
Fig. 6. Performance du métaprogramme pour Stop et Reverse

 

Construction de pyramides

Une position initiale est ouverte sur la base du signal indicateur. Elle est autorisée à évoluer jusqu'à cinq fois.

Tableau 7. Métaprogramme pour une construction pyramidale"

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
SignalOpenBuy
Buy(1,1,Ask-Var1p,Ask+Var2p*6) Il n'y a pas de position ou d'ordre sur le marché ; nous recevons un signal des indicateurs pour ouvrir une position Buy à la suite de laquelle la position est ouverte. Take Profit est d'abord défini à la distance égale à Var2p*6, à l'étape suivante, il sera défini à Var2p*5 et ainsi de suite pour s'assurer que Take Profit est à peu près au même niveau du cours.
2 Buy(1);
Buy(1,ProfitInPoints)>=Var3
Buy(2,1,Ask-Var1p,Ask+Var2p*5) Il y a une position Buy qui montre un assez bon profit, donc nous évoluons.
3 Buy(2) Modify(2,,,Buy(2,OpenPrice),) La position sur le marché a un indice 2 suggérant que cette position n'est pas initiale et doit avoir été redimensionnée ; Stop Loss devrait être au seuil de rentabilité.
4 Buy(2);
Buy(2,ProfitInPoints)>=Var3
Buy(3,1,Ask-Var1p,Ask+Var2p*4) La position est à nouveau gagnante alors nous évoluons.
5 Buy(3) Modify(3,,,Buy(3,OpenPrice),) Le Stop Loss est déplacé vers le seuil de rentabilité à chaque fois que nous évoluons.
6 Buy(3);
Buy(3,ProfitInPoints)>=Var3
Buy(4,1,Ask-Var1p,Ask+Var2p*3) Similaire à la phase 4.
7 Buy(4) Modify(4,,,Buy(4,OpenPrice),) Similaire à la phase 5.
8 Buy(4);
Buy(4,ProfitInPoints)>=Var3
Buy(5,1,Ask-Var1p,Ask+Var2p*2) Similaire à la phase 4.
9 Buy(5) Modify(5,,,Buy(5,OpenPrice),) Similaire à la phase 5.
10 Buy(5);
Buy(5,ProfitInPoints)>=Var3
Buy(6,1,Ask-Var1p,Ask+Var2p) Similaire à la phase 4.
11 Buy(6) Modify(6,,,Buy(6,OpenPrice),) Similaire à la phase 5.
12 Rien ;
SignalOpenSell
Sell(1,1,Bid+Var1p,Bid-Var2p*6) Similaire à la phase 1 mais par rapport à une position Sell.
13 Sell(1);
Sell(1,ProfitInPoints)>=Var3
Sell(2,1,Bid+Var1p,Bid-Var2p*5) Similaire à la phase 2 mais par rapport à une position Sell.
14 Sell(2) Modify(2,,,Sell(2,OpenPrice),) Similaire à la phase 3 mais par rapport à une position Sell.
15 Sell(2);
Sell(2,ProfitInPoints)>=Var3
Sell(3,1,Bid+Var1p,Bid-Var2p*4) Similaire à la phase 4 mais par rapport à une position Sell.
16 Sell(3); Modify(3,,,Sell(3,OpenPrice),) Similaire à la phase 5 mais par rapport à une position Sell.
17 Sell(3);
Sell(3,ProfitInPoints)>=Var3
Sell(4,1,Bid+Var1p,Bid-Var2p*3) Similaire à la phase 6 mais par rapport à une position Sell.
18 Sell(4); Modify(4,,,Sell(4,OpenPrice),) Similaire à la phase 7 mais par rapport à une position Sell.
19 Sell(4);
Sell(4,ProfitInPoints)>=Var3
Sell(5,1,Bid+Var1p,Bid-Var2p*2) Similaire à la phase 8 mais par rapport à une position Sell.
20 Sell(5); Modify(5,,,Sell(5,OpenPrice),) Similaire à la phase 9 mais par rapport à une position Sell.
21 Sell(5);
Sell(5,ProfitInPoints)>=Var3
Sell(6,1,Bid+Var1p,Bid-Var2p) Similaire à la phase 10 mais par rapport à une position Sell.
22 Sell(6); Modify(6,,,Sell(6,OpenPrice),) Similaire à la phase 11 mais par rapport à une position Sell.

 

Utilisation de variables : Var1 - Stop Loss initial, Var2 - Take Profit du dernier ordre, Var3 - profit en points vers lequel nous évoluons et déplaçons le Stop Loss jusqu'au seuil de rentabilité.

La figure 7 est le graphique qui montre les performances de ce métaprogramme.

Fig. 7. Performance du métaprogramme pour vente en cascade
Fig. 7. Performance du métaprogramme pour vente en cascade

 

Réouverture

Au début, nous avons défini deux ordres Limit. Dès que l'un se déclenche, l'autre est supprimé. Ensuite, lorsque le Stop Loss entre en jeu, une nouvelle position est ouverte jusqu'à ce qu'elle se ferme au Take Profit ou que le nombre maximum de positions (5) soit épuisé.

Tableau 8. Métaprogramme pour la réouverture

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
NoLastDeal
BuyLimit(1,1,Ask-Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p);
SellLimit(1,1,Bid+Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p)
Il n'y a pas de position ou d'ordre sur le marché et l'historique du compte n'indique aucun trade sur le symbole. Cela signifie que c'est le tout début du fonctionnement du système. Deux ordres Limit sont définis comme action initiale.
2 Rien ;
LastDeal(,ProfitInValute)>0
BuyLimit(1,1,Ask-Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p);
SellLimit(1,1,Bid+Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p)
Il n'y a pas de position ou d'ordre sur le marché mais l'historique montre un trade qui s'est clôturé avec profit. Cela suggère que la phase précédente est terminée et que nous devons recommencer depuis le début et définir deux ordres Limit comme dans la phase 1.
3 Rien ;
LastEADeal(5)
BuyLimit(1,1,Ask-Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p);
SellLimit(1,1,Bid+Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p)
Il n'y a pas de position ou d'ordre sur le marché mais l'historique contient une transaction avec le dernier identifiant. Dans ce cas, le profit réalisé dans le trade n'a pas d'importance car la phase est de toute façon considérée comme terminée ; nous commençons par le début et définissons deux ordres Limit comme dans la phase 1.
4 NoPos ;
BuyLimit(1)
SellLimit(1,1,Bid+Var1p,ThisOpenPrice-Var2p,ThisOpenPrice+Var3p) Il n'y a pas de position sur le marché mais nous savons qu'il existe un ordre Limit, ce qui signifie qu'il devrait également y en avoir un deuxième.
5 NoPos ;
SellLimit(1)
BuyLimit(1,1,Ask-Var1p,ThisOpenPrice+Var2p,ThisOpenPrice-Var3p) Similaire à la phase 4.
6 Buy(1);
SellLimit(1)
Delete(1) Il existe une position avec l'identifiant 1. Cela signifie que l'un des ordres Limit s'est déclenché et que le deuxième ordre doit être supprimé.
7 Sell(1);
BuyLimit(1)
Delete(1) Similaire à la phase 6.
8 Rien ;
LastDeal(1,ProfitInValue)<=0;
LastEADeal(1,Direction)==1
Buy(2,2,Ask-Var2p,Ask+Var3p) Il n'y a pas de position et le dernier trade n'était pas rentable. Vérifiez la direction du dernier trade exécuté par l'Expert Advisor ; s'il s'agissait d'une transaction Buy, la prochaine position que vous devez ouvrir est une position Buy.
9 Rien ;
LastDeal(1,ProfitInValue)<=0;
LastEADeal(1,Direction)==-1
Sell(2,2,Bid+Var2p,Bid-Var3p) Il n'y a pas de position et le dernier trade n'était pas rentable. Vérifiez la direction du dernier trade exécuté par l'Expert Advisor ; s'il s'agissait d'un trade Sell, la prochaine position que vous devez ouvrir est une position Sell.
10 Rien ;
LastDeal(2,ProfitInValue)<=0;
LastEADeal(2,Direction)==1
Buy(3,4,Ask-Var2p,Ask+Var3p) Similaire à la phase 8.
11 Rien ;
LastDeal(2,ProfitInValue)<=0;
LastEADeal(2,Direction)==-1
Sell(3,4,Bid+Var2p,Bid-Var3p) Similaire à la phase 9.
12 Rien ;
LastDeal(3,ProfitInValue)<=0;
LastEADeal(3,Direction)==1
Buy(4,8,Ask-Var2p,Ask+Var3p) Similaire à la phase 8.
13 Rien ;
LastDeal(3,ProfitInValue)<=0;
LastEADeal(3,Direction)==-1
Sell(4,8,Bid+Var2p,Bid-Var3p) Similaire à la phase 9.
14 Rien ;
LastDeal(4,ProfitInValue)<=0;
LastEADeal(4,Direction)==1
Buy(5,16,Ask-Var2p,Ask+Var3p) Similaire à la phase 8.
15 Rien ;
LastDeal(4,ProfitInValue)<=0;
LastEADeal(4,Direction)==-1
Sell(5,16,Bid+Var2p,Bid-Var3p) Similaire à la phase 9.

 

Utilisation de variables : Var1 - niveau du cours market auquel les ordres Limit sont définis, Var2 - Stop Loss, Var3 - Take Profit.

La figure 8 est le graphique qui montre les performances de ce métaprogramme.

Fig. 8. Performance du métaprogramme pour Réouverture
Fig. 8. Performance du métaprogramme pour Réouverture

Vous trouverez ci-dessous quelques programmes plus simples pour voir le fonctionnement de fonctions telles que les signaux de trading, le trailing stop et le seuil de rentabilité.

 

Signaux de trading

L'entrée et la sortie dépendent des signaux de trading.

Tableau 9. Métaprogramme pour signaux de trading"

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
SignalOpenBuy;
NoTradeOnBar
Buy(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Buy. Il n'y a aucun trade sur la barre courante et nous ouvrons une position Buy.
2 Rien ;
SignalOpenSell;
NoTradeOnBar
Sell(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Sell. Il n'y a aucun trade sur la barre courante et nous ouvrons une position Sell.
3 SignalCloseBuy;
Buy(1)
Close(1); Il y a une position Buy et un signal pour la fermer ; la position Buy est fermée.
4 SignalCloseSell;
Sell(1)
Close(1); Il y a une position Sell et un signal pour la fermer ; la position Sell est fermée.

 

La figure 9 est le graphique qui montre les performances de ce métaprogramme.

Fig. 9. Performance du métaprogramme pour les signaux de trading
Fig. 9. Performance du métaprogramme pour les signaux de trading

 

Signaux de trading avec un Trailing Stop

Tableau 10. Métaprogramme pour les signaux de trading avec un Trailing Stop

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
SignalOpenBuy;
NoTradeOnBar
Buy(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Buy. Il n'y a aucun trade sur la barre courante et nous ouvrons une position Buy.
2 Rien ;
SignalOpenSell;
NoTradeOnBar
Sell(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Sell. Il n'y a aucun trade sur la barre courante et nous ouvrons une position Sell.
3 SignalCloseBuy;
Buy(1)
Close(1); Il y a une position Buy et un signal pour la fermer ; la position Buy est fermée.
4 SignalCloseSell;
Sell(1)
Close(1); Il y a une position Sell et un signal pour la fermer ; la position Sell est fermée.
5 Buy(1) TrailingStop Il existe une position Buy dans market ; La fonction Trailing Stop doit être activée.
6 Sell(1) TrailingStop Il existe une position Sell dans market ; La fonction Trailing Stop doit être activée.

 

La figure 10 est le graphique qui montre les performances de ce métaprogramme.

Fig. 10. Performance du métaprogramme pour les signaux de trading avec un Trailing Stop
Fig. 10. Performance du métaprogramme pour les signaux de trading avec un Trailing Stop

 

Signaux de trading avec fonction Breakeven

Tableau 11. Métaprogramme pour les signaux de trading avec fonction de seuil de rentabilité

Numéro de phase Phase d’identification Actions Commentaires
1 Rien ;
SignalOpenBuy;
NoTradeOnBar
Buy(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Buy. Puisqu'il n'y a pas de trades sur la barre courante, la position Buy est ouverte.
2 Rien ;
SignalOpenSell;
NoTradeOnBar
Sell(1,1,0,0) Il n'y a pas de position ou d'ordre sur le marché mais nous voyons un signal pour ouvrir une position Sell. Puisqu'il n'y a pas de trades sur la barre courante, la position Sell est ouverte.
3 SignalCloseBuy;
Buy(1)
Close(1); Il y a une position Buy et un signal pour la fermer ; la position Buy est fermée.
4 SignalCloseSell;
Sell(1)
Close(1); Il y a une position Sell et un signal pour la fermer ; la position Sell est fermée.
5 Buy(1) BreakEven Il existe une position Buy dans market ; La fonction seuil de rentabilité doit être activée.
6 Sell(1) BreakEven Il existe une position Sell dans market ; La fonction seuil de rentabilité doit être activée.

 

La figure 11 est le graphique qui montre les performances de ce métaprogramme.

Fig. 11. Performances du métaprogramme pour les signaux de trading avec fonction Breakeven

Fig. 11. Performances du métaprogramme pour les signaux de trading avec fonction Breakeven

 

Interprète d’ordres

L'approche ci-dessus pour formaliser les stratégies d’ordres nous permet de mieux les comprendre et d'élaborer un algorithme pour leur mise en œuvre ultérieure dans un Expert Advisor, ainsi que d'interpréter et de suivre directement les règles élaborées. L’interprète d’Expert Advisor a été créé dans ce but (voir les fichiers joints). Les paramètres de l'Expert Advisor et leurs descriptions sont fournis dans le Tableau 12.

Tableau 12. Paramètres de l’interprète de l’Expert Advisor

Paramètres But
Lots Volume de l’ordre lorsque le coefficient de lot est égal à 1.
UserTradeDir Direction de trade spécifié par l'utilisateur (il est vérifié à la phase d'identification lors de l'exécution des ordres UserBuy et UserSell).
ProgramFileName Nom du fichier du métaprogramme (lorsque vous travaillez sur le compte). Lors du test ou de l'optimisation, le métaprogramme doit être placé dans le fichier TesterMetaProgram.txt
DeInterpritate Interprétation inversée d’ordres. Une fois terminé, un fichier avec le préfixe « De_ » apparaîtra dans le dossier Fichiers et vous pourrez voir comment l'Expert Advisor « a compris » le métaprogramme à partir du fichier ProgramFileName.
Variables utilisateur
Var1 - Var20 Variables utilisateur.
Trailing Stop
TR_ON Activation de la fonction Trailing Stop.
TR_Start Profit de la position aux points auxquels le Trailing Stop commence à fonctionner.
TR_Level Niveau Trailing Stop. Distance en points entre le cours du marché actuel et le Stop Loss.
TR_Step Étape en points pour la modification du Stop Loss.
Break Even
BE_ON Activation de la fonction Breakeven.
BE_Start Profit de la position en points qui déclenche le Breakeven.
BE_Level Niveau auquel le Stop Loss est déplacé lorsque le Breakeven est déclenché. Le BE_Start-BE_Level des points de profit est fixe.
Open Signals
OS_ON Activation des signaux d'ouverture.
OS_Shift Barre sur laquelle les indicateurs sont vérifiés : 0 - nouveau, 1 - achevé.
OS_TimeFrame Délai de l'indicateur.
OS_MA2FastPeriod Période Fast MA.
OS_MA2FastShift Décalage Fast MA.
OS_MA2FastMethod Méthode Fast MA
OS_MA2FastPrice Cours Fast MA.
OS_MA2SlowPeriod Période Slow MA.
OS_MA2SlowShift Décalage Slow MA.
OS_MA2SlowMethod ENUM_MA_METHOD
OS_MA2SlowPrice Cours Slow MA.
Signaux de clôture
CS_ON Activation des signaux de clôture.
CS_Shift Barre sur laquelle les indicateurs sont vérifiés : 0 - nouveau, 1 - achevé.
CS_TimeFrame Délai de l'indicateur.
CS_CCIPeriod Période CCI.
CS_CCIPrice Cours CCI.
CS_CCILevel Niveau CCI supérieur (pour fermer une position Buy). Un signal de fermeture d'une position Buy apparaît au croisement descendant du niveau. C'est exactement le contraire pour fermer une position Sell.

 

Comment fonctionne l’Expert Advisor

Au début, l'Expert Advisor charge le métaprogramme à partir du fichier pour l’examiner et l'analyser. Si une erreur grave est trouvée dans le métaprogramme, une alerte d'erreur apparaîtra. En analysant le métaprogramme, Expert Advisor remplit les structures de données avec des valeurs numériques correspondant aux commandes textuelles pour assurer les performances maximales de l'Expert Advisor. Après une analyse réussie du métaprogramme, le message suivant est imprimé dans le journal : « Initialisation de l'interprète terminée ».

Si la variable DeInterpritate est incluse, l'Expert Advisor exécutera un test d'interprétation inverse des ordres (au cours duquel il sera déconnecté du graphique et tout test dans le Strategy Tester effectué à ce moment-là sera annulé). Lors de l'interprétation inverse, l'Expert Advisor transforme les valeurs numériques trouvées dans les structures en commandes textuelles. Et bien que les entrées d’ordres dans le fichier soient différentes, le métaprogramme interprété à l'envers vous permettra d'avoir une meilleure idée de la façon dont l'Expert Advisor analyse les ordres.

Voyons-le en utilisant la chaîne suivante du fichier métaprogramme :

Buy(6) | Modify(6,,,ThisOpenPrice-Var4p,)

En suivant l'interprétation inverse, cette chaîne se présentera comme suit :

Buy(6)==1*1+0*0; | Modify(6,,,ThisOpenPrice()*1-0.0025*1,)

Comme nous pouvons le voir, un simple ordre Buy(6) est transformé en une expression de comparaison où le côté droit contient l'expression arithmétique X1*X2+X3*X4 qui donne 1 au bout du compte des calculs. Dans le champ action, la variable utilisateur est remplacée par la valeur numérique.

 

Conseils sur la personnalisation de l'Expert Advisor

Certains d'entre vous voudront probablement personnaliser cet Expert Advisor en ajoutant vos propres ordres à la fois à la phase d'analyse et à l'exécution des ordres et inclure d'autres fonctions de gestion de position. En raison de la structure de l'Expert Advisor, une telle personnalisation peut être assez simple, sinon tout le travail effectué sur l'Expert Advisor n'aurait eu aucune valeur pratique.

Ajout d’ordres en matière des données

Une liste d’ordres permettant d'obtenir des données se trouve dans le tableau InfoCommand. Les ordres sont organisés en colonnes avec successivement cinq ordres, ce qui nous permet de compter facilement leur nombre et de trouver la valeur d'indice de l’ordre à ajouter.

Après avoir ajouté l’ordre au tableau InfoCommand, nous ajoutons un nouveau cas correspondant au nouvel indice d’ordre à la structure de commutateur dans la fonction SetValue(). Pour obtenir la valeur, nous devons d'abord sélectionner l'objet à partir duquel la valeur sera obtenue et ensuite seulement obtenir la valeur. Selon le type d'objet à partir duquel les données sont obtenues, différentes fonctions sont utilisées pour sélectionner l'objet. Ces fonctions sont présentées dans le tableau 13.

Tableau 13. Fonctions de l'Expert Advisor pour la sélection des objets de trades

Fonction Objectif et paramètres
Pos.Select(_Symbol) Sélection de position. Méthode de classe standard similaire à la fonction PositionSelect().
SelectOrder(long aType, string aID, bool & aSelected) Fonction de sélection d'un ordre par le symbole de l'Expert Advisor, le type (aType) et la valeur de l'identifiant (aID). Si l'objet est trouvé et sélectionné, la variable aSeleted par référence le retournera comme vrai.
bool SelectLastDeal(int aType,bool & aSelected) Fonction de sélection du dernier trade par le symbole de l'Expert Advisor et type (aType). Si l'objet est trouvé et sélectionné, la variable aSeleted par référence le retournera comme vrai.
SelectLastEADeal(int aType,string aID,bool & aSelected) Fonction de sélection du dernier trade exécuté par l'Expert Advisor par le symbole de l'Expert Advisor et le type (aType). Si l'objet est trouvé et sélectionné, la variable aSeleted par référence le retournera comme vrai.

 

La différence entre le dernier trade et le dernier trade exécuté par l'Expert Advisor réside dans le fait que la dernière transaction couvre les transactions Stop Loss et Take Profit. Les données du dernier trade peuvent être nécessaires pour déterminer le résultat de la clôture de la dernière position, tandis que les informations sur le dernier trade exécuté par l'Expert Advisor peuvent être nécessaires pour identifier la dernière direction du trade ou la phase d'opération de l'Expert Advisor.

En plus des données sur les objets de trade, il est possible d'accéder aux données du marché, telles que le cours, etc. L'important est de s'assurer que les données peuvent être obtenues. Suite à une tentative de sélection de l'objet, il faut s'assurer que l'objet a bien été sélectionné (en vérifiant la valeur de aSelected), récupérer le paramètre requis, affecter sa valeur à la variable Val.Value et la retournera comme vraie.

Le tableau 14 présente les fonctions utilisées pour obtenir les paramètres de divers objets de trade.

Tableau 14. Fonctions de l'Expert Advisor pour obtenir les paramètres de l'objet de trade sélectionné

Fonction Objectif et paramètres
double SelPosParam(int aIndex) Obtention du paramètre de position par index aIndex défini.
double SelOrdParam(int aIndex) Obtention du paramètre d’ordre par index set aIndex.
double SelDealParam(int aIndex) Obtention du paramètre de trade par index aIndex défini.

 

L'indice d'identifiant des données à obtenir est passé dans la fonction. La valeur indice est contenue dans la variable Val.InfoIdentifierIndex.

Lors de l'ajout d'une nouvelle commande d'accès, il peut vous être demandé d'ajouter également l'identifiant des données à obtenir ou d'ajouter uniquement l'identifiant des données à prélever.

 

Ajout d'identifiants de données

Une liste d'identifiants se trouve dans le tableau InfoIdentifier. Nous devons ajouter le nouvel identifiant au tableau, trouver son indice et mettre à jour les fonctions SelPosParam(), SelOrdParam() et SelDealParam(). Les mises à jour peuvent concerner certaines ou toutes les fonctions selon que le nouvel identifiant peut être appliqué à tous les objets de trade. Les mises à jour des fonctions consistent à ajouter un nouveau cas correspondant au nouvel indice d'identifiant à la structure de commutation.

 

Ajout de commandes d'action

Les commandes d'action sont ajoutées au tableau ActCommand. Les commandes du tableau sont organisées dans une chaîne, ce qui rend un peu plus difficile la recherche de l'indice nécessaire. Les éléments représentent une chaîne car en plus d'ajouter une commande, nous devons spécifier le nombre de ses paramètres et son type. Le nombre de paramètres est spécifié dans le tableau ActCmndPrmCnt et le type est indiqué dans le tableau ActCmndType. Les types possibles incluent : 0 - action market, 1 - action avec ordre en attente, 2 - gestion de position.

Une fois la commande ajoutée au tableau, nous trouvons la fonction DoAction() et ajoutons un autre cas pour le nouvel appel de fonction à son commutateur. La nouvelle fonction doit être de type bool et être retournée comme vraie si elle est exécutée avec succès ou fausse en cas d'erreur. Si la vérification des performances de la fonction n'est pas nécessaire, comme dans la fonction Trailing Stop, elle retournera simplement comme vraie.

Gardez à l'esprit que les fonctions qui traitent des ordres en attente, telles que les fonctions de réglage de ceux-ci, nécessitent des vérifications préliminaires de l'existence de l’ordre.

 

Modifications apportées aux fonctions de signal de trading

L'ensemble du travail relatif à l'obtention de signaux de trading dans l'Expert Advisor se fait en deux fonctions (deux fonctions pour les signaux de clôture et deux fonctions pour les signaux d'ouverture).

Les fonctions CloseSignalsInit() (initialisation des signaux de clôture) et OpenSignalsInit() (initialisation des signaux d'ouverture) sont appelées depuis la fonction OnInit() de l'Expert Advisor. Ces fonctions sont responsables du chargement des indicateurs. Les fonctions principales - CloseSignalsMain() (identification des signaux de trading à la clôture) et OpenSignalsMain() (identification des signaux de trading à l’ouverture) sont appelées à partir de la fonction OnTick() sur chaque trait.

Au début de l'exécution de la fonction, GlobalCloseBuySignal, GlobalCloseSellSignal (signaux à la clôture) et GlobalOpenBuySignal, GlobalOpenSellSignal (signaux à l’ouverture) doivent être affectés comme faux puis vrai sur les lectures d'indicateur correspondantes.

De plus, dans fonction de l’Expert Advisor OnDeinit(), vous devez exécuter IndicatorRelease().

 

Pièces jointes

  • eInterpretator.mq5 - Expert Advisor qui doit être placé dans MQL5/Experts du répertoire de données du terminal.

  • LimitAdd.txt - Métaprogramme pour graduation dans l'utilisation d'ordres Limit.

  • StopRev.txt - Métaprogramme Stop et Reverse.

  • Piramiding.txt - Métaprogramme pour vente en cascade.

  • ReOpen.txt.txt - Métaprogramme pour la réouverture.

  • TradeSignals.txt - Métaprogramme pour les signaux de trading.

  • TradeSignalsTR.txt - Métaprogramme pour les signaux de trading avec un Trailing Stop.

  • TradeSignalsBE.txt - Métaprogramme pour les signaux de trading avec fonction Breakeven.

  • limitadd.set - fichier de paramètres pour graduation dans l'utilisation des ordres Limit.

  • stoprev.set - fichier de paramètres Stop et Reverse.

  • piramiding.set - fichier de paramètres pour vente en cascade.

  • open.set - fichier de paramètres pour la réouverture.

  • tradesignals.set - fichier de paramètres pour les signaux de trading.

  • tradesignalstr.set - fichier de paramètres pour les signaux de trading avec un Trailing Stop.

  • tradesignalsbe.set - fichier de paramètres pour les signaux de trading avec fonction Breakeven.

Note. Lorsque vous utilisez des programmes avec des signaux de trading, un Trailing Stop et un Breakeven, n'oubliez jamais d'activer les fonctions correspondantes dans la fenêtre des propriétés de l'Expert Advisor. Lorsque vous testez des stratégies dans Strategy Tester, copiez les fichiers de métaprogramme dans le fichier TesterMetaProgram.txt (cela est nécessaire pour permettre l'utilisation de test à distance). Le fichier doit être placé dans MQL5/Files du répertoire de données du terminal (vous pouvez l'ouvrir depuis le terminal : Fichier -> Ouvrir le dossier de données).

Les performances des programmes affichés dans les graphiques que l'on peut trouver dans la section Exemples de stratégies d’ordre en métalangage sont basées sur les paramètres spécifiés dans les fichiers de paramètres. Des tests ont été effectués au cours des derniers mois (au 29.08.2012), pour le modèle EURUSD H1, OHLC sur M1.

 

Conclusion

Très souvent, le premier sentiment que vous ressentirez probablement lorsque vous commencerez à développer une stratégie relative aux ordres est la confusion - par quoi commencer, ce qu'il faut garder à l'esprit, comment assurer la stabilité de l'Expert Advisor dans un environnement réel, comment combiner l'exécution d'un algorithme de stratégie de trading avec fiabilité de son fonctionnement ?

Cet article est censé, à tout le moins, aider à la fois les développeurs et les traders qui passent des ordres pour le développement de l'EA avec la formalisation initiale de leurs stratégies et les aider à comprendre les étapes du développement stratégique, ce que chaque étape implique et ce qui devrait être pris en compte. L'Expert Advisor eInterpretator ouvre de grandes possibilités pour expérimenter des stratégies de commande avec un minimum de temps et d'effort.

De plus, je voudrais dire que je ne peux pas m’empêcher d’exprimer mon admiration au sujet du terminal MetaTrader 5. La vitesse de fonctionnement de l'Expert Advisor eInterpretator dans Strategy Tester a dépassé mes attentes !

Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/495

Fichiers joints |
files__4.zip (23.39 KB)
Derniers commentaires | Aller à la discussion (2)
570545
570545 | 25 déc. 2021 à 05:20
Bonjour Dimitri je suis nouveau et débutant dans le trading plus précisément le metals XAUUSD donc j'aimerai apprendre les stratégies du trading comment analysé le marché, placé un ordre et clôturé mon ordre etc 
Donc je me permet de venir vers vous pour avoir des leçons si possible 
Cordialement 
GJB
Lionel Niquet
Lionel Niquet | 9 janv. 2022 à 10:37
Thank you very much. A great example of programming.
Un démarrage rapide ou un petit guide pour les débutants Un démarrage rapide ou un petit guide pour les débutants
Bonjour cher lecteur ! Dans cet article, je vais essayer de vous expliquer et de vous montrer comment maîtriser facilement et rapidement les principes de création d'Expert Advisors, de travail avec des indicateurs, etc. Il est destiné aux débutants et ne comportera pas d'exemples difficiles ou abstraits.
Opérations trading en MQL5 - Combien facile Opérations trading en MQL5 - Combien facile
Presque l’ensemble des traders viennent sur la plateforme pour gagner de l'argent, mais certains apprécient également le processus lui-même. Cependant, il n’y a pas que le trading manuel qui peut vous offrir une expérience passionnante. Le développement de systèmes de trading automatisés peut également être très absorbant. Créer un robot de trading peut être aussi intéressant que lire un bon roman policier.
Création d'un Expert Advisor semi-automatique interactif par glisser-déposer axé sur un risque et un ratio R/R prédéfinis Création d'un Expert Advisor semi-automatique interactif par glisser-déposer axé sur un risque et un ratio R/R prédéfinis
Certains traders exécutent tous leurs trades automatiquement, et certains mélangent des trades automatiques et manuels en fonction de la sortie de plusieurs indicateurs. En tant que membre de ce dernier groupe, j'avais besoin d'un outil interactif pour évaluer dynamiquement les niveaux de prix des risques et des rendements directement à partir du graphique. Cet article présentera un moyen d’implémenter un Expert Advisor semi-automatique interactif avec un risque sur actions et un ratio R/R prédéfinis. Les paramètres de risque, de R/R et de taille de lot de l'Expert Advisor peuvent être modifiés pendant l'exécution sur le panneau EA.
Rapide Plongée dans MQL5 Rapide Plongée dans MQL5
Vous avez décidé d'étudier le langage de programmation des stratégies de trading MQL5, mais vous n'y connaissez rien ? Nous avons essayé d'examiner les terminaux MQL5 et MetaTrader 5 du point de vue des nouveaux venus et avons écrit ce court article d'introduction. Dans cet article, vous pouvez trouver une brève idée des possibilités du langage, ainsi que quelques conseils pour travailler avec MetaEditor 5 et le terminal.