Discussão do artigo "Como criar bots para Telegram em MQL5" - página 7

 

Oi Andrey,

por que o bot continua recebendo Error: Falha na solicitação HTTP, tq

 

Oi Andrey,

por que o bot continua recebendo Error: Falha na solicitação HTTP, tq


 

Talvez eles tenham mudado o protocolo.

Você verificou a API do Telegram?

 
Haijie Qi:

Oi Andrey,

por que o bot continua recebendo Error: Falha na solicitação HTTP, tq

Eu depurei o 'Telegram_Bot_EA' em seu PC usando o TeamViewer e descobri que o WebRequest() retornou -1. _LastError = 5203.

Mas não sei o motivo. Talvez seu firewall bloqueie os pacotes TCP.

 
Andrey Voytenko:

Depurei o 'Telegram_Bot_EA' em seu PC usando o TeamViewer e descobri que o WebRequest() retornou -1. _LastError = 5203.

Mas não sei o motivo. Talvez seu firewall bloqueie os pacotes TCP.


Obrigado, Andrey,

desligar o firewall continua sendo um erro,

vou dar uma olhada mais profunda :)

 

Olá pessoal, basicamente peguei o código-fonte e editei o código do telegram_signal_EA para enviar negociações com base na minha estratégia. Então, compilei para verificar se há erros e tudo funciona bem, mesmo quando aplico o EA ao gráfico, a guia experts mostra que ele reconheceu meu bot do telegrama. Agora, meu problema está no envio do alerta em si, não estou recebendo alertas para o telegrama quando minhas regras para uma negociação são cumpridas. Alguém pode me ajudar com isso? Aqui está o código abaixo

//+------------------------------------------------------------------+
//|Telegrama_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>

//--- parâmetros de entrada
input string InpChannelName="ForexSignalChannel";/Nome do canal
input string InpToken="";//Token

//--- variáveis globais
CCustomBot bot;
int ema_handle;
int ema2_handle;
int rsi_handle;
datetime time_signal=0;
bool checked;
//+------------------------------------------------------------------+
//| Função de inicialização especializada|
//+------------------------------------------------------------------+
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);
//--- adicionar o indicador ao gráfico
   int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   ChartIndicatorAdd(0,total,macd_handle);
#endif   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(reason==REASON_PARAMETERS ||
      reason==REASON_RECOMPILE ||
      reason==REASON_ACCOUNT)
     {
      checked=false;
     }

//--- excluir o indicador
#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");
     }
  }
//+------------------------------------------------------------------+
//| Função de tique de especialista|
//+------------------------------------------------------------------+
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;
        }
     }

//--- obter tempo
   datetime time[1];
   if(CopyTime(NULL,0,0,1,time)!=1)
      return;

//--- verificar o sinal em cada barra
   if(time_signal!=time[0])
     {
      //--- primeiro cálculo
      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];

      //--- Enviar sinal 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));
        }

      //--- Enviar sinal 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));
        }
     }
  }
//+------------------------------------------------------------------+
 
Existe alguma versão para o mq4?
 
Mohd Fahmi Azlan Mohamad Zuki:
Existe alguma versão para o mq4?

Os códigos anexados a este artigo são adaptados para negociação em ambas as plataformas - MetaTrader 4 e MetaTrader 5.

Basta alterar as extensões de arquivo dos EAs para mq4.

 

Eu mudei de for(int i=0;i<=1;i++) para for(int i=0;i>=1;i--) no sinal ea,

agora não recebi nenhum sinal do telegrama, podem me ajudar/guiar ;(

 
Andrey Voytenko:

Os códigos anexados a este artigo são adaptados para negociação em ambas as plataformas - MetaTrader 4 e MetaTrader 5.

Basta alterar as extensões de arquivo dos EAs para mq4.

Tentei mudar. Mas quando coloco a ordem, não recebo nenhuma notificação. Há algo que eu precise verificar?