English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Un exemple de système de trading axé sur un indicateur Heiken-Ashi

Un exemple de système de trading axé sur un indicateur Heiken-Ashi

MetaTrader 5Exemples | 17 novembre 2021, 15:21
581 0
Dmitry Voronkov
Dmitry Voronkov

Introduction

Avec l'apparition du graphique en chandeliers aux États-Unis, il y a plus de deux décennies, il y a eu une révolution dans la compréhension du fonctionnement des forces haussières et baissières sur les marchés occidentaux. Les chandeliers sont devenus un instrument de trading populaire et les traders ont commencé à travailler avec eux afin de faciliter la lecture des graphiques. Mais la lecture des chandeliers diffère les uns des autres.

L'une de ces méthodes, qui modifie le graphique en chandeliers traditionnel et facilite sa perception, s'appelle la technologie Heikin Ashi.

1. « Nani Desu Ka ? »*

La première publication sur ce sujet, parue en 2004 dans le numéro de février de la revue «Technical Analysis of STOCKS & COMMODITIES», où Dan Valcu a publié un article intitulé «Using The Heikin Ashi Technique» (lien vers l'article original)

Sur son site l'auteur précise qu'au cours de l'été 2003, il a étudié la technologie de l' Ichimoku, et comme cela arrive souvent, a accidentellement découvert quelques diagrammes, sur lesquels il a vu une tendance clairement visible du marché. Il s'est avéré qu'il s'agissait d'un diagramme Heikin-Ashi, ou pour être plus précis, de chandeliers altérés.

Cette méthode d'analyse a été élaborée par un trader japonais qui a connu un grand succès et utilise cette méthode à ce jour. À la surprise de l'auteur, il n'a trouvé aucune autre information connexe dans les livres ou sur Internet, il a donc décidé de la mettre à la disposition de tous les traders en la publiant dans un journal.

La méthode Heikin-Ashi ( heikin en japonais signifie le « milieu » ou « l'équilibre », et ashi signifie « pied » ou « barre »), et est un outil visuel pour évaluer les tendances, leurs direction et force. Ce n'est pas un "Saint Graal" du trading, mais c'est certainement un bon instrument facile à utiliser pour visualiser les tendances.

Examinons comment le calcul de la valeur du chandelier OHLC est effectué :

Clôture de la barre actuelle : haClose = (Open + High + Low + Close) / 4
Ouverture de la barre actuelle : haOpen = (haOpen [before.] + HaClose [before]) / 2
Maximum de la barre actuelle : haHigh = Max (High, haOpen, haClose)
Minimum de la barre actuelle : haLow = Min (Low, haOpen, haClose)

Les valeurs « Open », « High », « Low » et « Close » font référence à la barre actuelle. Le préfixe "ha" indique les valeurs modifiées correspondantes de heikin-ashi.

Pour faciliter la perception des informations du marché, la technologie Heikin-Ashi modifie le graphique en chandeliers traditionnel, en créant des chandeliers dits synthétiques, qui suppriment les irrégularités du graphique normal, offrant une meilleure image des tendances et des consolidations. En examinant simplement le graphique en chandeliers, créé à l'aide de cette méthode, vous obtenez un bon aperçu du marché et de son style :

Figure 1. À gauche se trouve le graphique en chandeliers régulier (a), à droite (b) le graphique Heikin-Ashi

Fig. 1 montre la différence entre les chandeliers japonais traditionnels et les chandeliers Heiken Ashi. La particularité de ces graphiques est que dans une tendance à la hausse la majorité des bougies blanches n'ont pas d'ombre. Dans une tendance à la baisse, il n'y a pas d'ombre supérieure pour la majorité des bougies noires. Le graphique Heiken Ashi ne montre aucune cassure, donc une nouvelle bougie s'ouvre au niveau du milieu de la précédente.

Les chandeliers sur le graphique Heiken-Ashi montrent une plus grande étendue d'indication de tendance que les chandeliers traditionnels. Lorsque la tendance s'affaiblit, les corps des chandeliers se réduisent et les ombres grandissent. Le changement de couleur des chandeliers est un signal d'achat/vente. Il est plus pratique de déterminer la fin d'un mouvement de correction, sur la base de ces graphiques.

Cet indicateur fait partie de MetaTrader 5 et vous pouvez le localiser dans le dossier «Indicateurs \\ Exemples \\ Heiken_Ashi.mq5». Avant d'installer l'indicateur sur le graphique, je recommande de dessiner le graphique en linéaire. Aussi, dans les propriétés du graphique, dans l'onglet "Général", décochez l'item "du haut du graphique".

Je voudrais encore une fois attirer votre attention sur le fait que la méthode Heiken-Ashi n'est pas un "Saint Graal". Pour le prouver, je vais tenter de créer un simple système de trading (TS) en utilisant uniquement cette technique.

Pour le faire, nous devons créer un simple Expert Advisor, en utilisant le langage de programmation MQL5 et des classes de bibliothèque standard, puis le tester sur des données historiques, en utilisant le testeur de stratégie du terminal MetaTrader 5.

2. Algorithme du système de trading

Sans compliquer les choses, nous créons l'algorithme en utilisant les six règles de base de la procédure Heiken-Ashi, proposées par Dan Valcu sur le site suivant : http://www.educofin. com/

  1. Une tendance à la hausse - chandelier bleu haClose> haOuvre
  2. Une tendance à la baisse - chandelier rouge haClose <haOpen
  3. Une forte tendance à la hausse - un chandelier bleu, dans lequel il n'y a pas de Low haOpen == haLow
  4. Une forte tendance à la baisse - un chandelier rouge, qui n'est pas High haOpen == haHigh
  5. Consolidation - une séquence de chandeliers avec de petits corps (de n'importe quelle couleur) et de longues ombres
  6. Changement de tendance - un chandelier avec un petit corps et de longues ombres de la couleur opposée. Ce n'est pas toujours un signal fiable et peut parfois n'être qu'une partie de la consolidation (5).

Une tendance de (1,2) est facile à comprendre - si nous sommes dans une transaction, nous maintenons simplement la position, déplaçant le stop de 1-2 points en dessous/au-dessus du chandelier précédent.

Une forte tendance (3,4) nous agissons de la même manière - en tirant le stop.

Une consolidation (5) et un changement de tendance (6), clôt la position (si elle n'est pas clôturée par le stop), mais il faut alors décider d'ouvrir ou non une position opposée. Pour prendre la décision, nous devons déterminer d'une certaine manière une consolidation ou un renversement a lieu. Nous aurons besoin d'un filtre, construit sur des indicateurs, une analyse en chandeliers ou une analyse graphique.

Les objectifs de notre article ne comprend pas la mise en place d'une stratégie rentable, mais qui sait ce que nous allons accomplir en conséquence. Par conséquent, supposons que l'apparition d'une bougie de couleur opposée, nous clôturerons la position et en ouvrirons une nouvelle avec la direction opposée.

Et donc, notre algorithme se présente comme suit :

  1. Après la formation d'une bougie de couleur opposée, nous clôturons la position précédente, si nous en avons une, et ouvrons une position à l'ouverture d'une nouvelle bougie, en fixant un stop 2 points en dessous/au-dessus du minimum/maximum de la bougie précédente .
  2. La tendance - nous déplaçons le stop 2 points en dessous/au-dessus du minimum/maximum de la bougie précédente.
  3. Avec une tendance forte, nous prenons les mêmes mesures que nous avons prises avec la tendance, c'est-à-dire déplacer le stop.

Dans l'ensemble, tout est assez simple et, espérons-le, clair pour le lecteur. Nous allons maintenant implémenter cela sur le langage de MQL5.

3. Programmation de l'Expert Advisor en MQL5

Pour créer un Expert Advisor, nous n'aurons besoin que d'un seul paramètre d'entrée - la taille du lot, les deux fonctions de gestion d'événements OnInit (), OnTick () et notre propre fonction CheckForOpenClose ().

Pour définir les paramètres d'entrée dans MQL5, nous utilisons des variables d'entrée.

//--- input parameters
input double Lot=0.1;    // Port size

La fonction OnInit () est le gestionnaire d'événements Init. Les événements d'initialisation sont générés immédiatement après le chargement de l'Expert Advisor.

Dans le code de cette fonction, nous allons connecter l'indicateur à l'Expert Advisor. Comme je l'ai mentionné ci-dessus, le MetaTrader 5 standard comprend un indicateur Heiken_Ashi.mq5.

Vous vous demandez peut-être pourquoi il y a tant de complexité, si nous avons les formules de calcul de l'indicateur, et que nous pouvons calculer les valeurs dans le code de l'Expert Advisor. Oui, je l'admets, c'est possible, mais si vous regardez bien l'un d'eux :

haOpen=(haOpen[prev.]+haClose[prev])/2

vous verrez qu'il reprend les valeurs précédentes, ce qui crée un certain désagrément pour les calculs indépendants et nous complique la vie. Par conséquent, au lieu de calculs indépendants, nous exploiterons les possibilités de MQL5 pour connecter notre indicateur personnalisé, notamment la fonction iCustom.

Pour le faire, on ajoute au corps de la fonction OnInit() la ligne suivante :

   hHeiken_Ashi=iCustom(NULL,PERIOD_CURRENT,"Examples\\Heiken_Ashi");

et nous obtenons une variable globale hHeiken_Ashi - handle de l'indicateur Heiken_Ashi.mq5, dont nous aurons besoin à l'avenir.

La fonction OnTick() est le gestionnaire de l'événement NewTick() , qui est généré avec l'apparition d'un nouveau tick.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check the ability of trading and the calculated number of bars
   if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      if(BarsCalculated(hHeiken_Ashi)>100)
        {
         CheckForOpenClose();
        }
//---
  }

La fonction TerminalInfoInteger (TERMINAL_TRADE_ALLOWED) vérifie si le trading est autorisé ou non. À l'aide de la fonction BarsCalculated (HHeiken_Ashi), nous vérifions la quantité de données calculées pour l'indicateur demandé, dans notre cas Heiken_Ashi.mq5.

Et si les deux conditions sont remplies, nous constatons l'accomplissement de notre fonction CheckForOpenClose() où le travail principal a lieu. Regardons-le plus attentivement

Puisque les conditions de notre TS prévoient que l'installation des commandes a lieu à l'ouverture d'un nouveau chandelier, nous devons déterminer si un nouveau chandelier s'est ouvert ou non. Il existe de nombreuses façons de le faire, mais la plus simple est de vérifier le volume de tiques. Ainsi, si le volume de tick est égal à un, cela indique l'ouverture d'une nouvelle barre, et vous devez vérifier les conditions de TS et transmettre des commandes.

Nous l'implémentons de la manière suivante :

//--- process the orders only after receiving the first tick of the new candlestick 
   MqlRates rt[1];
   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[0].tick_volume>1) return;

Créez un tableau de variables de type MqlRates de la taille d'un élément. À l'aide de la fonction CopyRates(), obtenez dedans les valeurs de la dernière barre. Vérifiez ensuite le volume de tick et s'il est supérieur à un, terminez la fonction, sinon, continuez les calculs.

Ensuite, en utilisant la directive #define, nous déclarons quelques constantes mnémoniques :

//--- to check the conditions we need the last three bars
#define  BAR_COUNT   3
//--- the number of indicator buffer for storage Open
#define  HA_OPEN     0
//--- the number of the indicator buffer for storage High
#define  HA_HIGH     1
//--- the number of indicator buffer for storage Low
#define  HA_LOW      2
//--- the number of indicator buffer for storage Close
#define  HA_CLOSE    3

Ensuite, nous déclarons le tableau :

double   haOpen[BAR_COUNT],haHigh[BAR_COUNT],haLow[BAR_COUNT],haClose[BAR_COUNT];

et en utilisant la fonction CopyBuffer() nous obtenons les valeurs de l'indicateur dans les tableaux appropriés.

   if(CopyBuffer(hHeiken_Ashi,HA_OPEN,0,BAR_COUNT,haOpen)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_HIGH,0,BAR_COUNT,haHigh)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_LOW,0,BAR_COUNT,haLow)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_CLOSE,0,BAR_COUNT,haClose)!=BAR_COUNT)
     {
      Print("CopyBuffer from Heiken_Ashi failed, no data");
      return;
     }

Je souhaite que vous mettiez plus d’accent sur la façon dont les données sont stockées dans les variables du tableau.

La barre "la plus ancienne" (historiquement) est stockée dans le premier élément du tableau (zéro).

La barre "la plus jeune" (actuelle) de cette dernière, BAR_COUNT-1 (Fig. 2).

Figure 2. L'ordre des chandeliers et les valeurs des indices du tableau

Figure 2. L'ordre des chandeliers et les valeurs des indices du tableau

Nous avons donc obtenu les valeurs OHLC Heiken-Ashi, et il reste à vérifier les conditions d'ouverture ou de maintien d'une position.

Examinez en détail le traitement du signal de vente.

Comme je l'ai souligné précédemment, nous avons obtenu les valeurs de trois chandeliers Heiken-Ashi. La valeur actuelle est située dans les cellules avec le numéro [BAR_COUNT-1 = 2], et cela ne nous est pas nécessaire. Les valeurs précédentes sont dans les cellules [BAR_COUNT-2 = 1], et les barres précédentes sont dans [BAR_COUNT-3 = 0] (voir Fig. 2), et sur la base de ces deux barres, nous vérifierons les conditions générales de l’engagement du trade.

Ensuite, nous devons vérifier les positions ouvertes sur l'instrument. Pour le faire, nous utiliserons la classe CPositionInfo des classes de trading de la bibliothèque par défaut. Cette classe nous permet d'obtenir des informations sur les positions ouvertes. En utilisant la méthode Select (_Symbol) nous déterminons la présence de positions ouvertes sur notre instrument, et si elles sont présentes, alors en utilisant la méthode Type() nous déterminons le type de positions ouvertes.

Si à l'heure actuelle nous avons une position ouverte à acheter, alors nous devons la clôturer.

Pour ce faire, nous utilisons les méthodes de la classe CTrade de la bibliothèque de classes standard, qui est conçue pour effectuer des opérations de trading.

En utilisant la méthode PositionClose (symbole de chaîne const, écart ulong), nous clôturerons l'achat, où le symbole est le nom de l'instrument, et le deuxième paramètre, écart, est l'écart admissible du cours de clôture.

Ensuite, nous vérifions la combinaison de chandeliers selon notre TS. Puisque nous avons déjà vérifié la direction des chandeliers récemment formés (avec l'indice [BAR_COUNT-2]), il suffit de vérifier le chandelier qui le précède (avec l'indice [BAR_COUNT-3]), et d'effectuer les étapes nécessaires pour ouvrir la position.

     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_BUY)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haHigh[BAR_COUNT-2],_Digits)+_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss<stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]<haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }

Ici, il est nécessaire de porter votre attention sur l'utilisation de trois méthodes de la classe CTrade :

  • Méthode PositionOpen (symbol, order_type, volume, price, sl, tp, comment) Utilisée pour ouvrir une position où symbole est le nom de l'instrument, order_type - type de commande, volume - la taille du lot, price - prix d'achat, sl - Stop , tp - profit, commentaire - un commentaire.
  • Méthode PositionModify (symbole, sl, tp) Utilisée pour changer la valeur du stop et du profit, où symbole - le nom de l'instrument, sl - Stop, tp - profit. Je souhaiterais attirer votre attention sur le fait qu'avant d'utiliser cette méthode, vous devez vérifier la présence d'une position ouverte.
  • La méthode ResultRetcodeDescription() permet d'obtenir la description de l'erreur de code sous forme d’une ligne.

Dans le calcul de la variable stop_loss, la valeur du haHigh [BAR_COUNT-2] est un calcul, reçu de l'indicateur, et doit être normalisé, effectué par la fonction NormalizeDouble (haHigh [BAR_COUNT-2], _Digits) afin d'être utilisé correctement .

Ceci termine le traitement du signal de vente.

Pour acheter, nous utilisons le même principe.

Voici le code complet de l'Expert Advisor :

//+------------------------------------------------------------------+
//|                                           Heiken_Ashi_Expert.mq5 |
//|                                               Copyright VDV Soft |
//|                                                 vdv_2001@mail.ru |
//+------------------------------------------------------------------+
#property copyright "VDV Soft"
#property link      "vdv_2001@mail.ru"
#property version   "1.00"

#include <Trade\AccountInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>

//--- the list of global variables
//--- input parameters
input double Lot=0.1;    // Lot size
//--- indicator handles
int      hHeiken_Ashi;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   hHeiken_Ashi=iCustom(NULL,PERIOD_CURRENT,"Examples\\Heiken_Ashi");
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- trading should be allowed and number of bars calculated>100
   if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      if(BarsCalculated(hHeiken_Ashi)>100)
        {
         CheckForOpenClose();
        }
//---
  }
//+------------------------------------------------------------------+
//| Checking of the position opening conditions                      |
//+------------------------------------------------------------------+
void CheckForOpenClose()
  {
//--- process orders only when new bar is formed
   MqlRates rt[1];
   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[0].tick_volume>1) return;

//--- to check the conditions we need the last three bars
#define  BAR_COUNT   3
//--- number of the indicator buffer for storage Open
#define  HA_OPEN     0
//--- number of the indicator buffer for storage High
#define  HA_HIGH     1
//--- number of the indicator buffer for storage Low
#define  HA_LOW      2
//--- number of the indicator buffer for storage Close
#define  HA_CLOSE    3

   double   haOpen[BAR_COUNT],haHigh[BAR_COUNT],haLow[BAR_COUNT],haClose[BAR_COUNT];

   if(CopyBuffer(hHeiken_Ashi,HA_OPEN,0,BAR_COUNT,haOpen)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_HIGH,0,BAR_COUNT,haHigh)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_LOW,0,BAR_COUNT,haLow)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_CLOSE,0,BAR_COUNT,haClose)!=BAR_COUNT)
     {
      Print("CopyBuffer from Heiken_Ashi failed, no data");
      return;
     }
//---- check sell signals
   if(haOpen[BAR_COUNT-2]>haClose[BAR_COUNT-2])// bear candlestick 
     {
      CPositionInfo posinf;
      CTrade trade;
      double lot=Lot;
     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_BUY)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haHigh[BAR_COUNT-2],_Digits)+_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss<stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]<haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
     }
//---- check buy signals
   if(haOpen[BAR_COUNT-2]<haClose[BAR_COUNT-2]) // bull candle
     {
      CPositionInfo posinf;
      CTrade trade;
      double lot=Lot;
     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_SELL)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haLow[BAR_COUNT-2],_Digits)-_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_BID)-SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss>stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]>haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }

     }
  }
//+------------------------------------------------------------------+

Le texte complet de l'Expert Advisor se trouve dans le fichier joint Heiken_Ashi_Expert.mq5. Copiez-le dans le catalogue .. \\ MQL5 \\ Experts, puis lancez MetaEditor via le menu "Tools -&gt; Editor MetaQuotes Language", ou utilisez la touche «F4». Ensuite dans la fenêtre « Navigateur », ouvrez l'onglet « Experts », et téléchargez le fichier Heiken_Ashi_Expert.mq5, en double-cliquant dessus, dans la fenêtre d'édition et compilez-le en appuyant sur « F7 ».

Si toutes les opérations ont été effectuées correctement,donc dans l'onglet "Expert Advisors", dans la fenêtre "Navigator", le fichier Heiken_Ashi_Expert sera créé. L'indicateur Heiken_Ashi.mq5 doit être compilé de la même manière, il se trouve dans le catalogue \\ MQL5 \\ Indicateurs \\ Exemples \\.

4. Tester le système de trading sur des données historiques

Pour vérifier la viabilité de notre système de trading, nous utiliserons le testeur de stratégie MetaTrader 5, qui fait partie de la plateforme de trading. Le testeur est lancé via le menu du terminal "Affichage -&gt; Testeur de stratégie " ou en appuyant sur la combinaison de touches « Ctrl + R ». Une fois celui-ci lancé, on localise l'onglet "Paramètres" (Figure 3). 

Figure 3. Paramètres du testeur de

Figure 3.  Paramètres du testeur de stratégie

Configuration de l'Expert Advisor - choisissez parmi une liste de nos Expert Advisors, indiquez l'intervalle de test entre début 2000 et fin 2009, le montant du dépôt initial est de 10 000 USD, désactivez l'optimisation (puisque nous n'avons qu'un seul paramètre d'entrée, et nous voulons juste vérifier la viabilité du TS).

Les tests seront effectués en utilisant deux paires de devises. J'ai décidé de choisir les paires de devises EURUSD et GBPUSD.

Pour les tests, j'ai décidé de prendre les intervalles de temps suivants : H3, H6 et H12. Vous demanderez pourquoi ? La réponse est parce que je voulais tester le TS sur des intervalles de temps, qui n'étaient pas présents dans le terminal MetaTrader4.

Alors on y va. Nous sélectionnons la devise du test EURUSD, la période de test H3, et cliquons sur "Démarrer". À la fin des tests, nous constatons deux nouveaux onglets dans la fenêtre du testeur : "Résultats" (Fig. 4) et "Graphique" (Fig. 5).

Figure 4. La stratégie de résultats testant EURUSD H3

Figure 4. Le test de la La stratégie de résultats l'EURUSD S3

D'après les résultats des tests (Fig. 4), vous pouvez constater que pour la période allant du début 2000 à la fin 2009, avec les paramètres donnés, le TS a généré une perte de -2560,60$ USD.

Le graphique (Fig. 5) indique la répartition des profits et des pertes dans le temps, ce qui nous offre l'opportunité d'examiner les performances de TS au fil du temps et de faire une analyse des erreurs du système.

Figure 5. Onglet "Graph" du Strategy Tester ( EURUSD H3)

Figure 5. Onglet "Graphique" du Strategy Tester (EURUSD H3)

J'ai presque oublié de mentionner que l'onglet "Résultats", par défaut, crée un rapport simple. De plus, nous avons la possibilité de visualiser les transactions, les commandes et les rapports de fichiers écrits.

Pour le faire, nous plaçons simplement le curseur sur l'onglet, cliquez sur le bouton droit de la souris et sélectionnez l'élément de menu approprié :

Figure 6. Menu contextuel de l'onglet "Résultats" du Strategy Tester

Figure 6. Menu contextuel de l'onglet Résultats du testeur de stratégie

Voici les résultats des tests effectués sur une période de six heures (H6) :

Figure 7. Onglet "Résultats" du Strategy Tester ( EURUSD H6)

Figure 7. Onglet Résultats du testeur de stratégie (EURUSD H6)

sur une période de douze heures (H12).

Figure 8. Onglet Strategy Tester Results (EURUSD H12)

Figure 8.  Testeur de Stratégie Onglet des résultats (EURUSD H12)

Il semble que sur la paire de devises, comme l'EURUSD, notre stratégie ne soit pas efficace. Mais on peut remarquer que la variation de la période de travail affecte considérablement le résultat.

Nous étendons notre test à la paire de devises GBPUSD, afin de tirer des conclusions définitives sur l'efficacité de notre TS.

Figure 9. Onglet Résultats du testeur de stratégie (GBPUSD H3)

Figure 9. Onglet Résultats du testeur de stratégie (GBPUSD H3)

Figure 10. Onglet Résultats du testeur de stratégie (GBPUSD H6)

Figure 10. Onglet Résultats du testeur de stratégie (GBPUSD H6)


Figure 11. Onglet Strategy Tester Results (GBPUSD H12)

Figure 11. Onglet Résultats du testeur de stratégie (GBPUSD H12)

Figure 12. Onglet Graphique du testeur de stratégie (GBPUSD H12)

Figure 12. Onglet Graphique du testeur de stratégie (GBPUSD H12)

Après avoir analysé les résultats du test, nous constatons qu'en utilisant une paire de devises, telle que le GBPUSD, notre système a obtenu des résultats positifs dans deux cas distincts. Sur une période de douze heures, nous avons reçu un bénéfice considérable de 8903,23 USD, bien qu'il ait été perçu sur neuf ans.

Ceux qui sont intéressés peuvent tester d'autres paires de devises. Mon hypothèse est que plus la paire est volatile, meilleur sera le résultat obtenu et plus la période de temps sera longue.

Conclusion

En conclusion, j'insiste sur le fait que ce système de trading n'est pas le "Saint Graal" et ne peut pas être utilisé tout seul.

Cependant, si avec des signaux supplémentaires (analyse en chandelier, analyse des vagues, indicateurs, tendances) nous séparons les signaux d'inversion des signaux de consolidation, alors sur certains instruments de trading volatiles, cela peut être tout à fait viable, bien qu'il soit peu probable d'apporter un profit "fou".

__________________________________ 
* "Nani Desu Ka?" - Qu'est-ce que c'est?  (Japonais)

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

Fichiers joints |
Guide d'écriture d'une DLL pour MQL5 en Delphi Guide d'écriture d'une DLL pour MQL5 en Delphi
L'article examine le mécanisme de création d'un module DLL, en utilisant le langage de programmation populaire d' ObjectPascal, dans un environnement de programmation Delphi. La documentation, fournie dans cet article, est conçue pour cibler principalement les programmeurs débutants, qui travaillent avec des problèmes, qui dépassent les limites du langage de programmation intégré de MQL5, en connectant les modules DLL externes.
Un Gestionnaire de Commande  Virtuelle pour suivre les commandes  dans l'environnement MetaTrader 5 axé sur la position Un Gestionnaire de Commande Virtuelle pour suivre les commandes dans l'environnement MetaTrader 5 axé sur la position
Cette bibliothèque de classes peut être ajoutée à un Expert Advisor MetaTrader 5 pour lui permettre d'être écrite avec une approche axée sur les commandes largement comparable à MetaTrader 4, par rapport à l'approche axée sur la position de MetaTrader 5. Il le fait en gardant une trace des commandes virtuelles sur le terminal client MetaTrader 5, tout en maintenant un arrêt de protection du courtier pour chaque position pour la protection contre les catastrophes.
Analyser  les modèles de chandeliers Analyser les modèles de chandeliers
La réalisation d'un graphique en chandeliers japonais et l'analyse des modèles de chandeliers constituent un domaine passionnant d'analyse technique. L'avantage des chandeliers est qu'ils représentent les données de sorte que vous puissiez suivre la dynamique à l'intérieur des données. Dans cet article, nous analysons les types de chandeliers, la classification des modèles de chandeliers et présentons un indicateur pouvant déterminer les modèles de chandeliers.
Création d'un Indicateur Multidevise à l'Aide d'un Certain Nombre de Tampons d'Indicateurs Intermédiaires Création d'un Indicateur Multidevise à l'Aide d'un Certain Nombre de Tampons d'Indicateurs Intermédiaires
Il y a eu récemment un intérêt grandissant pour les analyses de bloc du marché FOREX. MQL5 ouvre de nouveaux horizons de recherche des tendances du mouvement des paires de devises. Une caractéristique clé de MQL5, qui le distingue de MQL4, est la possibilité d'utiliser un nombre illimité de tampons d'indicateurs. Cet article décrit un exemple de création d'un indicateur multi-devises.