//+------------------------------------------------------------------+ //| PUPrime Trading Bot EA | //| MQL5 Version with Detailed Explanations | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, PUPrime Gold Trader" #property version "2.0" #property description "Automated trader using RSI(14) on M1 timeframe" #property description "Sends signals to Telegram and executes trades" //--- Include necessary libraries #include // Для торговых функций //--- Input Parameters input string symbolTrade = "XAUUSD.s"; // Торговый символ input double LotSize = 0.01; // Лот input int StopLoss = 150; // SL в пунктах input int TakeProfit = 300; // TP в пунктах input string TelegramToken = ""; // Токен Telegram input string ChatID = ""; // ChatID Telegram //--- Глобальные переменные datetime lastBarTime = 0; int rsiHandle = INVALID_HANDLE; CTrade trade; //+------------------------------------------------------------------+ //| Функция инициализации советника | //+------------------------------------------------------------------+ int OnInit() { // Проверка, что символ доступен if(!SymbolInfoDouble(symbolTrade, SYMBOL_ASK)) { Alert("Error: Symbol ", symbolTrade, " not available in Market Watch"); return(INIT_FAILED); } // Создаем RSI индикатор rsiHandle = iRSI(symbolTrade, PERIOD_M1, 14, PRICE_CLOSE); if(rsiHandle == INVALID_HANDLE) { Alert("Error creating RSI indicator for symbol ", symbolTrade); return(INIT_FAILED); } // Инициализация времени последнего бара lastBarTime = iTime(symbolTrade, PERIOD_M1, 0); // Отправка уведомления в Telegram о запуске if(TelegramToken != "" && ChatID != "") { Print("Telegram notifications enabled"); SendTelegramMessage(TelegramToken, ChatID, "Бот запущен и готов торговать на " + symbolTrade + "!"); } Print("PUPrime Bot started for symbol ", symbolTrade); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Функция деинициализации советника | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(rsiHandle != INVALID_HANDLE) IndicatorRelease(rsiHandle); } //+------------------------------------------------------------------+ //| Основная функция тика советника | //+------------------------------------------------------------------+ void OnTick() { datetime currentBarTime = iTime(symbolTrade, PERIOD_M1, 0); if(currentBarTime != lastBarTime) { lastBarTime = currentBarTime; GenerateSignal(); } } //+------------------------------------------------------------------+ //| Генерация торговых сигналов на основе RSI | //+------------------------------------------------------------------+ void GenerateSignal() { double ask = SymbolInfoDouble(symbolTrade, SYMBOL_ASK); double bid = SymbolInfoDouble(symbolTrade, SYMBOL_BID); double rsi[1]; if(CopyBuffer(rsiHandle, 0, 0, 1, rsi) <= 0) { Print("Error copying RSI data: ", GetLastError()); return; } string signal = ""; double entry = 0.0; double sl = 0.0; double tp = 0.0; ENUM_ORDER_TYPE orderType = WRONG_VALUE; if(rsi[0] < 30) { signal = "BUY"; orderType = ORDER_TYPE_BUY; entry = ask; sl = entry - StopLoss * _Point; tp = entry + TakeProfit * _Point; } else if(rsi[0] > 70) { signal = "SELL"; orderType = ORDER_TYPE_SELL; entry = bid; sl = entry + StopLoss * _Point; tp = entry - TakeProfit * _Point; } else return; // Нет сигнала if(TelegramToken != "" && ChatID != "") { string message = StringFormat( "🚨 %s M1 SIGNAL\nTime: %s\nType: %s | RSI: %.2f\nEntry: %.3f\nSL: %.3f | TP: %.3f", symbolTrade, TimeToString(TimeCurrent(), TIME_SECONDS), signal, rsi[0], entry, sl, tp); SendTelegramMessage(TelegramToken, ChatID, message); } trade.SetDeviationInPoints(5); if(orderType == ORDER_TYPE_BUY) trade.Buy(LotSize, symbolTrade, entry, sl, tp); else if(orderType == ORDER_TYPE_SELL) trade.Sell(LotSize, symbolTrade, entry, sl, tp); } //+------------------------------------------------------------------+ //| Отправка сообщений в Telegram | //+------------------------------------------------------------------+ bool SendTelegramMessage(string token, string chat_id, string text) { string url = "https://api.telegram.org/bot" + token + "/sendMessage"; string headers = "Content-Type: application/json\r\n"; string postData = StringFormat( "{\"chat_id\":\"%s\",\"text\":\"%s\",\"parse_mode\":\"HTML\"}", chat_id, text ); char data[], result[]; StringToCharArray(postData, data); int res = WebRequest("POST", url, headers, 5000, data, result, headers); string response_text = CharArrayToString(result); Print("Telegram send status: ", res, ", response: ", response_text); return(res == 200); }