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

 

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


Мой бот отправляет одно и то же сообщение несколько раз, есть идеи, где проблема? Вот код :<Ссылка удалена>


Спасибо

 
thegosutrader:

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


Мой бот отправляет одно и то же сообщение несколько раз, есть идеи, где проблема? Вот код :<Ссылка удалена>


Спасибо

Пожалуйста, прикрепите код здесь вместо ссылки на внешний сайт.

 
Keith Watford:

Пожалуйста, прикрепите код здесь, а не ссылайтесь на внешний сайт.

Бот отправляет одно и то же сообщение несколько раз, в логе написано : "Too many requests: retry after 10","parameters":{"retry_after":10}

Вот мой файл mq4:

#include <Telegram.mqh>


input string InpChannelName="@xxx";//Имя канала
input string InpToken="1049045330:AxxxxxxbFxxx0-IxwKXyxxxxxxxx";//Bot Token


CCustomBot bot;

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




//+------------------------------------------------------------------+
//| Функция инициализации эксперта|
//+------------------------------------------------------------------+
int OnInit()
  {
   time_signal=0;

//--- установить маркер
   bot.Token(InpToken);


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

//+------------------------------------------------------------------+
//| Функция деинициализации эксперта|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)

{

}
     
  
//+------------------------------------------------------------------+
//| Функция экспертного тика|
//+------------------------------------------------------------------+
void OnTick()
  {
  

   string message = "";
   int total=OrdersTotal();
  
        
   for(int pos=0;pos<total;pos++){  // Текущие заказы -----------------------
     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++){  // Исторические заказы-----------------------
      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}";
}
   

   
//---

Спасибо

 
Antonio Vargas:

Здравствуйте!, у меня получилось сделать так как они работают и на приватных каналах, все находится на Telegram.mqh, в файле есть часть где находятся "@", что я сделал, заменил на "-", и в момент размещения названия канала с переменной InpChannelName там разместил следующее "-10014749xxxxx", токен канала с ботом

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

Для тех, кто хочет отправлять сообщения в приватный канал,

1) замените "@" на "-" в Telegram.mqh в строке 1009 и строке 1010 (см. прикрепленное изображение),

2) в файле mq4 проставьте токен вашего канала, начинающийся на -1000xxxx, следующим образом: InpChannelName="-10000xxx";//Имя канала

и вы должны получить сообщения после установки канала в приват.

Удачи.

Файлы:
 

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


Для нескольких отправленных сообщений, вот сообщение об ошибке, которое я получаю в журнале MT4:


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


и


Ошибка: Неизвестная ошибка 66965


Спасибо за помощь.

 
thegosutrader:

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

Для тех, кто хочет отправить в личный канал,

1) замените "@" на "-" в Telegram.mqh в строке 1009 и строке 1010 (см. прикрепленное изображение),

2) в файле mq4 проставьте токен вашего канала, начинающийся на -1000xxxx, следующим образом: InpChannelName="-10000xxx";//Имя канала

и вы должны получить сообщения после установки канала в приват.

Удачи.

Значит, если я уже настроил приватный канал, изменив "@" на "-", когда я хочу отправить сообщение в публичный канал, я должен изменить его снова?


Спасибо

 
Agus Wahyu Pratomo:

То есть, если я уже настроил приватный канал, изменив "@" на "-", когда я хочу отправить в публичный канал, я должен изменить его снова?


Спасибо

Да, я думаю, но я не кодер, так что я верю, что есть способ отправить на публичный и частный одновременно...
 
Можно ли использовать бота для получения данных из телеграмм каналов, куда нельзя добавить его администратором? Если можно , то как это делается?
 
Пост от 2016 года, но все еще очень актуальный, для тех, кто только начинает... это отлично!!!
 

Привет Андрей, пожалуйста, я получаю HTTP запрос не удалось


Пожалуйста, помогите


Спасибо

Файлы: