Обсуждение статьи "Создание бота для Telegram на языке MQL5" - страница 51

 
Valeriy Yastremskiy #:

Да, не до понял, не знаю, боту тоже по имени не отправляется, только по идентификатору. А себе как оформляете отправление? Вернее как получаете id свой в телеге? У меня только в бот получается.

Любой ID получаю через бота Get My ID

 
Andrey Kaunov #:

Любой ID получаю через бота Get My ID

Да, перепутал свой id и бота. Мы же себе в личку шлем от своего бота))) 

Из статьи Андрея

Стоит отметить, что в этих примерах в качестве получателя сообщения мы передаем номер чата chat_id. Мы не можем знать его заранее, чтобы отослать сообщение пользователю, пока он первым не начнет общение с ботом. Обратиться к пользователю по его номеру мобильного телефона или @username также нет возможности. Это сделано, очевидно, в целях безопасности, чтобы боты не рассылали спам. А вот публиковать сообщения на канале боты могут, обращаясь по его имени используя второй вариант SendMessage.

[Удален]  

Здравствуйте,

Я пытаюсь добавить новый язык в файл Search, но у меня есть эти шестнадцатеричные параметры, значение которых я не понимаю:

TLanguage languages[6]=
{
   {"English","\xF1EC\xF1E7","en"},
   {"Русский","\xF1F7\xF1FA","ru"},
   {"中文",    "\xF1E8\xF1F3","zh"},
   {"Español","\xF1EA\xF1F8","es"},
   {"Deutsch","\xF1E9\xF1EA","de"},
   {"日本語",   "\xF1EF\xF1F5","ja"}
};

Что это за \xF1EC\xF1E7 в английском, например, и как преобразовать его для получения флага pt?

 

У меня на прошлой неделе возник какой-то глюк - перестал работать функция считывания очереди сообщений из Телеграмма. Т.е. исходящие сообщения отправляются как и раньше, как текст, так и скрин7-шоты,ю а вот функция GetUpdates() ничего не возвращает, писок чатов всегда пуст. 

Кто-нибудь сталкивался с таким глюком? В чем может быть причина?

 
Здравствуйте!
Спасибо огромное за такую работу!!!!
подскажи пожалуйста, а как можно менять шрифт, фон, цвет текста?
Спасибо
 
lbgraf #:
Здравствуйте!
Спасибо огромное за такую работу!!!!
подскажи пожалуйста, а как можно менять шрифт, фон, цвет текста?
Спасибо

Все теги описаны в доках на API Telegram.

 

Здравствуйте, ребята,

Я закончил код для отправки сообщения из telegram в mt5, но у меня есть небольшая ошибка, при отправке команды close из многих команд close в то же время, он может отправить только один ордер, но не много ордеров.

Может ли кто-нибудь помочь мне понять, где я ошибаюсь?

//--- теперь обработайте список закрытых позиций
   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 #:

Здравствуйте, ребята,

Я закончил код для отправки сообщения из telegram в mt5, но у меня есть небольшая ошибка, при отправке команды close из многих команд close в то же время, он может отправить только один ордер, но не много ордеров.

Может ли кто-нибудь помочь мне понять, где я ошибаюсь?

Неправильно отформатированный код удален модератором. @Bui Huy Dat Пожалуйста, отредактируйте свое сообщение и используйте кнопку CODE при вставке кода.

Если вы обслуживаете много пользователей через бота, есть ограничение в 30 взаимодействий в секунду, я думаю.

 
Lorentzos Roussos #:

Если вы обслуживаете много пользователей через бота, существует ограничение в 30 взаимодействий в секунду, как мне кажется.

Я использую его только лично и только для отправки каждого счета mt5 в telegram.
но при одновременном открытии и закрытии команды, он может отправить только одно сообщение в telegram

 
Bui Huy Dat #:

Я использую его только лично и только для отправки каждого счета mt5 в telegram.
но при одновременном открытии или закрытии команды, он может отправить только одно сообщение в telegram

Когда я отвечал, кода не было, но я вижу, что вы можете заменить bot.SendMessage на функцию, которая добавляет сообщение в список burst. Вы также могли бы продолжать увеличивать сообщение и отправлять его из цикла, но там вы столкнетесь с ограничениями символов.

Краткая схема может быть такой:

  1. У вас есть массив строк под названием "Outbox".
  2. Временной интервал, в течение которого вы обрабатываете Outbox, поэтому "OnTimer()" (возможно, вы уже используете его, если читаете из telegram).
  3. Затем вы сами устанавливаете миллисекунды между каждым сообщением не с помощью функции Sleep(), а запоминая, когда было отправлено последнее сообщение.
  4. Вы можете использовать GetTickCount() для опроса миллисекунд, и вы будете хранить последние мс, которые оставило сообщение, и вычитать их из текущих мс, чтобы получить расстояние во времени. Есть очень очень очень редкий случай, когда время окончания < времени начала, в этом случае вы делаете так: (UINT_MAX-start_time+end_time)
  5. Если расстояние в миллисекундах с момента последнего сообщения больше, чем установленный вами лимит в миллисекундах, то вы отправляете следующее сообщение из папки "Исходящие".
  6. Вместо вызова bot.SendMessage в цикле вы теперь вызываете Outbox.add_message_for_sending или что-то в этом роде.
  7. С модификацией, которая также хранит идентификаторы чатов, вы также могли бы хранить, куда отправляется сообщение, и это было бы решением для нескольких пользователей.