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

 
Jefferson Metha #:

В правом верхнем углу есть значок лупы, также известный как значок поиска
щелкните по нему левой кнопкой мыши
затем введите
" Binance"
Нажмите клавишу [ENTER] на рабочем столе

тогда вы получите их без необходимости прокручивать вниз.

Добро пожаловать.

Спасибо, я нашел библиотеку

 
HOW getfile в BOT для загрузки пользователем файла
 
telegram bot inputFile

Как написать это

Мой английский не очень хорош, извините, спасибо
 

Отличная статья. Все работает. Можно нубский вопрос. В индикаторах пишет URL does not allowed for WebRequest

Правильно понимаю, в индикаторах не работает  WebRequest?

Разобрался. Синхронная паузу делает. Не работает. Жаль.


	          
 
Valeriy Yastremskiy #:

Отличная статья. Все работает. Можно нубский вопрос. В индикаторах пишет URL does not allowed for WebRequest

Правильно понимаю, в индикаторах не работает  WebRequest?

Не работает

 
Vitaly Muzichenko #:

Не работает

Зато в тестере работает)) SendNotification придется. Не так удобно, и в тестере не работает.

 

Помогите плиз, что то запутался. Как получить программно id своего чата в глобальную переменную зная токен своего бота. Понятно что  можно спросить у разных ботов про свой айди, но хочется программно.

В функциях ПроцессМесседж есть цикл, который получает искомый номер, но он часто возвращает ноль, и у меня не получается его запомнить

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2022.02.10
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
По другому вопрос. Зная токен бота можно ли со стороны терминала получить от телеграмма ID чата пользователя, которым этот бот создан, без отправки сообщения со стороны бота. Имя бота мы же получаем по токену.
 
На стороне mq5 "chat.m_new_one.message_text" получает сообщение, которое пользователь отправляет боту напрямую, что замечательно.
Однако можно ли использовать его для получения сообщения, которое отправляется на канал, членом которого является бот (тот, который общается с советником mt5)?
 

Здравствуйте друзья, я использую следующий код для отправки сообщения в Telegram. Моя проблема в том, что вместо того, чтобы отправить сообщение один раз, оно отправляется несколько раз.

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

#include <Telegram\TelegramL.mqh>


input string InpChannelName="";//Имя канала
input string InpToken="";//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}";
}
   

   
//---