Desde un indicador, estrategia, Add-On y en general cualquier NinjaScript de NinjaTrader, se pueden enviar mensajes con texto y/o imágenes a Telegram.

Para lograr la comunicación entre Telegram y NinjaTrader hay que realizar dos tipos de acciones:

  1. Configuración en Telegram para crear un bot y un canal.
  2. Programación del código correspondiente en NinjaTrader.

Para este artículo voy a utilizar como caso práctico un indicador de NinjaTrader, de modo que cuando se haga doble clic sobre el panel del chart en el que está cargado el indicador, se envíe a Telegram un mensaje con un texto y otro mensaje con la captura de pantalla del chart.

Al final del artículo se encuentran las actualizaciones que he añadido al contenido original.


Crear un bot en Telegram

El bot servirá para la comunicación entre Telegram y NinjaTrader.

Primero instalamos en el teléfono móvil la app Telegram, si no la tuviéramos ya instalada.

Ahora hay que crear el bot. Abrimos el browser en el móvil, y en la barra de direcciones escribimos : telegram.me/botfather

Instalar BotFather
Escribir en el browser del teléfono móvil la URL telegram.me/botfather

Esto abrirá Telegram y creará automáticamente un nuevo canal llamado BotFather desde el cuál podremos crear y gestionar nuestros bots. Entramos en el canal BotFather y escribimos /newbot.

A continuación el canal solicita un nombre para el bot (en el ejemplo he usado testbolsa01), y un usuario para el bot (he usado testbolsa01bot).

BotFather. Comando newbot

Tras introducir los datos anteriores, el canal me devuelve un mensaje que incluye un token o identificador único para el bot. Este token debe conservarse de forma segura y no compartirse. Más adelante lo utilizaremos en el código NinjaScript. Opcionalmente puedo comprobar que el bot se ha creado correctamente, ejecutando el comando /mybots que mostrará una lista con el bot.

Telegram Bot Token-ID para enviar mensajes a Telegram

Para establecer una comunicación básica con el bot y comprobar que está activo puedo abrir un navegador en cualquier dispositivo (pc, teléfono móvil o tablet) y escribir en su barra de direcciones: https://api.telegram.org/bot<TOKEN-ID>/getMe

Donde <TOKEN-ID> es el token del bot; con lo que siguiendo con el ejemplo habría que escribir: https://api.telegram.org/bot746195535:AAE80G12j0IMTb3AgjnzjvH64k28amzFIDc/getMe

Si el bot está operativo en la ventana del browser aparecerá un simple mensaje de éxito como el siguiente, con el parámetro ok = true.

Telegram Browser Success

Crear un channel en Telegram

Una vez creado el bot que servirá para enviar mensajes a Telegram, el siguiente paso es crear el canal de Telegram donde se publicarán los mensajes enviados.

Abrimos el menú de Telegram y seleccionamos Nuevo canal.

Telegram. Crear Nuevo Canal

Para el nombre del canal recomiendo emplear palabras simples, sin espacios en blanco, ni tildes ni símbolos de acentuación o especiales. Y aún así puede que el nombre del canal dé problemas y el código NinjaScript capture una excepción de "Chat no encontrado" en cuyo caso habrá que probar con otro nombre.

Elijo arbitrariamente testbolsa02 como nombre para el canal. Es imprescindible que el canal sea público. También nos aseguramos que el enlace de invitación esté informado, y las notificaciones activadas.

Telegram Nuevo Canal creado

Autorizar al bot como administrador

Ahora hay que autorizar al bot testbolsa01bot como administrador del canal testbolsa02.

Entramos en el canal testbolsa02 y pulsamos sobre el encabezado para abrir la configuración.

Configuración Canal para enviar mensajes a Telegram

Pulsamos en Miembros/Administradores y por último en Añadir administrador.

Telegram. Añadir Administrador

Pulsamos en la lupa para abrir la búsqueda y escribimos testbolsa01bot. Y lo elegimos para añadirlo a los administradores del canal.

Telegram Buscar Administrador

Nos aseguramos de que tenga los siguientes permisos. Y pulsamos en el tick de Aceptar.

Permisos Administrador Telegram

Y con esto finalizamos la configuración en Telegram.


Importar librerías en NinjaTrader

Existe un proyecto opensource para enviar mensajes desde aplicaciones .NET a Telegram que se encuentra en este repositorio de GitHub. Aquí el lector encontrará documentación detallada sobre Telegram y la comunicación con .NET.

Para nuestro ejemplo sólo necesitamos conseguir los siguientes ficheros DLL:

  • Telegram.Bot.dll
  • Newtonsoft.Json.dll
  • System.Runtime.CompilerServices.Unsafe.dll
  • System.Threading.Tasks.Extensions.dll

La versión más reciente de estos ficheros se puede obtener clonando la última versión de ese repositorio de GitHub y compilando la solución en VisualStudio. Pero para facilitar la tarea también se pueden descargar directamente desde los links que facilito al final del artículo, aunque con el riesgo de que los ficheros estén desactualizados.

Una vez conseguidos los cuatro ficheros DLL, hay que copiarlos en el directorio \Documents\NinjaTrader 8\bin\Custom.

Después arrancamos NinjaTrader, abrimos el NinjaScript Editor, clic derecho para abrir el menú contextual, clic en References..., pulsamos en add y añadimos las DLL's anteriores.

Si en el futuro actualizáramos esos ficheros copiando y pegando versiones más recientes de los mismos y nuestro código NinjaScript dejara de funcionar, tendríamos que actualizar las References, borrando las antiguas y añadiendo las nuevas, aún cuando el nombre de los ficheros DLL sea el mismo.

Código de la estrategia en NinjaTrader

Desde el NinjaScript Editor creamos una estrategia nueva.

En la cabecera del código, dentro de la región Using declarations, añadimos las siguientes declaraciones.

using declarations

A continuación añadimos las siguientes constantes y variables globales. Observar que el nombre del canal debe ir prefijado con una arroba.

Variables globales para enviar mensajes a Telegram

Dentro del método OnStateChange, en el State.DataLoaded creamos un objeto de tipo TelegramBotClient que usaremos para la comunicación con el bot de Telegram. Al método constructor hay que pasarle el token del bot que nos facilitó BotFather.

En el State.Historical obtenemos la referencia al Chart y nos subscribimos al evento de pulsación del mouse en el panel en que se cargue el indicador. La referencia al Chart hay que conseguirla desde un Dispatcher para no provocar excepciones de seguridad por intentar acceder a objetos propiedad del hilo UI principal. En el State.Terminated nos desubscribimos del evento para liberar los recursos asociados.

OnStateChange para enviar mensajes a Telegram

Método manejador del evento MouseMove

Dentro de este método programamos el comportamiento para cuando el usuario haga doble clic sobre el panel en el cuál está cargado el indicador.

Primero se comprueba que el usuario ha hecho doble clic. Después se obtiene una captura de pantalla de todo el chart. Esa captura se codifica y se graba a un Stream que se enviará a continuación a Telegram en modo asíncrono.

NinjaScript MouseDown para enviar mensajes a Telegram

Envío asíncrono a Telegram

Es necesario crear un método asíncrono para la comunicación con Telegram. Desde ese método asíncrono enviamos el Stream anterior que contiene la captura de pantalla. También aprovechamos para enviar un mensaje de texto.

Enviar mensajes a Telegram

Compilamos el código y ya está la solución finalizada. Cargamos el indicador en un chart y al hacer doble clic sobre su panel se deberían enviar los dos mensajes (texto + imagen) al canal de Telegram.


Descargas

Fichero comprimido con las DLL's y el código fuente del indicador.

[wpdm_package id='3934']

Actualización videos

Incluyo dos videos de ejemplo de cómo crear un bot y un canal en Telegram, que se muestran a continuación. Estos videos son complementarios al contenido del artículo.

https://youtu.be/F22tXFGCYN4
https://youtu.be/UZbp5y6YXfU

Actualización código con condición lógica

Añado un ejemplo de código para enviar mensajes (texto + imagen) a Telegram cuando se cumple una condición lógica.

El ejemplo que hemos visto tiene una finalidad didáctica. Pero sería más útil enviar el mensaje desde una estrategia automática, cuando se cumpla una condición lógica como puede ser la concurrencia de señales procedentes de indicadores para abrir posición, o bien al lograrse el filled de una orden de entrada, o al saltar un stop-loss, etc.

En el ejemplo voy a simplificar al máximo la condición lógica y voy a enviar un mensaje de texto y una captura de pantalla del chart cuando la barra corriente sea la 20. Evidentemente el lector tendrá que modificar esta condición y editarla de acuerdo a sus necesidades.

Código enviar texto + imagen a Telegram
¿Quieres dominar NinjaScript?

Aprende a programar indicadores y estrategias desde cero

Si integrar NinjaTrader con Telegram te ha parecido interesante, en el curso aprenderás a construir herramientas mucho más avanzadas en C# y NinjaScript.