Discusión sobre el artículo "Cómo crear un bot para Telegram en el lenguaje MQL5" - página 32
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola a todos,
Tal vez algunos de ustedes pueden ayudar, estoy tratando desesperadamente de encontrar una solución para enviar una captura de pantalla local a través de MT4 a Telegram.
Código rápido snipped
El primero funciona, ya que recibo el mensaje, incluso si uso @nombredelcanal
El segundo sólo funciona con chatID, lo cual está bien, puedo vivir con ello.
El tercero me da error:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
¿Alguna idea de lo que estoy haciendo mal?
Hola a todos,
Tal vez alguno de ustedes pueda ayudar, estoy tratando desesperadamente de encontrar una solución para enviar una captura de pantalla local a través de MT4 a Telegram.
Código rápido snipped
El primero funciona, ya que recibo el mensaje, incluso si uso @nombredelcanal
El segundo funciona sólo con chatID, que está bien, puedo vivir con ella
La tercera me da error:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
¿Alguna idea de lo que estoy haciendo mal?
sí tienes que modificar el archivo mqh para que acepte ese número negativo.
@Marco vd Heijden ¡gracias!
Es interesante, he echado un vistazo a Telegram.mqh y veo tres funciones para SendPhoto, de las cuales me pregunto cómo sabe el código cuál usar. De todas formas la tercera está descartada.
Primera:
Segunda:
¿Podría ser que el código no sabe cuál quiero tomar? Estoy tratando de activar la primera, pero en realidad la segunda sería mejor.
En segundo lugar he intentado buscar en la primera función lo que ocurre con _chat_id, pero sólo veo una simple conversión de entero a cadena:
observe el segundo parámetro uno es un long el otro es una cadena
y
esto es parte de los fundamentos de mql u puede tener millones de funciones con el mismo nombre con diferentes parámetros o número de parámetros
@Jefferson Metha sí lo entiendo, era sólo mi pensamiento, ya que ha sido tan difícil encontrar los problemas.
He utilizado ahora los consejos descritos en https://www.mql5.com/en/forum/89826/page15#comment_17079865, pero todavía no llegar a ninguna parte.
Me gustaría centrarme en la función sendPhoto donde la entrada es el nombre del canal, no ID de chat, así que vamos a centrarnos únicamente en una cosa.
Lo que he hecho hasta ahora, en Telegarm.mqh en la función
He modificado la siguiente línea:
Básicamente quitar la función StringTrim, pero no mejora.
Por fin lo he resuelto.
Cambios:
Eliminado:
Y finalmente en el EA, tan simple como:
Buenas tardes.
Gracias por el detallado artículo. Muy útil.
Me he encontrado con que la petición WEB no funciona.
Da un error
2020.08.19 15:56:04.830 Moving Average Signal To Alert (RTSRIU0,M1) Error: URL no permitida para WebRequest
Después de investigar resultó que faltaba ?( pregunta) después de /sendmessage?
¿Se ha solucionado ya? ¿Hay una nueva versión?
Lo arreglaré yo mismo.
Estoy enviando texto a telegram desde el indicador. Pero tuve que cambiar POST a GET tipo de solicitud.
Si envío con POST, obtengo el error 400. Si envío el mismo código desde el EA (pero utilizando WebRequest en lugar de _WebRequest), el código funciona en modo POST. ¿Me podéis decir dónde tengo que mirar, ya que en el método GET tengo un límite en la longitud de la petición?
Error y con GET también error 400...
2020.08.21 08:52:20.138 testWININET GBPUSD,M1: Error loading 'https://api.telegram.org/bot123123123:ываываыукаыва /sendMessage?chat_id=-123123123123123&parse_mode=HTML&text=Hello', code 400
Si lo envío a través del navegador, la petición pasa.
#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 leer cómo enviar qué
input string inpToken="11111212:vapvapYVVAEFfer";//Token
cadena de entrada inpChat_id="-3123123123123213";
bool inpParsMode =true;
int OnInit()
{
cadena data;
string url="https://api.telegram.org/bot" + inpToken + "/sendMessage?chat_id="+inpChat_id;
if(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,cabeceras;
char post[],resultado[];
int res=_WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
if(res==-1)
{
Print("Error en WebRequest. Código de error =",GetLastError());
//--- probablemente falte la URL en la lista, imprime un mensaje sobre la necesidad de añadirla.
MessageBox("Es necesario añadir la dirección '"+url+"' a la lista de URLs permitidas en la pestaña 'Asesores'", "Error",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- descarga con éxito
PrintFormat("Archivo cargado con éxito, tamaño %d bytes.",ArraySize(result));
//PrintFormat("Cabeceras del servidor: %s",cabeceras);
//--- guardar los datos en el archivo
int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- guardar el contenido de la matriz result[] en un archivo
FileWriteArray(filehandle,result,0,ArraySize(result));
//--- cerrar el fichero
FileClose(filehandle);
}
else
Print("Error en FileOpen. Código de error =",GetLastError());
}
else
PrintFormat("Error al cargar '%s', código %d",url,res);
}
// ReadUrl(url,data);
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizada |
//+------------------------------------------------------------------+
int OnCalculate(const int tasas_total,
const int prev_calculado,
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[])
{
//---
//--- devuelve el valor de prev_calculado para la siguiente llamada
return(rates_total);
}
//+------------------------------------------------------------------+