文章 "如何采用 MQL5 创建用于 Telegram 的 bots" - 页 46

 
Jefferson Metha #:

右上角有一个放大镜图标,也称为搜索图标
左键单击它
然后输入
"Binance"
在桌面上按 [ENTER] 键

然后您就会看到它们,无需向下滚动。

,欢迎
使用。

谢谢,我找到图书馆了

 
如何将 getfile 转为 BOT,供用户下载文件
 
电报机器人 输入文件

如何编写

我的英语不好,抱歉,谢谢
 

好文章。很管用我能问你一个努比亚人的问题吗?在指标中,URL 不允许用于WebRequest

我的理解是否正确,WebRequest 在指标中不起作用

我想明白了。同步暂停。它不起作用。太糟糕了。


	          
 
Valeriy Yastremskiy WebRequest 的 URL

我的理解是否正确,WebRequest 在指标中不起作用?

不允许

 
Vitaly Muzichenko #:

没用

但在测试版中可以使用))SendNotification 将不得不使用。不太方便,而且在测试版中不起作用。

 

请帮帮我,我很困惑。如何通过程序在全局变量中获取聊天的 id,同时知道机器人的令牌。很明显,您可以向不同的机器人询问您的 ID,但我想用编程的方式。

ProcessMessage 函数中有一个循环可以获取我想要 的数字,但它经常返回零,我也记不住

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2022.02.10
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
还有一个问题。如果知道了机器人的标记,是否有可能在不发送机器人消息 的情况下,从 Telegram 获取创建该机器人的用户的聊天 ID。我们可以通过令牌获取机器人的名称。
 
在 mq5 端,"chat.m_new_one.message_text "可以直接获取用户发送给机器人的信息,这非常好。
,但它能否用于接收发送到机器人(与 mt5 EA 通信的机器人)所属频道的信息?
 

朋友们好,我使用以下代码向 Telegram 发送信息。我的问题是,信息不是发送一次,而是发送多次。

请指导我。

#include <Telegram\TelegramL.mqh>


input string InpChannelName="";//Channel Name
input string InpToken="";//机器人令牌


CCustomBot bot;

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




//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
   time_signal=0;

//--- 设置标记
   bot.Token(InpToken);


//--- 完成
   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}";
}
   

   
//---