Demande d'information sur Expert

 

Bonjour,


Je développe actuellement un expert couplant le RSi et les BB. Néanmoins je me retrouve avec une liste d'erreur donc la résolution m'est difficile. De ce fait je sollicite votre aide afin de pouvoir le corriger (j'ai indiqué ci-dessous la liste des erreurs lors de la compilation).


//+------------------------------------------------------------------+
//|                                       RSIBollingerBot.mq5      |
//|                                       Copyright 2023, Vous     |
//+------------------------------------------------------------------+
#include"C:\Users\MQL5\Include\Trade\Trade.mqh"
#property strict


// Déclaration des paramètres
input int periodRSI = 14;
input int periodBB = 20;
input int deviationBB = 2;
input double lotSize = 0.1; // Modifiez la taille du lot selon vos besoins

// Variables globales
double upper_band_tick, middle_band_tick, lower_band_tick;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // Créez votre initialisation ici
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // Ajoutez votre logique de trading ici
   double rsiValue = iRSI(_Symbol, PERIOD_CURRENT, periodRSI, 0);

   int bandsHandle = iBands(_Symbol, PERIOD_CURRENT, periodBB, deviationBB, 0, PRICE_CLOSE);

   double upper_band_tick_array[1], middle_band_tick_array[1], lower_band_tick_array[1];

   if (CopyBuffer(bandsHandle, 0, 0, 1, upper_band_tick_array) > 0 &&
       CopyBuffer(bandsHandle, 1, 0, 1, middle_band_tick_array) > 0 &&
       CopyBuffer(bandsHandle, 2, 0, 1, lower_band_tick_array) > 0)
   {
      upper_band_tick = upper_band_tick_array[0];
      middle_band_tick = middle_band_tick_array[0];
      lower_band_tick = lower_band_tick_array[0];

      double Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      double Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      // Condition d'achat
      if (rsiValue < 30 && iClose(_Symbol, PERIOD_CURRENT, 1) < lower_band_tick)
      {
         // Ajoutez votre logique de trading ici
         MqlTradeRequest request = {TRADE_ACTION_DEAL};
         MqlTradeResult result = {0};
         request.action = TRADE_ACTION_DEAL;
         request.type = ORDER_TYPE_BUY;
         request.symbol = _Symbol;
         request.volume = lotSize;
         request.price = Ask;
         request.sl = 0;
         request.tp = 0;
         request.deviation = 3;
         if (OrderSend(request, result))
         {
            // Gestion de la commande réussie
         }
         else
         {
            Print("Erreur lors de l'envoi de l'ordre d'achat: ", GetLastError());
         }
      }

      // Condition de vente
      if (rsiValue > 70 && iClose(_Symbol, PERIOD_CURRENT, 1) > upper_band_tick)
      {
         // Ajoutez votre logique de trading ici
         MqlTradeRequest request = {TRADE_ACTION_DEAL};
         MqlTradeResult result = {0};
         request.action = TRADE_ACTION_DEAL;
         request.type = ORDER_TYPE_SELL;
         request.symbol = _Symbol;
         request.volume = lotSize;
         request.price = Bid;
         request.sl = 0;
         request.tp = 0;
         request.deviation = 3;
         if (OrderSend(request, result))
         {
          // Gestion de la commande réussie
          
         }
         else
         {
            Print("Erreur lors de l'envoi de l'ordre de vente: ", GetLastError());
         }
      }
   }
   else
   {
      Print("Erreur lors de la récupération des valeurs des bandes de Bollinger.");
   }
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // Ajoutez votre logique de désinitialisation ici
}
//+------------------------------------------------------------------+
//| Fonction de gestion du stop-loss                                 |
//+------------------------------------------------------------------+
void SetStopLoss()
{
   // Ajoutez votre logique de stop-loss ici
   double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_LAST);

   // Exemple : Définir un stop-loss à 2% en dessous du prix actuel
   double stopLossPrice = currentPrice - (currentPrice * 0.02);

   // Récupérer le ticket de la position ouverte
   ulong ticket = 0;
   ulong deal_select = HistorySelect(0, TimeCurrent());
   if (deal_select > 0)
   {
      ticket = HistoryDealGetInteger(deal_select, DEAL_TICKET);
   }

   // Retour à la sélection en cours
   HistorySelect(0, TimeCurrent());

   if (ticket > 0)
   {
      // Utiliser OrderSend avec TRADE_ACTION_MODIFY pour définir le stop-loss
      MqlTradeRequest request = {0};
      MqlTradeResult result = {0};
      request.action = TRADE_ACTION_MODIFY;
      request.type = ORDER_STOPLOSS;
      request.symbol = _Symbol;
      request.volume = OrderGetDouble(ORDER_VOLUME);
      request.price = stopLossPrice;
      request.deviation = 3;

      if (OrderSend(request, result))
      {
         Print("Stop-loss défini à : ", stopLossPrice);
      }
      else
      {
         Print("Erreur lors de la modification du stop-loss : ", GetLastError());
      }
   }
   else
   {
      Print("Aucune position ouverte à modifier.");
   }
}

Liste des erreurs au moment de la compilation : 

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'   RSIBollingerBot.mq5     135     34
'ORDER_STOPLOSS' - undeclared identifier        RSIBollingerBot.mq5     138     22
'ORDER_VOLUME' - undeclared identifier  RSIBollingerBot.mq5     140     39
'OrderGetDouble' - no one of the overloads can be applied to the function call  RSIBollingerBot.mq5     140     24
could be one of 2 function(s)   RSIBollingerBot.mq5     140     24
   built-in: double OrderGetDouble(ENUM_ORDER_PROPERTY_DOUBLE)  RSIBollingerBot.mq5     140     24
   built-in: bool OrderGetDouble(ENUM_ORDER_PROPERTY_DOUBLE,double&)    RSIBollingerBot.mq5     140     24


En vous remerciant par avance,


PS : pourriez-vous également me donner votre avis sur la pertinence de cet Expert svp