Discussão do artigo "Como criar bots para Telegram em MQL5" - página 51

 
Valeriy Yastremskiy #:

Sim, não estou entendendo, não sei, também não consigo enviar para o bot pelo nome, apenas pelo ID. Como você envia para si mesmo? Ou melhor, como você obtém seu ID no carrinho? Eu só consigo enviar para o bot.

Eu obtenho qualquer ID por meio do bot Get My ID

 
Andrey Kaunov #:

Eu obtenho qualquer identificação por meio do bot Get My ID.

Sim, confundi minha ID com o bot. Enviamos para nós mesmos em uma mensagem privada de nosso próprio bot))))

Do artigo de Andrei

Deve-se observar que, nesses exemplos, passamos o chat_id como o destinatário da mensagem. Não podemos saber com antecedência para enviar uma mensagem ao usuário até que ele comece a conversar com o bot primeiro. Também não há como entrar em contato com o usuário pelo número de telefone celular ou pelo nome de usuário. Isso é feito, obviamente, por motivos de segurança, para que os bots não enviem spam. Mas os bots podem publicar mensagens no canal dirigindo-se ao usuário pelo seu nome usando a segunda opção SendMessage.

[Excluído]  

Olá,

Estou tentando adicionar um novo idioma ao arquivo Search, mas tenho esses parâmetros hexadecimais que não entendo o significado:

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"}
};

O que é esse \xF1EC\xF1E7 no inglês, por exemplo, e como convertê-lo para obter a bandeira pt?

 

Tive um problema na semana passada: a função de ler a fila de mensagens do Telegram parou de funcionar. Ou seja, as mensagens de saída são enviadas como antes, tanto o texto quanto as capturas de tela, mas a função GetUpdates() não retorna nada, a fila de bate-papo está sempre vazia.

Alguém já se deparou com essa falha? Qual pode ser o motivo?

 
Olá!
Muito obrigado por esse tipo de trabalho!!!!
Você poderia me dizer como alterar a fonte, o plano de fundo e a cor do texto?
Muito obrigado
 
lbgraf #:
Olá!
Muito obrigado por esse tipo de trabalho!!!!
Você poderia me dizer como alterar a fonte, o plano de fundo e a cor do texto?
Muito obrigado

Todas as tags estão descritas nos documentos da API do Telegram.

 

Olá, pessoal,

Concluí o código para enviar mensagem do telegrama para o mt5, mas estou tendo um pequeno erro: ao enviar o comando close de vários comandos close ao mesmo tempo, ele só pode enviar uma ordem, mas não várias ordens.

Alguém pode me ajudar a ver onde estou errando?

//--- agora processa a lista de posições fechadas
   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); // Obter o nome do símbolo
      digits = (int)SymbolInfoInteger(pos_symbol, SYMBOL_DIGITS); // Obter o número de dígitos no preço
      //--- Selecione uma posição fechada por seu índice na lista
      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();   // da posição selecionada
         int      orders_count      = HistoryOrdersTotal();  // da posição selecionada
         
         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 #:

Olá pessoal,

Concluí o código para enviar mensagens do telegrama para o mt5, mas estou tendo um pequeno erro: ao enviar o comando close de vários comandos close ao mesmo tempo, ele só pode enviar uma ordem, mas não várias ordens.

Alguém pode me ajudar a ver onde estou errando?

Código formatado incorretamente removido pelo moderador. @Bui Huy Dat EDITAR sua postagem e usar o botão CODE ao inserir o código.

Se você estiver atendendo a muitos usuários por meio do bot, há um limite de 30 interações por segundo, creio eu

 
Lorentzos Roussos #:

Se você estiver atendendo a muitos usuários por meio do bot, há um limite de 30 interações por segundo, creio eu

Eu só o uso pessoalmente e apenas para enviar cada conta do mt5 para o telegrama.
mas ao abrir ou fechar o comando ao mesmo tempo, ele só pode enviar uma mensagem para o telegrama

 
Bui Huy Dat #:

Eu só o uso pessoalmente e apenas para enviar cada conta do mt5 para o telegrama.
mas, ao abrir ou fechar o comando ao mesmo tempo, ele só pode enviar uma mensagem para o telegrama

Não havia código quando respondi, mas vejo que você pode substituir o bot.SendMessage por uma função que adiciona a mensagem a uma lista de explosões. Você também poderia continuar a aumentar a mensagem e enviá-la para fora do loop, mas isso limitaria o número de caracteres.

Um breve esquema poderia ser o seguinte:

  1. Você tem uma matriz de strings chamada "Caixa de saída"
  2. Um intervalo de tempo dentro do qual você processa a Caixa de saída, portanto, "OnTimer()" (você já deve estar usando isso se também estiver lendo o telegrama)
  3. Em seguida, você impõe a si mesmo um limite de milissegundos entre cada mensagem, não com a função Sleep(), mas lembrando-se de quando a última mensagem foi enviada
  4. Você pode usar GetTickCount() para pesquisar milissegundos e armazenar o último ms que a mensagem deixou e subtraí-lo do ms atual para obter a distância em tempo. Há uma ocasião muito, muito, muito rara em que a hora de término é menor do que a hora de início e, nesse caso, você faz o seguinte: (UINT_MAX-start_time+end_time)
  5. Se a distância em milissegundos desde a última mensagem for maior do que o limite em milissegundos que você impôs, você enviará a próxima mensagem da Caixa de saída
  6. Em vez de chamar bot.SendMessage no loop, você agora chama Outbox.add_message_for_sending ou algo assim.
  7. Com uma modificação que também armazena os IDs de bate-papo, você também poderia armazenar para onde a mensagem está indo, e essa seria a solução para vários usuários.