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

 

您好、


我的机器人多次发送相同的信息,您知道问题出在哪里吗? 下面是代码:<链接已移除>


谢谢

 
thegosutrader:

你好


我的机器人多次发送相同的信息,您知道问题出在哪里吗? 以下是代码:<链接已移除>。


谢谢

请在此处附上代码,而不要链接到外部网站。

 
Keith Watford:

请在此处附上代码,而不是链接到外部网站。

机器人多次发送同一条信息,日志显示:"请求过多:10 次后重试","参数":{"retry_after":10}。

这是我的 mq4 文件:

#include <Telegram.mqh>


input string InpChannelName="@xxx";//Channel Name
input string InpToken="1049045330:AxxxxxxbFxxx0-IxwKXyxxxxxxxx";//机器人令牌


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}";
}
   

   
//---

谢谢

 
Antonio Vargas:

你好!我设法做到了,因为它们也适用于私人频道,一切都在 Telegram.mqh 文件中,文件中有一部分是"@"所在的位置,我所做的是用"-"替换,并在将频道名称放入变量 InpChannelName 时放入以下内容"-10014749xxxxx",即机器人频道的令牌

您好、

对于想要发送到私人频道的用户,请注意以下几点

1) 将 Telegram.mqh 第 1009 行和第 1010 行的"@"替换为"-"(见附图)、

2) 在 mq4 文件中,以 -1000xxxx 开头写入您的频道标记,如下所示:InpChannelName="-10000xxxx";//Channel Name

将频道设置为私有后,您就可以收到信息了。

祝你好运

附加的文件:
 

您好、


对于发送的多条信息,这是我在 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="-10000xxxx";//Channel Name

将频道设置为私有后,您就可以收到信息了。

祝你好运

如果我已经把"@"改成"-",设置成了私人频道,当我想发送到公共频道时,我应该再改回来吗?


谢谢

 
Agus Wahyu Pratomo:

那么,如果我已经将"@"改为"-",设置为私人频道,当我想发送到公共频道时,是否应该再改回来?


谢谢

我想是的,但我不是编码员,所以我相信有一种方法可以同时发送到公共和私人频道...
 
是否可以使用机器人从无法添加为管理员的 telegram 频道获取数据?如果可以,如何实现?
 
虽然是2016年的文章,但仍然非常新颖,对于那些刚刚起步的人来说......非常棒!!!!
 

你好,安德烈,我的 HTTP 请求失败了。


请帮助


谢谢

附加的文件: