Обсуждение статьи "Создание бота для Telegram на языке MQL5" - страница 7

 

Здравствуйте Андрей,

почему бот постоянно получает Ошибка: HTTP-запрос не удался, tq

 

Здравствуйте Андрей,

почему бот постоянно получает Ошибка: HTTP-запрос не удался, tq


 

Возможно, они изменили протокол.

Вы проверяли API Telegram?

 
Haijie Qi:

Здравствуйте Андрей,

почему бот постоянно получает Ошибка: HTTP request failed, tq

Я отладил 'Telegram_Bot_EA' на вашем компьютере с помощью TeamViewer и обнаружил, что WebRequest() возвращает -1. _LastError = 5203.

Но я не знаю почему. Возможно, ваш брандмауэр блокирует TCP-пакеты.

 
Andrey Voytenko:

Я отладил 'Telegram_Bot_EA' на вашем компьютере с помощью TeamViewer и обнаружил, что WebRequest() возвращает -1. _LastError = 5203.

Но я не знаю почему. Возможно, ваш брандмауэр блокирует TCP-пакеты.


Спасибо Андрей,

Отключил брандмауэр - все равно ошибка,

буду смотреть глубже :)

 

Привет, ребята, так что в основном я взял исходный код и в основном отредактировал код для telegram_signal_EA, чтобы отправлять сделки на основе моей стратегии. Так что я скомпилировал, чтобы проверить ошибки, и все работает нормально, даже когда я применяю советник к графику, вкладка экспертов показывает, что он распознал моего telegram-бота. Теперь моя проблема заключается в отправке самого оповещения, я не получаю оповещения в telegram, когда мои правила для торговли выполняются. Есть ли какая-нибудь помощь в этом, ребята? Вот код ниже

//+------------------------------------------------------------------+
//|Telegram_Signal_EA.mq5 |
//| Copyright 2014, MetaQuotes Software Corp. |
//|http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict

#include <Telegram.mqh>

//--- входные параметры
input string InpChannelName="ForexSignalChannel";//Имя канала
input string InpToken="";//Token

//--- глобальные переменные
CCustomBot bot;
int ema_handle;
int ema2_handle;
int rsi_handle;
datetime time_signal=0;
bool checked;
//+------------------------------------------------------------------+
//| Функция инициализации эксперта|
//+------------------------------------------------------------------+
int OnInit()
  {
   time_signal=0;

   bot.Token(InpToken);

#ifdef __MQL5__   
   ema_handle=iMA(NULL,0,200,0,MODE_EMA,PRICE_CLOSE,0);
   if(ema_handle==INVALID_HANDLE)
      return(INIT_FAILED);
      
   ema2_handle=iMA(NULL,0,400,0,MODE_EMA,PRICE_CLOSE,0);
   if(ema2_handle==INVALID_HANDLE)
      return(INIT_FAILED);
      
   rsi_handle=iRSI(NULL,0, 14,PRICE_CLOSE,0);
   if(ema2_handle==INVALID_HANDLE)
      return(INIT_FAILED);
//--- добавьте индикатор на график
   int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   ChartIndicatorAdd(0,total,macd_handle);
#endif   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Функция деинициализации эксперта|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(reason==REASON_PARAMETERS ||
      reason==REASON_RECOMPILE ||
      reason==REASON_ACCOUNT)
     {
      checked=false;
     }

//--- удалите индикатор
#ifdef __MQL5__ 
   int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   for(int subwin=total-1; subwin>=0; subwin--)
     {
      int amount=ChartIndicatorsTotal(0,subwin);
      for(int i=amount-1; i>=0; i--)
        {
         string name=ChartIndicatorName(0,subwin,i);
         if(StringFind(name,"MACD",0)==0)
            ChartIndicatorDelete(0,subwin,name);
        }
     }
#endif
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_KEYDOWN && 
      lparam=='Q')
     {
         
         bot.SendMessage(InpChannelName,"ee\nAt:100\nDDDD");
     }
  }
//+------------------------------------------------------------------+
//| Функция экспертного тика|
//+------------------------------------------------------------------+
void OnTick()
  {

   if(!checked)
     {
      if(StringLen(InpChannelName)==0)
        {
         Print("Error: Channel name is empty");
         Sleep(10000);
         return;
        }

      int result=bot.GetMe();
      if(result==0)
        {
         Print("Bot name: ",bot.Name());
         checked=true;
        }
      else
        {
         Print("Error: ",GetErrorDescription(result));
         Sleep(10000);
         return;
        }
     }

//--- получить время
   datetime time[1];
   if(CopyTime(NULL,0,0,1,time)!=1)
      return;

//--- проверяем сигнал на каждом баре
   if(time_signal!=time[0])
     {
      //--- первый кальк
      if(time_signal==0)
        {
         time_signal=time[0];
         return;
        }

     double ema = iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);
      double ema2 = iMA(NULL, 0, 400, 0, MODE_EMA, PRICE_CLOSE, 0); 
      double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);


      time_signal=time[0];

      //--- Отправьте сигнал BUY
      if ((Bid > ema)&&(Bid < ema2)&&(rsi < 30))
      
        {
         string msg=StringFormat("Name: BossPips Signal\xF4E3\nSymbol: %s\nTimeframe: %s\nType: Buy\nPrice: %s\nTime: %s",
                                 _Symbol,
                                 StringSubstr(EnumToString((ENUM_TIMEFRAMES)_Period),7),
                                 DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits),
                                 TimeToString(time[0]));
         int res=bot.SendMessage(InpChannelName,msg);
         if(res!=0)
            Print("Error: ",GetErrorDescription(res));
        }

      //--- Посылаем сигнал SELL
      
       if ((Bid < ema)&&(Bid > ema2)&&(rsi > 70))
       
        {
         string msg=StringFormat("Name: BossPips Signal\xF4E3\nSymbol: %s\nTimeframe: %s\nType: Sell\nPrice: %s\nTime: %s",
                                 _Symbol,
                                 StringSubstr(EnumToString((ENUM_TIMEFRAMES)_Period),7),
                                 DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits),
                                 TimeToString(time[0]));
         int res=bot.SendMessage(InpChannelName,msg);
         if(res!=0)
            Print("Error: ",GetErrorDescription(res));
        }
     }
  }
//+------------------------------------------------------------------+
 
Есть ли версия для mq4?
 
Mohd Fahmi Azlan Mohamad Zuki:
Есть ли версия для mq4?

Коды, приложенные к этой статье, адаптированы для торговли на обеих платформах - MetaTrader 4 и MetaTrader 5.

Просто измените расширение файлов советников на mq4.

 

я перехожу с for(int i=0;i<=1;i++) на for(int i=0;i>=1;i--) по сигналу ea,

теперь я не получаю сигнала от telegram, может помочь/направить меня ;(

 
Andrey Voytenko:

Коды, приложенные к этой статье, адаптированы для торговли на обеих платформах - MetaTrader 4 и MetaTrader 5.

Просто измените расширение файлов советников на mq4.

Я попытался изменить. Но когда я выставляю ордер, я не получаю никаких уведомлений. Что-нибудь нужно проверить?