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

 

Olá,


Meu bot está enviando a mesma mensagem várias vezes. Alguma ideia de onde está o problema? Aqui está o código: <Link removido>


Obrigado pela atenção

 
thegosutrader:

Olá,


Meu bot está enviando a mesma mensagem várias vezes. Alguma ideia de onde está o problema? Aqui está o código: <Link removido>


Obrigado pela atenção

Anexe o código aqui em vez de criar um link para um site externo.

 
Keith Watford:

Anexe o código aqui em vez de criar um link para um site externo.

O bot está enviando a mesma mensagem várias vezes, o registro diz: "Too many requests: retry after 10","parameters":{"retry_after":10}

Aqui está meu arquivo mq4:

#include <Telegram.mqh>


input string InpChannelName="@xxx";/Nome do canal
input string InpToken="1049045330:AxxxxxxbFxxx0-IxwKXyxxxxxxxx";Token //Bot


CCustomBot bot;

datetime time_signal=0;
//int SendMessage(const string channel_name,
                //const string text);




//+------------------------------------------------------------------+
//| Função de inicialização especializada|
//+------------------------------------------------------------------+
int OnInit()
  {
   time_signal=0;

//--- definir token
   bot.Token(InpToken);


//--- feito
   return(INIT_SUCCEEDED);
  }
 
  datetime _opened_last_time = TimeCurrent() ;
  datetime _closed_last_time = TimeCurrent()  ;
  
 

//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)

{

}
     
  
//+------------------------------------------------------------------+
//| Função de tique de especialista|
//+------------------------------------------------------------------+
void OnTick()
  {
  

   string message = "";
   int total=OrdersTotal();
  
        
   for(int pos=0;pos<total;pos++){  // Pedidos atuais -----------------------
     if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
     if(OrderOpenTime() <= _opened_last_time) continue;
     
     message += StringFormat("Order opened!\r\nType: %s\r\nSymbol: %s\r\nPrice: %s\r\nSL: %s\r\nTP: %s\r\nTime: %s\r\nTicket:.%s ",
     order_type(),
     OrderSymbol(),
     DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbol(),MODE_DIGITS)),
     DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol(),MODE_DIGITS)),
     DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymbol(),MODE_DIGITS)),
     TimeToStr(OrderOpenTime(),TIME_MINUTES),
     IntegerToString(OrderTicket())
          
      );
      
     int res=bot.SendMessage(InpChannelName,message);
     if(res!=0)
         Print("Error: ",GetErrorDescription(res));
     
     }
     
      bool is_closed = false;

  
  total = OrdersHistoryTotal();
      
   for(int pos=0;pos<total;pos++){  // Pedidos de histórico-----------------------
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==false) continue;
      if(OrderCloseTime() <= _closed_last_time) continue;
     printf(OrderCloseTime());
     is_closed = true;
     
     message += StringFormat("Order closed!\r\nTicket: %s\r\nSymbol: %s\r\nClosing Price: %s\r\nTime: %s",
     IntegerToString(OrderTicket()),
     OrderSymbol(),
     DoubleToStr(OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_DIGITS)),
     TimeToStr(OrderCloseTime(),TIME_MINUTES),
     DoubleToStr(order_pips(),1)
     
     
     );
      
      int res=bot.SendMessage(InpChannelName,message);
     if(res!=0)
         Print("Error: ",GetErrorDescription(res));
      
     }
 
   }
   
   
double order_pips() {
   double pips;
   
   if(OrderType() == OP_BUY) {
      pips =  (OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
   } else {
      pips =  (OrderOpenPrice()-OrderClosePrice())/MarketInfo(OrderSymbol(),MODE_POINT);
   }
   return pips/10;
}

string order_type_to_str(int type)
{
   return StringSubstr(EnumToString((ENUM_ORDER_TYPE)type), 11);
}
string order_type () {
   return order_type_to_str(OrderType());
   
   if(OrderType() == OP_BUY)        return "BUY";
   if(OrderType() == OP_SELL)       return "SELL";
   if(OrderType() == OP_BUYLIMIT)   return "BUY LIMIT";
   if(OrderType() == OP_SELLLIMIT)  return "SELL LIMIT";
   if(OrderType() == OP_BUYSTOP)    return "BUYSTOP";
   if(OrderType() == OP_SELLSTOP)   return "SELLSTOP";
   
   return "{err}";
}
   

   
//---

Obrigado

 
Antonio Vargas:

Olá, consegui fazer já que eles também funcionam em canais privados, tudo está no Telegram.mqh, existe uma parte no arquivo onde ficam os "@", o que eu fiz foi substituir por "-", e na hora de colocar o nome do canal com a variável InpChannelName lá coloco o seguinte "-10014749xxxxx", o token do canal com o bot

Olá,

Para aqueles que desejam enviar para um canal privado,

1) substitua o "@" por "-" no Telegram.mqh na linha 1009 e na linha 1010 (veja a imagem em anexo),

2) no arquivo mq4, coloque seu token de canal começando com -1000xxxx, assim: InpChannelName="-10000xxxx";//Nome do canal

e você deverá receber as mensagens depois de definir seu canal como privado.

Boa sorte.

Arquivos anexados:
 

Olá,


Para as várias mensagens enviadas, esta é a mensagem de erro que estou recebendo no diário do MT4:


{"ok":false, "error_code":429, "description": "Too Many Requests: retry after 11","parameters":{"retry_after":11}}


e


Erro: Erro desconhecido 66965


Obrigado por sua ajuda.

 
thegosutrader:

Olá,

Para aqueles que querem enviar para um canal privado,

1) substitua o "@" por "-" no Telegram.mqh na linha 1009 e na linha 1010 (veja a imagem em anexo),

2) no arquivo mq4, coloque seu token de canal começando com -1000xxxx, assim: InpChannelName="-10000xxxx";//Nome do canal

e você deverá receber as mensagens depois de definir seu canal como privado.

Boa sorte.

Então, se eu já tiver definido um canal privado alterando "@" para "-", quando quiser enviar para um canal público, devo alterá-lo novamente?


Obrigado pela atenção

 
Agus Wahyu Pratomo:

Então, se eu já tiver definido o canal privado alterando "@" para "-", quando quiser enviar para o canal público, devo alterá-lo novamente?


Muito obrigado

Sim, acho que sim, mas não sou programador, então acredito que haja uma maneira de enviar para o público e o privado ao mesmo tempo...
 
É possível usar um bot para obter dados de canais do Telegram onde ele não pode ser adicionado como administrador? Se for possível, como isso é feito?
 
Post do ano de 2016 mais ainda bem atual, para quem está começando..é excelente!!! 
 

Olá Andrey, estou recebendo uma solicitação HTTP com falha


Por favor, me ajude


Agradecimentos

Arquivos anexados: