Error for a script that should send messages

 

Hello, I wrote a program which should send messages on Telegram when the conditions of the indicator are met, but I have an error and I cannot resolve it.

here is the error message :


 

And here is the code:

// Paramètres Telegram
string telegram_bot_token = "VOTRE_BOT_TOKEN";
string chat_id = "VOTRE_CHAT_ID";

// Variables d'état pour éviter les alertes multiples
bool alertBuySent = false;
bool alertSellSent = false;

// Fonction pour envoyer un message Telegram
void SendTelegramMessage(string message) {
   string url = "https://api.telegram.org/bot" + telegram_bot_token + "/sendMessage?chat_id=" + chat_id + "&text=" + message;
   char result[];
   string result_headers;
   int timeout = 10000;
   ResetLastError();
   int res = WebRequest("GET", url, "", timeout, result, result_headers);

   if(res == -1) {
      Print("Erreur d'envoi de message Telegram: ", GetLastError());
   } else {
      Print("Message Telegram envoyé: ", message);
   }
}

// Fonction pour vérifier les conditions Ichimoku pour achat ou vente
bool CheckIchimokuConditions(ENUM_TIMEFRAMES timeframe, bool isBuy) {
   double ichimoku[5];
   
   if (CopyBuffer(iIchimoku(_Symbol, timeframe, 9, 26, 52), 0, 0, 1, ichimoku) <= 0) {
      Print("Erreur de chargement des données Ichimoku: ", GetLastError());
      return false;
   }

   double tenkan = ichimoku[0];
   double kijun = ichimoku[1];
   double senkouSpanA = ichimoku[2];
   double senkouSpanB = ichimoku[3];
   double closePrice = iClose(_Symbol, timeframe, 0);

   // Condition BUY : prix au-dessus de Tenkan, Kijun, et Kumo
   if(isBuy) {
      return closePrice > tenkan && closePrice > kijun && closePrice > senkouSpanA && closePrice > senkouSpanB;
   }
   // Condition SELL : prix en-dessous de Tenkan, Kijun, et Kumo
   else {
      return closePrice < tenkan && closePrice < kijun && closePrice < senkouSpanA && closePrice < senkouSpanB;
   }
}

// Fonction pour vérifier si le prix est dans le Kumo
bool IsPriceInKumo(ENUM_TIMEFRAMES timeframe) {
   double ichimoku[5];
   
   if (CopyBuffer(iIchimoku(_Symbol, timeframe, 9, 26, 52), 0, 0, 1, ichimoku) <= 0) {
      Print("Erreur de chargement des données Ichimoku: ", GetLastError());
      return false;
   }

   double senkouSpanA = ichimoku[2];
   double senkouSpanB = ichimoku[3];
   double closePrice = iClose(_Symbol, timeframe, 0);

   // Vérifie si le prix est entre les limites du Kumo
   return (closePrice >= MathMin(senkouSpanA, senkouSpanB) && closePrice <= MathMax(senkouSpanA, senkouSpanB));
}

// Fonction principale pour surveiller les conditions et envoyer les alertes
void CheckConditionsAndAlert() {
   bool buyH4 = CheckIchimokuConditions(PERIOD_H4, true);
   bool buyD1 = CheckIchimokuConditions(PERIOD_D1, true);

   bool sellH4 = CheckIchimokuConditions(PERIOD_H4, false);
   bool sellD1 = CheckIchimokuConditions(PERIOD_D1, false);

   // Alerte BUY si conditions H4 et D1 sont remplies, et pas encore alerté
   if (buyH4 && buyD1 && !alertBuySent) {
      SendTelegramMessage("BUY (" + _Symbol + ")");
      alertBuySent = true;
      alertSellSent = false; // réinitialiser l'alerte de vente si une nouvelle condition d'achat apparaît
   }
   // Alerte SELL si conditions H4 et D1 sont remplies, et pas encore alerté
   else if (sellH4 && sellD1 && !alertSellSent) {
      SendTelegramMessage("SELL (" + _Symbol + ")");
      alertSellSent = true;
      alertBuySent = false; // réinitialiser l'alerte d'achat si une nouvelle condition de vente apparaît
   }

   // Réinitialiser les alertes si le prix entre dans le Kumo en Daily
   if (IsPriceInKumo(PERIOD_D1)) {
      alertBuySent = false;
      alertSellSent = false;
   }
}

// Exécution sur chaque tick
void OnTick() {
   CheckConditionsAndAlert();
}

Thanks for your help!