Trading-Attitude
Les meilleurs indicateurs techniques
-

Trading automatique : coder un EA complet sans indicateur – partie 1

MQL4 trading automatiqueTrading Automatique

Un Expert Advisor en MQL4 complet

Dans cette 3ème leçon sur le trading automatique avec MetaTrader et MQL4 nous allons coder un Expert Advisor tiré du numéro de mai 2013 du magazine Currency Trader.

Cette leçon MQL4 sera divisée en 2 parties (2 articles). La première introduira quelques notions pas encore abordées dans les leçons précédentes, tandis que la seconde mettra le tout ensemble et nous y testerons l’EA.

Ce système de trading a la particularité de ne pas utiliser d’indicateur. Il n’utilise que les cours.

Pourquoi ai-je choisi ce système de trading ?

Tout simplement parce que les courbes des tests m’ont semblé intéressantes.

Attaquons tout de suite.

Le système de trading automatique

Les règles du système de trading sont les suivantes.

Entrée longue ou sortie de position courte :

  • 1. La clôture d’aujourd’hui est inférieure à l’ouverture (Close[0] < Open[0]).
  • 2. L’ouverture d’aujourd’hui est supérieure au plus bas d’il y a 2 jours  (Open[0] > Low[2]).
  • 3. Le range du jour est supérieur à celui d’il y a 7 jours (Range[0] > Range[7]).
  • 4. La clôture d’hier est supérieure à celle d’il y a 7 jours (Close[1] > close[7]).
  • 5. La clôture d’hier est supérieure au plus haut d’il y a 4 jours (Close[1] > high[4]).

Entrée en position courte ou sortie de position longue :

  • 1. La clôture d’aujourd’hui est supérieure à l’ouverture (Close[0] > Open[0]).
  • 2. L’ouverture d’aujourd’hui est inférieure au plus haut d’il y a 2 jours  (Open[0] < High[2]).
  • 3. Le range du jour est supérieur à celui d’il y a 7 jours (Range[0] > Range[7]).
  • 4. La clôture d’hier est inférieure à celle d’il y a 7 jours (Close[1] < close[7]).
  • 5. La clôture d’hier est inférieure au plus bas d’il y a 4 jours (Close[1] > low[4]).

Dans ce système de trading on est toujours en position. Lorsque l’on ferme une position longue on ouvre une position en sens inverse.

Le code correspondant aux critères

Dans l’Expert Advisor cela va donner le code suivant.

   double pclose = iClose(Symbol(),PERIOD_D1,1);
   double popen = iOpen(Symbol(),PERIOD_D1,1);
   double phigh = iHigh(Symbol(),PERIOD_D1,1);
   double plow = iLow(Symbol(),PERIOD_D1,1);
   double p2low = iLow(Symbol(),PERIOD_D1,3);
   double p2high = iHigh(Symbol(),PERIOD_D1,3);
   double p7low = iLow(Symbol(),PERIOD_D1,8);
   double p7high = iHigh(Symbol(),PERIOD_D1,8);
   double p1close = iClose(Symbol(),PERIOD_D1,2);
   double p7close = iClose(Symbol(),PERIOD_D1,8);
   double p4high = iHigh(Symbol(),PERIOD_D1,5);
   double p4low = iLow(Symbol(),PERIOD_D1,3);

   bool crit1 = pclose < popen;
   bool crit2 = popen > p2low;
   double range = phigh - plow;
   double range7 = p7high - p7low;
   bool crit3 = range > range7;
   bool crit4 = p1close > p7close;
   bool crit5 = p1close > p4high;

   bool critBuy = crit1 && crit2 && crit3 && crit4 && crit5;

   if (critBuy) {
      OpenBuy = true;
   } else {
      OpenBuy = false;
   }

   crit1 = pclose > popen;
   crit2 = popen < p2high;
   crit3 = range > range7;
   crit4 = p1close < p7close;
   crit5 = p1close < p4low;

   bool critSell = crit1 && crit2 && crit3 && crit4 && crit5;

   if (critSell) {      
      OpenSell = true;
   } else {
      OpenSell = false;
   }

Ouvrir les positions en trading automatique

Pour ouvrir les positions on utilise la fonction OrderSend.

Les paramètres de cette fonction MQL4 sont :

  • le symbole (la paire de devise ou l’action)
  • le sens (long ou court, avec les constantes OP_SELL ou OP_BUY)
  • le nombre de lots
  • le prix d’achat (Bid ou Ask)
  • le slippage maximal
  • le stop loss (0 s’il n’y en a pas) (voir ici ce qu’est un SL)
  • le Target Price (0 s’il pas fixé)
  • un commentaire
  • le nombre magique
  • l’expiration (0 si pas défini)
  • la couleur de la flèche sur le graphique qui indiquera l’exécution de l’ordre.

Voici le code :

void openOrder() {
   RefreshRates();
   double SL=0;
   double TP=0;
   double Ticket = 0;

   bool weAreLong = orderNumber(MagicNumberBuy) > 0;
   bool weAreShort = orderNumber(MagicNumberSell) > 0;
   bool notInMarket = !weAreLong && !weAreShort;

   if (OpenBuy && (weAreShort || notInMarket)) {
      if (weAreShort) {
         closeTrades(MagicNumberSell);
      }
      Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP,"Simple",MagicNumberBuy,0,Green);
      if (Ticket>=0) {
         OpenBuy = false;
      }
   } else if (OpenSell && (weAreLong || notInMarket)) {
      if (weAreLong) {
         closeTrades(MagicNumberBuy);
      }
      Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,2,SL,TP,"Simple",MagicNumberSell,0,Green);
      if (Ticket>=0) {
         OpenSell = false;
      }
   }

}

Les positions longues et les positions courtes ont des nombres magiques différents. Cela permet de les distinguer plus facilement.

Fermer les positions de trade

Pour fermer les positions on fait une boucle sur les positions selon leur nombre magique. Et on utilise la fonction OrderClose.

Le code est le suivant.

void closeTrades(int mgNb) {
  int total = orderNumber(mgNb);
  for(int j=total-1;j>=0;j--) {
    OrderSelect(j, SELECT_BY_POS);
    int type   = OrderType();

   if (OrderMagicNumber() != mgNb) {
         continue;
   }
    bool result = false;

    switch(type) {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                          break;

      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

    }
  }
}

La suite de ce système de trading automatique…

…dans la prochaine leçon.

Nous venons de voir comment passer des ordres et les fermer. Les fonctions SendOrder et OrderClose sont le cœur du trading automatique avec MetaTrader.

Nous verrons dans de futures leçons les autres types d’ordres.

Dans la prochaine leçon vous saurez si ce système de trading automatique est performant.

Vous aurez aussi le code complet de cet Expert Advisor.

À bientôt !

PS : formez-vous à MQL4 grâce à notre partenaire et sa formation en vidéo sur MQL4.

PS 2 : je parle ici d’un EA très pratique qui vous permet de gérer votre risque et votre spread.

Comments ( 3 )

  1. Nicolas de Robots Trading
    Bonjour, C'est très intéressant de savoir si cette stratégie est gagnante ou perdant. Ce qui est intéressant, c'est qu'il y a tellement de possibilité de programmer un même EA, que j'aurai vue le code différemment. Mais comme on dit, tous les chemins mènent à Rome. Bon on attend la suite... ^^
    • Michel
      Hello Nicolas ! Tu as tout à fait raison. Et ce n'est bien sûr pas la meilleure façon, sans doute. Comment aurais-tu fait ? Sur des EA précédents je me suis heurté au fait qu'il y a des ticks, n fois dans la même barre. Il faut donc tester avec tous les ticks, sinon on a des surprises en réel... Cela dit, je n'ai pas encore précisé comment gérer cela dans ce code. La suite pour très bientôt.
  2. eric
    merci pour ce tuto , c'est toujours bien pour les débutants d'apprendre pas à pas comment coder

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv badge