Développez un Expert Advisor MA Crossing pour MetaTrader 4

Mike 2021.03.30 19:18 69 0 0
Pièce jointe

Dans cet article, nous allons plonger dans la création d'un Expert Advisor (EA) basé sur le croisement de moyennes mobiles pour MetaTrader 4. C'est un projet passionnant qui peut vraiment améliorer votre expérience de trading si vous le mettez en œuvre correctement !

Définir les paramètres d'entrée

Commencez par définir les variables d'entrée qui guideront notre EA. Voici un exemple de code :

//--- paramètres d'entréeinput    int      period_ma_fast = 8;  // Période de la MA rapideinput    int      period_ma_slow = 20;  // Période de la MA lenteinput    double   takeProfit  = 20.0;  // Take Profit (pips)input    double   stopLoss    = 20.0;  // Stop Loss (pips)input    double   lotSize     = 0.10;  // Taille de lotinput    double   minEquity   = 100.0;  // Équité minimale ($)input    int Slippage = 3;       // Slippageinput    int MagicNumber = 889;  // Numéro magique

Variables globales

Ensuite, définissons les variables globales. Ces variables seront accessibles à toutes nos fonctions :

// Variables globalesdouble   myPoint    = 0.0;
int      mySlippage = 0;
int      BuyTicket   = 0;
int      SellTicket  = 0;

Initialisation de l'EA

Lorsque l'EA est exécuté, la première fonction qui se lance est OnInit(). Cette fonction est parfaite pour valider et initialiser nos variables globales :

intOnInit()
{
   // Validation des entrées
   if (period_ma_fast >= period_ma_slow || takeProfit < 0.0 || stopLoss < 0.0 || lotSize < 0.01 || minEquity < 10) {
      Alert("AVERTISSEMENT - Les données d'entrée ne sont pas valides");
      return (INIT_PARAMETERS_INCORRECT);
   }
   
   myPoint = GetPipPoint(Symbol());
   mySlippage = GetSlippage(Symbol(),Slippage);

   return(INIT_SUCCEEDED);
}

Gestion des ticks

À chaque mouvement du marché (tick), la fonction OnTick() est appelée et exécute les instructions contenues dans son bloc :

voidOnTick()
{
   if (cekMinEquity()) {
      int signal = -1;
      bool isNewCandle = NewCandle(Period(), Symbol());
      
      signal = getSignal(isNewCandle);
      transaction(isNewCandle, signal);
      setTPSL();
   } else {
      // Arrêter le trading si l'équité est insuffisante
      Print("L'EA sera arrêté car l'équité est insuffisante");
   }
}

Fonction pour définir TPSL

void setTPSL() {
   int   tOrder = 0;
   string   strMN = "", pair = "";
   double sl = 0.0, tp = 0.0;

   pair = Symbol();
   tOrder = OrdersTotal();
   for (int i=tOrder-1; i>=0; i--) {
      bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      strMN = IntegerToString(OrderMagicNumber());
      if (StringFind(strMN, IntegerToString(MagicNumber), 0) == 0 && StringFind(OrderSymbol(), pair, 0) == 0) {
         if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0)) {
           if (takeProfit > 0) {
               tp = OrderOpenPrice() + (takeProfit * myPoint);
            } else {
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() - (stopLoss * myPoint);
            } else {
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl) {
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)) {
                  Print ("Modification de l'ordre réussie");
               }
            }
     }
     if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0)) {
            if (takeProfit > 0) {
               tp = OrderOpenPrice() - (takeProfit * myPoint);
            } else {
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() + (stopLoss * myPoint);
            } else {
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl) {
               if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)) {
                  Print ("Modification de l'ordre réussie");
               }
            }
     }
     }
   }// Fin de la boucle
}

Rejoignez notre communauté !

Pour des échanges enrichissants et des conseils sur le trading, n'hésitez pas à rejoindre notre groupe Telegram :

t.me/codeMQL

Application de trading recommandée

Si vous cherchez une application pour soutenir votre trading, téléchargez notre application SignalForex sur le Play Store :

SignalForex sur Play Store

Liste
Commentaire 0