Diskussion zum Artikel "Die Erstellung des Bots für Telegram in der Sprache MQL5" - Seite 24

 

Hallo,


Mein Bot sendet die gleiche Nachricht mehrmals, irgendeine Idee, wo ist das Problem? hier ist der Code :<Link entfernt>


Dankeschön

 
thegosutrader:

Hallo,


Mein Bot sendet die gleiche Nachricht mehrmals, irgendeine Idee, wo ist das Problem? hier ist der Code :<Link entfernt>


Dankeschön!

Bitte fügen Sie den Code hier an, anstatt auf eine externe Website zu verlinken.

 
Keith Watford:

Bitte fügen Sie den Code hier ein, anstatt auf eine externe Website zu verlinken.

Der Bot sendet die gleiche Nachricht mehrmals, das Protokoll sagt: "Too many requests: retry after 10","parameters":{"retry_after":10}

Hier ist meine mq4-Datei:

#include <Telegram.mqh>


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


CCustomBot bot;

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




//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
   time_signal=0;

//--- Token setzen
   bot.Token(InpToken);


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

//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)

{

}
     
  
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
  

   string message = "";
   int total=OrdersTotal();
  
        
   for(int pos=0;pos<total;pos++){  // Aktuelle Aufträge -----------------------
     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++){  // Geschichte Bestellungen-----------------------
      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}";
}
   

   
//---

Vielen Dank!

 
Antonio Vargas:

Hallo!, gelang es mir zu tun, da sie auch auf private Kanäle arbeiten, ist alles auf der Telegram.mqh, gibt es einen Teil in der Datei, wo die "@" befinden, was ich tat, wurde durch "-" ersetzt, und zum Zeitpunkt der Platzierung der Name des Kanals mit der Variable InpChannelName gibt es die folgenden "-10014749xxxxx", das Token des Kanals mit dem Bot Platz

Hallo,

Für diejenigen, die an einen privaten Kanal senden wollen,

1) ersetzen Sie das "@" durch "-" in der Telegram.mqh in Zeile 1009 und Zeile 1010 (siehe beigefügtes Bild),

2) in der mq4-Datei, setzen Sie Ihren Kanal-Token beginnend mit -1000xxxx wie folgt: InpChannelName="-10000xxxx";//Kanalname

und Sie sollten die Nachrichten erhalten, nachdem Sie Ihren Kanal auf privat gesetzt haben.

Viel Glück!

Dateien:
 

Hallo,


Für die mehrfach gesendeten Nachrichten, ist dies die Fehlermeldung, die ich im MT4 Journal erhalte:


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


und


Fehler: Unbekannter Fehler 66965


Ich danke Ihnen für Ihre Hilfe.

 
thegosutrader:

Hallo,

Für diejenigen, die an einen privaten Kanal senden möchten,

1) ersetzen Sie das "@" durch "-" in der Telegram.mqh in Zeile 1009 und Zeile 1010 (siehe beigefügtes Bild),

2) in der mq4-Datei, setzen Sie Ihren Kanal-Token beginnend mit -1000xxxx wie folgt: InpChannelName="-10000xxxx";//Kanalname

und Sie sollten die Nachrichten erhalten, nachdem Sie Ihren Kanal auf privat gesetzt haben.

Viel Glück!

Wenn ich also bereits einen privaten Kanal eingestellt habe, indem ich das "@" in ein "-" geändert habe, sollte ich es wieder zurück ändern, wenn ich an einen öffentlichen Kanal senden möchte?


Danke

 
Agus Wahyu Pratomo:

Wenn ich also bereits einen privaten Kanal eingestellt habe, indem ich das "@" in ein "-" geändert habe, sollte ich es, wenn ich an einen öffentlichen Kanal senden möchte, wieder zurück ändern?


Danke

Ja, ich denke schon, aber ich bin kein Programmierer, also glaube ich, dass es eine Möglichkeit gibt, gleichzeitig an öffentliche und private Kanäle zu senden...
 
Ist es möglich, einen Bot zu verwenden, um Daten aus Telegram-Kanälen zu erhalten, zu denen er nicht als Administrator hinzugefügt werden kann? Wenn es möglich ist, wie wird es gemacht?
 
Ein Beitrag aus dem Jahr 2016, aber immer noch sehr aktuell, für diejenigen, die gerade erst anfangen...es ist ausgezeichnet!!!
 

Hallo Andrey, ich erhalte eine fehlgeschlagene HTTP-Anfrage.


Bitte um Hilfe


Danke

Dateien: