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

 
Nicholas Martins:

Vielen Dank für die Weitergabe dieses Codes!

Ich habe nur ein kleines Problem, einer meiner Makler hat Kleinbuchstaben auf einige Symbole wie EURUSDm, GBPUSDm, XAUUSDm...s

Haben Sie versucht, einfach ohne das m zu senden

oder noch besser diese

#include <Telegram.mqh>
input sring InpChannel;
input string InpToken;
void OnStart()
    {
        bot.Token(InpToken);
        string msg = "This currency pair/symbol is called: "+Symbol();
        bot.sendmessage(InpChannel, msg);
    }
 
Roman Zhitnik:

Höchstwahrscheinlich liegt der Fehler darin, dass die Telegram-Apiche von Roskomnadzor blockiert wird. Ich hatte das gleiche Problem. Versuchen Sie VPN und das war's

Danke Roman!

 


//--- Eingabeparameter
Eingabestring InpChannelName="";//Kanalname
Eingabestring InpToken="";//Token

//--- globale Variablen
CCustomBot bot;
int macd_handle;
datetime time_signal=0;
bool checked;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int OnInit()
{
time_signal=0;

bot.Token(InpToken);

#ifdef __MQL5__
macd_handle=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
if(macd_handle==INVALID_HANDLE)
{
Print("Ungültiges iMACD-Handle");
return(INIT_FAILED);
}
//--- Hinzufügen des Indikators zum Chart
int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
ChartIndicatorAdd(0,total,macd_handle);
#endif

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(Grund==REASON_PARAMETERS ||
Grund==REASON_RECOMPILE ||
reason==REASON_ACCOUNT)
{
checked=false;
}

//--- den Indikator löschen
#ifdef __MQL5__
int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
for(int int subwin=total-1; subwin>=0; subwin--)
{
int amount=ChartIndicatorsTotal(0,subwin);
for(int i=Betrag-1; i>=0; i--)
{
string name=ChartIndicatorName(0,subwin,i);
if(StringFind(name, "MACD",0)==0)
ChartIndicatorDelete(0,subwin,name);
}
}
#endif
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_KEYDOWN &&
lparam=='Q')
{
bot.SendMessage(InpChannelName,"/\x2611");
bot.SendMessage(InpChannelName,"\x2705\x2705\x2705");
}
}
*/
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{

if(!checked)
{
if(StringLen(InpChannelName)==0)
{
Print("Fehler: Kanalname ist leer");
Sleep(10000);
zurück;
}

int result=bot.GetMe();
if(ergebnis==0)
{
Print("Bot-Name: ",bot.Name()));
checked=true;
}
sonst
{
Print("Fehler: ",GetErrorDescription(result));
Sleep(10000);
zurück;
}
}

//--- Zeit ermitteln
datetime time[1];
if(CopyTime(NULL,0,0,1,time)!=1)
zurückgeben;

//--- Prüfen des Signals bei jedem Takt
if(time_signal!=time[0])
{
//--- erste Berechnung
if(zeit_signal==0)
{
time_signal=time[0];
zurück;
}

double macd[2]={};
double signal[2]={};

#ifdef __MQL4__
for(int i=0;i<=1;i++)
{
macd[i] = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
signal[i]= iMACD(NULL,0,12,26,9,PREIS_SCHLIESSEN,MODE_SIGNAL,i);
}
#endif

#ifdef __MQL5__
if(CopyBuffer(macd_handle,0,1,2,macd)!=2)
return;
if(CopyBuffer(macd_handle,1,1,2,signal)!=2)
return;
#endif

time_signal=time[0];

//--- Signal senden KAUFEN
if(macd[1]>signal[1] &&
macd[0]<=signal[0] &&
macd[0]<0.0)
{
string msg=StringFormat("Name: MACD Signal\xF4E3\nSymbol: %s\nZeitrahmen: %s\nTyp: Kaufen\nPreis: %s\nZeit: %s",
_Symbol,
StringSubstr(EnumToString((ENUM_TIMEFRAMES)_Period),7),
DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits),
TimeToString(time[0])));
int res=bot.SendMessage(InpChannelName,msg);
if(res!=0)
Print("Fehler: ",GetErrorDescription(res));
}

//--- Signal SELL senden
if(macd[1]<signal[1] &&
macd[0]>=signal[0] &&
macd[0]>0.0)
{
string msg=StringFormat("Name: MACD Signal\xF4E3\nSymbol: %s\nZeitrahmen: %s\nTyp: Sell\nPreis: %s\nZeit: %s",
_Symbol,
StringSubstr(EnumToString((ENUM_TIMEFRAMES)_Period),7),
DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits),
TimeToString(time[0])));
int res=bot.SendMessage(InpChannelName,msg);
if(res!=0)
Print("Fehler: ",GetErrorDescription(res));
}
}
}
//+------------------------------------------------------------------+

INDICATOR NAME ( MACD Coloured Histogram) , DAS IST DIE FRAGE WIE MAN MIT DIESEM INDICATOR EIN SIGNAL ERZEUGT

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Признак отрисовки ценового графика. Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий Календаря, значки сделок, тултипы индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д...
 
Andrey Voytenko:

Vielen Dank für Ihr positives Feedback. Aber die Funktion WebRequest() kann im Strategy Tester nicht ausgeführt werden.


Lieber Andrey,

vielen Dank für deinen tollen Artikel!

Da die Funktion WebRequest() nicht mit dem Strategy Tester funktioniert, gibt es eine Möglichkeit, Benachrichtigungen mit Bots zu erhalten, während der Strategy Tester ausgeführt wird?

Vielen Dank dafür

 
Jefferson Metha:

Haben Sie versucht, einfach ohne das m zu senden?

oder noch besser diese

//+------------------------------------------------------------------+
string CTelebot::TradeSymbol(string txt)
  {
   string symbol;
   if(SymbolFind(txt))
     {
      symbol = txt;
      return symbol;
     }
   if(SymbolFind(txt + suffix))
     {
      symbol = txt + suffix;
      return symbol;
     }
   if(SymbolFind(GetSymbolDescription(txt)))
      return GetSymbolDescription(txt);
   else
      // symbol = SymbolGet(txt);
      symbol = "EMPTY";
   return symbol;
  }
//--------------------------------------------------+



Ich habe ein kleines Problem, Leute Wie bekomme ich den Kanal-/Gruppennamen mit chat.m_id

 
Andrey Voytenko:

Bitte korrigieren Sie die Zeile 117:

Lieber Andrey,

Deine Arbeit ist beeindruckend! Und die Arbeit ist auch gut gemacht


Ich habe 1 Problem und 1 Frage für den Telegram_Bot_EA

1. Ich bekomme diese Meldung auf dem mt4. Was könnte der Grund dafür sein? Können Sie mit einer Lösung helfen?

0 08:25:24.546 Telegram_Bot_EA mt4 GBPUSD,H1: Screenshot-Datei 'NZDUSD60.gif' nicht erstellt.

2. Wo muss ich die Schriftgröße der Telegram-Buttons ändern? - Ich würde den Text gerne etwas kleiner machen.


Vielen Dank im Voraus für Ihre Hilfe!

 

@Deyan Ivanov

Ich habe diese Probleme auch, dies ist mein Code für MT4 behoben. Datei "Telegram_Bot_EA.mq4" bearbeiten und Methode "int SendScreenShot(...)" ersetzen.

//+------------------------------------------------------------------+
   int               SendScreenShot(const long _chat_id,
                                    const string _symbol,
                                    const ENUM_TIMEFRAMES _period,
                                    const string _template=NULL)
     {

	......................

      Sleep(50);

      bool resultShot = ChartScreenShot(chart_id,filename,2560,1200,ALIGN_RIGHT);
      ChartClose(chart_id);
      if(resultShot)
        {
         Sleep(500);

         bot.SendChatAction(_chat_id,ACTION_UPLOAD_PHOTO);

         //---
         if(FileIsExist(filename))
           {
            string screen_id;
            result=bot.SendPhoto(photo_id,_chat_id,filename,_symbol+"_"+StringSubstr(EnumToString(_period),7));
           }
         else
           {
            string mask=m_lang==LANGUAGE_EN?"Screenshot file '%s' not created.":"Файл скриншота '%s' не создан.";
            PrintFormat(mask,filename);
           }

        }


      
....................
     }
 
Hallo, Andrey. Könnten Sie mir bitte helfen - gibt es eine Möglichkeit, eine Nachricht über den Abschluss eines Geschäfts mit/ohne Gewinnmitnahme zu senden?
 
volohovnp:
Hallo, Andrey. Könnten Sie mir bitte helfen - gibt es eine Möglichkeit, eine Nachricht über den Abschluss eines Geschäfts mit/ohne Gewinnmitnahme zu senden?
Ich sende einen Kommentar mit jedem Trade, dann sende ich eine Nachricht mit Angabe von Symbol, OrderType und dem Kommentar, sowie der gewünschten Aktion

Nachricht z.B.
Schließen
EurUSD Kaufen
Handel #23

Oder

Schließen um 0,21 Lots oder Schließen um 50%
<Andere Parameter werde ich je nach Auftrag ändern>
 
Hallo, diese wir Anfrage Funktion nimmt viel Zeit, besser machen von Sockets, ich habe versucht, aber ich konnte nicht konvertieren, kann jemand helfen, Webreq zu Socket ändern?