記事"MQL5言語でのTelegram用ボットの作成"についてのディスカッション - ページ 17

 
Nicholas Martins:

このコードを教えてくれてありがとう!

私のブローカーの1つは、EURUSDm、GBPUSDm、XAUUSDm...sのようないくつかのシンボルに小文字を使用しています。

mなしで送信してみましたか?

または、より良い

#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:

おそらくこのエラーは、テレグラムのアピッシュがRoskomnadzorによってブロックされて いるためでしょう。私も同じ問題に遭遇しました。VPNを試してみてください。

Romanさん、ありがとうございます!

 


//--- 入力パラメータ
入力文字列 InpChannelName="";//チャンネル名
入力文字列 InpToken="";//Token

//--- グローバル変数
CCustomBot bot;
int macd_handle;
datetime time_signal=0;
bool checked;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
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("無効なiMACDハンドル");
return(INIT_FAILED);
}
//--- インジケーターをチャートに追加
int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
ChartIndicatorAdd(0,total,macd_handle);
#endif

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(reason==REASON_PARAMETERS ||)
reason==REASON_RECOMPILE |||)
reason==REASON_ACCOUNT)
{
checked=false;
}

//--- インジケーターを削除する
#ifdef __MQL5__
int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
for(int subwin=total-1; subwin>=0; subwin--)
{
int amount=ChartIndicatorsTotal(0,subwin);
for(int i=amount-1; i>=0; i--)
{
文字列名=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");
}
}
*/
//+------------------------------------------------------------------+
//| エキスパートティック関数
//+------------------------------------------------------------------+
void OnTick()
{

if(!checked)
{
if(StringLen(InpChannelName)==0)
{
Print("Error: Channel name is empty");
Sleep(10000);
を返します;
}

int result=bot.GetMe();
if(result==0)
{
Print("ボット名:",bot.Name());
checked=true;
}
else
{
Print("エラー: ",GetErrorDescription(result));
Sleep(10000);
を返します;
}
}

//--- 時刻の取得
datetime time[1];
if(CopyTime(NULL,0,0,1,time)!=1)
を返す;

//--- 各バーのシグナルをチェック
if(time_signal!=time[0])
{
//--- 最初の計算
if(time_signal==0)
{
time_signal=time[0];
を返す;
}

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,PRICE_CLOSE,MODE_SIGNAL,i);
}
#endif

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

time_signal=time[0];

//--- シグナルBUYを送信する
if(macd[1]>signal[1] &&)
macd[0]<=signal[0] && (macd[0]<0.0)
macd[0]<0.0)
{
string msg=StringFormat("Name: MACD SignalSymbol: %snTimeframe: %snType: BuyPrice: %snTime: %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("Error: ",GetErrorDescription(res));
}

//--- シグナル「売り」を送信
if(macd[1]<signal[1] &&)
macd[0]>=signal[0] && (macd[0]<シグナル[0] &&)
macd[0]>0.0)
{
string msg=StringFormat("Name: MACD SignalSymbol: %snTimeframe: %snType: SellPrice: %snTime: %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("Error: ",GetErrorDescription(res));
}
}
}
//+------------------------------------------------------------------+

インジケータ名 ( MACD カラーヒストグラム ) , それは、このインジケータでシグナルを作る方法です。

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

前向きなご意見ありがとうございます。しかし、WebRequest()関数はStrategy Testerでは実行できません。


Andrey様、

素晴らしい記事をありがとうございます!

WebRequest()関数が ストラテジーテスターで実行できないので、ストラテジーテスターを実行しながらボットで通知を受け取る方法はありますか?

ありがとうございます。

 
Jefferson Metha:

mなしで送信してみましたか?

もしくは

//+------------------------------------------------------------------+
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;
  }
//--------------------------------------------------+



ちょっとした問題があるんだけど、chat.m_idを使ってチャンネル/グループ名を取得するにはどうすればいい?

 
Andrey Voytenko:

117行目を修正してください:

親愛なるアンドレイ、

あなたの仕事は印象的です!そして、仕事もうまくいっています。


Telegram_Bot_EAについて1つの問題と1つの質問があります。

1.mt4でこのメッセージが出ますが、何が原因でしょうか?解決策を教えてください。

0 08:25:24.546 Telegram_Bot_EA mt4 GBPUSD,H1:Screenshot file 'NZDUSD60.gif' not created.

2.Telegram ボタンのフォントのサイズはどこで変更できますか?- テキストをもう少し小さくしたいのですが。


よろしくお願いします!

 

デヤン・イワノフ

私もこの問題を抱えています。これはMT4用に修正した私のコードです。ファイル "Telegram_Bot_EA.mq4" を編集して、メソッド "int SendScreenShot(...)" を置き換える。

//+------------------------------------------------------------------+
   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);
           }

        }


      
....................
     }
 
こんにちは、アンドレイ。takeprofitの有無にかかわらず、取引成立のメッセージを送る方法はありますか?
 
volohovnp:
こんにちは、アンドレイ。takeprofitの有無で取引を終了するメッセージを送る方法はありますか?
私は各取引でコメントを送信し、次にシンボル、OrderType、コメント、および実行したいアクションを記載したメッセージを送信します。

メッセージ 例
クローズ
EurUSD 買い
取引番号 23

または

0.21ロットでクローズ または 50%でクローズ
<その他のパラメータは注文に応じて 変更します。
 
どなたかwebreqをソケットに変更する方法を教えてください。