Discussão do artigo "Como criar bots para Telegram em MQL5" - página 32
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Olá a todos,
Talvez alguns de vocês possam ajudar, estou tentando desesperadamente encontrar uma solução para enviar uma captura de tela local via MT4 para o Telegram.
Código rápido e resumido
O primeiro funciona, pois estou recebendo a mensagem, mesmo se eu usar @channelname
O segundo funciona apenas com o chatID, o que está ok, posso viver com isso
O terceiro está me dando um erro:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
Alguma ideia do que estou fazendo de errado?
Olá a todos,
Talvez alguns de vocês possam ajudar, estou tentando desesperadamente encontrar uma solução para enviar uma captura de tela local via MT4 para o Telegram.
Código rápido
O primeiro funciona, pois estou recebendo a mensagem, mesmo se eu usar @channelname
O segundo funciona somente com o chatID, o que é aceitável, posso viver com isso
A terceira está me dando um erro:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
Alguma ideia do que estou fazendo de errado?
Sim, você precisa modificar o arquivo mqh para que ele aceite esse número negativo.
@Marco vd Heijden, obrigado!
Isso é interessante. Dei uma olhada no Telegram.mqh e vi três funções para SendPhoto, das quais estou me perguntando como o código sabe qual delas usar. De qualquer forma, a terceira está fora de questão.
Primeira:
Segundo:
É possível que o código não saiba qual delas eu quero usar? Estou tentando acionar a primeira, mas na verdade a segunda seria melhor.
Em segundo lugar, tentei pesquisar na primeira função o que está acontecendo com _chat_id, mas só consigo ver uma simples conversão de inteiro para cadeia de caracteres:
observe o segundo parâmetro: um é um long e o outro é uma string
e
isso faz parte dos princípios básicos do mql, você pode ter milhões de funções com o mesmo nome com parâmetros ou número de parâmetros diferentes
@Jefferson Metha, sim, eu entendo isso, foi apenas um pensamento meu, pois tem sido muito difícil encontrar os problemas.
Usei agora as dicas descritas em https://www.mql5.com/en/forum/89826/page15#comment_17079865, mas ainda não consegui chegar a lugar algum.
Gostaria de me concentrar na função sendPhoto, em que a entrada é o nome do canal, não o ID do chat, portanto, vamos nos concentrar apenas em uma coisa.
O que fiz até agora, no Telegarm.mqh, na função
Modifiquei a seguinte linha:
Basicamente, removendo a função StringTrim, mas não está melhorando.
Finalmente descobri.
Alterações:
Removido:
E, finalmente, no EA, tão simples quanto:
Boa tarde.
Obrigado pelo artigo detalhado. Muito útil.
Descobri que a solicitação WEB não funcionou.
Ela apresenta um erro
2020.08.19 15:56:04.830 Moving Average Signal To Alert (RTSRIU0,M1) Error: URL is not allowed for WebRequest
Depois de pesquisar, descobri que estava faltando um ?( pergunta) depois de /sendmessage?
Isso já foi corrigido? Existe uma nova versão?
Eu mesmo vou consertar isso.
Estou enviando texto para o telegrama a partir do indicador. Mas tive de alterar o tipo de solicitação POST para GET.
Se eu enviar com POST, recebo o erro 400. Se eu enviar o mesmo código do EA (mas usar WebRequest em vez de _WebRequest), o código funcionará no modo POST. Você pode me dizer onde procurar, já que no método GET eu tenho um limite para o tamanho da solicitação?
Erro e com GET também erro 400...
2020.08.21 08:52:20.138 testWININET GBPUSD,M1: Erro ao carregar 'https://api.telegram.org/bot123123123:ываываыукаыва /sendMessage?chat_id=-123123123123123&parse_mode=HTML&text=Hello', código 400
Se eu enviar pelo navegador, a solicitação será concluída.
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
//#include <Wininet.mqh>
#include <Webrequest_dll.mqh>
#define telegramBaseURL "https://api.telegram.org"
//https://tlgrm.ru/docs/bots/api para ler como enviar o quê
input string inpToken="11111212:vapvapYVVAEFfer";//Token
string de entrada inpChat_id="-3123123123123213";
bool inpParsMode =true;
int OnInit()
{
string data;
string url="https://api.telegram.org/bot" + inpToken + "/sendMessage?chat_id="+inpChat_id;
se(inpParsMode){
url = url + "&parse_mode=HTML"
}
// url = url + "&text= " + "<b>1114</b>"
// url = url + "&text= " + "<i>1114</i>";
url = url + "&text=" + "1118";
Imprimir (url);
string cookie=NULL,headers;
char post[],result[];
int res=_WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
if(res==-1)
{
Print("Erro no WebRequest. Código de erro =",GetLastError());
//--- o URL provavelmente está faltando na lista, imprima uma mensagem sobre a necessidade de adicioná-lo.
MessageBox("É necessário adicionar o endereço '"+url+"' à lista de URLs permitidos na guia 'Advisors'", "Error",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- download bem-sucedido
PrintFormat("File successfully uploaded, size %d bytes.",ArraySize(result));
//PrintFormat("Server headers: %s",headers);
//--- salvar dados no arquivo
int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- salvar o conteúdo da matriz result[] em um arquivo
FileWriteArray(filehandle,result,0,ArraySize(result));
//--- fechar o arquivo
FileClose(filehandle);
}
else
Print("Erro em FileOpen. Código de erro =",GetLastError());
}
else
PrintFormat("Erro ao carregar '%s', código %d",url,res);
}
// ReadUrl(url,data);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizado
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- retorna o valor de prev_calculated para a próxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+