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

 
Valeriy Yastremskiy #:

そうなんです、わからないんです。ボットにも名前では送れず、IDでしか送れないんです。どうやって自分に送るんですか?というか、どうやって自分のIDをカートに入れるんですか?ボットにしか送れないんだけど。

ボットのGet My IDでIDを取得します。

 
Andrey Kaunov #:

私はGet My IDボットを通じてあらゆるIDを取得している。

はい、私のIDとボットが混同していました。私たちは、私たち自身のボットからプライベートメッセージで自分自身に送信します))))

Andreiの記事より

これらの例では、メッセージの受信者としてchat_idを渡していることに注意する必要があります。ユーザがボットとチャットを始めるまで、私たちは事前にそれを知ることができません。また、ユーザーの携帯電話番号や@ユーザー名で連絡を取る方法もありません。これは明らかに、ボットがスパムを送信しないように、セキュリティのために行われている。しかし、ボットは2番目のSendMessageオプションを使用して、ユーザーの名前を指定してチャンネルにメッセージを公開することができます。

削除済み  

こんにちは、

Searchファイルに新しい言語を追加しようとしているのですが、意味がわからない16進数のパラメータがあります:

TLanguage languages[6]=
{
   {"English","\xF1EC\xF1E7","en"},
   {"Русский","\xF1F7\xF1FA","ru"},
   {中文,    "\xF1E8\xF1F3","zh"},
   {"エスパニョール","\xF1EA\xF1F8","es"},
   {"Deutsch","\xF1E9\xF1EA","de"},
   {「日本語,   "\xF1EF\xF1F5","ja"}
};

例えば、英語の "hexF1ECxF1E7 "は何ですか?それをptフラグに変換する方法を教えてください。

 

先週、Telegramからメッセージ・キューを読み込む機能が動作しなくなるという不具合がありました。つまり、送信メッセージはテキストもスクリーンショットも以前と同じように送信されるのですが、GetUpdates()関数は何も返さず、チャット・キューは 常に空なのです。

このような不具合に遭遇した人はいますか?何が原因でしょうか?

 
こんにちは!
このような仕事を本当にありがとうございます!
フォント、背景、文字色の変更方法を教えてください。
ありがとうございます。
 
lbgraf #:
こんにちは!
このような仕事を本当にありがとうございます!
フォント、背景、文字色の変更方法を教えてください。
ありがとうございます。

すべてのタグはTelegram APIのドキュメントに記載されています。

 

皆さん、こんにちは、

telegramからmt5へメッセージを送信するコードは完成したのですが、小さなエラーが発生しています。同時に多くのcloseコマンドを送信すると、1つの注文しか送信できませんが、多くの注文は送信できません。

どこが間違っているのか、どなたか教えてください。

//--- 今、クローズしたポジションのリストを処理する
   max_time = 0;
   double day_profit = 0;
   bool is_closed = false;
   int totalhis = hist_position.PositionsTotal();
   for(int i = 0; i < totalhis; i++) {
      //---
      pos_symbol = PositionGetSymbol(i); // シンボル名を取得する
      digits = (int)SymbolInfoInteger(pos_symbol, SYMBOL_DIGITS); // 価格の桁数を取得する
      //--- リストのインデックスで閉じたポジションを選択する。
      if(hist_position.SelectByIndex(i)) {
         ulong    ticket            = hist_position.Ticket();
         datetime time_open         = hist_position.TimeOpen();
         ulong    time_open_msc     = hist_position.TimeOpenMsc();
         datetime time_close        = hist_position.TimeClose();
         ulong    time_close_msc    = hist_position.TimeCloseMsc();
         long     type              = hist_position.PositionType();
         string   type_desc         = hist_position.TypeDescription();
         long     magic             = hist_position.Magic();
         long     pos_id            = hist_position.Identifier();
         double   volume            = hist_position.Volume();
         double   price_open        = hist_position.PriceOpen();
         double   price_sl          = hist_position.StopLoss();
         double   price_tp          = hist_position.TakeProfit();
         double   price_close       = hist_position.PriceClose();
         double   commission        = hist_position.Commission();
         double   swap              = hist_position.Swap();
         double   profit            = hist_position.Profit();
         string   symbol            = hist_position.Symbol();
         string   open_comment      = hist_position.OpenComment();
         string   close_comment     = hist_position.CloseComment();
         string   open_reason_desc  = hist_position.OpenReasonDescription();
         string   close_reason_desc = hist_position.CloseReasonDescription();
         string   deal_tickets      = hist_position.DealTickets(",");
         //---
         int      deals_count       = HistoryDealsTotal();   // 選択した位置の
         int      orders_count      = HistoryOrdersTotal();  // 選択した位置の
         
         if(TimeToString(TimeCurrent(), TIME_DATE) == TimeToString(time_close, TIME_DATE)) {
            day_profit += profit + swap + commission;
         }
         if(time_close <= _closed_last_time) continue;
         //is_closed = true;
         string msg = StringFormat
                      (
                         "ACCOUNT: { #%s } \n" +
                         "------------ { CLOSE } -----------\n" +
                         "CLOSE ORDER - %s %s\n" +
                         "Time (GTM+0): %s\n" +
                         "------------ { CLOSE } -----------\n" +
                         "Volume: %s\n" +
                         "Open Price: %s\n" +
                         "Close Price: %s\n" +
                         "Gain/Loss: %s USD\n" +
                         "---TOTAL PROFIT TODAY---\n" +
                         "%s USD\n",
                         IntegerToString(login),
                         symbol,
                         PositionTypeToString(type),
                         TimeToString(time_close, TIME_DATE | TIME_SECONDS),
                         DoubleToString(volume, 2),
                         DoubleToString(price_open, digits),
                         DoubleToString(price_close, digits),
                         DoubleToString(profit, 2),
                         DoubleToString(day_profit, 2)
                      );
         
         int res = bot.SendMessage(InpChannelName, msg);
         if(res != 0)
            Print("Error: ", GetErrorDescription(res));
         max_time = MathMax(max_time, time_close);
      }
      _closed_last_time = MathMax(max_time, _closed_last_time);
   }
 
Bui Huy Dat #:

やあ、みんな、

テレグラムからmt5へメッセージを送信するコードを完成させたのですが、小さなエラーが発生しました。多数のクローズコマンドを同時に送信すると、1つの注文しか送信できませんが、多数の注文は送信できません。

どこが間違っているのか、どなたか教えてください。

不適切な書式のコードは モデレーターにより削除されました。Bui Huy Dat あなたの投稿を 編集 し、コードを挿入するときはCODEボタンを 使用して ください。

ボットを使って多くのユーザーにサービスを提供している場合、1秒間に30回のインタラクションが制限されていると思います。

 
Lorentzos Roussos #:

ボットを通じて多くのユーザーにサービスを提供する場合、1秒間に30回のインタラクションが制限されると思います。


しかし、同時にコマンドを開いたり閉じたりすると、テレグラムには1つのメッセージしか送信できない。

 
Bui Huy Dat #:


しかし、同時にコマンドを開いたり閉じたりすると、テレグラムに1つのメッセージしか送信できません。

私が返信したときにコードがありませんでした、私はあなたがバーストリストにメッセージを追加する関数でbot.SendMessageを置き換えることができます参照してください。また、メッセージを増やし続けてループの外に送信することもできますが、そこでは文字数の制限にぶつかります。

簡単な回路図はこんな感じ:

  1. Outbox" という文字列配列がある。
  2. Outboxを処理する時間間隔、つまり "OnTimer()"(telegramから読んでいる場合は、すでに使っているかもしれません)。
  3. そして、Sleep()関数を使うのではなく、最後にメッセージが送信された時刻を記憶することで、各メッセージの間隔をミリ秒に制限します。
  4. ミリ秒のポーリングにはGetTickCount()を使うことができ、メッセージが最後に送信されたミリ秒を保存し、現在のミリ秒からそれを引くことでミリ秒単位での距離を求めることができる。
  5. 最後のメッセージからのミリ秒単位での距離が、あなたが強制したミリ秒単位での制限より大きい場合、送信トレイから次のメッセージを送信します。
  6. ループ内でbot.SendMessageを呼び出す代わりに、Outbox.add_message_for_sendingか何かを呼び出します。
  7. チャットIDも保存するように変更すれば、メッセージの送信先も保存でき、複数ユーザーのための解決策になります。