Développez un Expert Advisor MA Crossing pour MetaTrader 4

Mike 2021.03.30 19:18 23 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ée
input    int      period_ma_fast = 8;  // Période de la MA rapide
input    int      period_ma_slow = 20;  // Période de la MA lente

input    double   takeProfit  = 20.0;  // Take Profit (pips)
input    double   stopLoss    = 20.0;  // Stop Loss (pips)

input    double   lotSize     = 0.10;  // Taille de lot
input    double   minEquity   = 100.0;  // Équité minimale ($)

input    int Slippage = 3;       // Slippage
input    int MagicNumber = 889;  // Numéro magique

Variables globales

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

// Variables globales
double   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 :

int OnInit()
{
   // 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 :

void OnTick()
{
   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