[Ninjatrader 8] Trading Algorítmico

Trading Algoritmico Ninjatrader 8 Trading Algoritmico Ninjatrader 8

Creación de Algoritmos con Ninjatrader

Introducción – Sobre Ninjatrader

En el artículo de hoy me gustaría hablar de una plataforma la cual suelo mencionar alguna vez pero de la que nunca he creado contenido, hablo de Ninjatrader (en su última versión a fecha actual, versión 8), una plataforma enfocada hacia el mercado de Futuros, la cual es en cierto modo competencia directa de otras plataformas orientadas hacia Trading Algorítmico como Tradestation.

Cuando hablamos de esta plataforma, hablamos de uno de los referentes de Trading Algorítmico minorista en los países Angloparlantes, aunque parece que en España y Latino América no ha llegado a tener tanta fama como en el resto del mundo.

Ninjatrader tiene aspectos únicos y diferentes, especialmente cuando la comparamos contra su competencia directa.

Es una plataforma que utiliza un lenguaje «normal» / «original» con pocas modificaciones, y es que la mayor parte de esta plataforma no solo es C#, es que además podemos integrar Visual Studio y por ende podemos ampliar la funcionalidad de nuestros sistemas de Trading Algorítmico de una manera increíble.

Esto supone un avance interesante, especialmente cuando necesitemos funciones especiales, que, aunque muchas están disponibles en otros lenguajes, se crean de manera más complicada y tediosa.

Esto incluye llamadas simples a webs, extracción de datos de terceros a tiempo real, conexión con redes sociales y mensajería si la intención es controlar las posiciones o compartir ideas y un mil posibilidades más.

En general, cuando buscamos el aspecto más simple del Trading Algorítmico, cualquier plataforma nos sirve, pero la especialización es lo que diferencia una plataforma de otras.

En el caso de Ninjatrader, tenemos un enfoque muy amplio en los temas de Volume Profile, Time & Sales y Order Book junto a las posibilidades de C#, además de una facilidad de código, cuando hablamos de hacer una transición desde otros lenguajes como MQL4 o MQL5 bastante cómoda.

No quiero olvidarme mencionar su soporte sobre arquitecturas de 64-Bits la cual nos permite exprimir la potencia de los procesadores modernos, algo que muchas plataformas todavía no tienen.

El objetivo de este artículo será sentar una base sobre los básicos de esta plataforma y su programación para Trading Algorítmico. Intentando darle un enfoque desde cero a nivel de programación.

Es decir, este es el enfoque que yo le daría a la programación y Trading Algorítmico en esta plataforma si estuviese aprendiendo a programar.

NinjaScript y C#

Ninjascript o C#, dos lenguajes que realmente son el mismo a efectos prácticos, a excepción de las funciones predefinidas, como pueden ser algunos Arrays con el Precio, las formas de entrar a mercado, número de velas e indicadores.

Al tener una base en C# hablamos de un lenguaje orientado hacia objetos, en teoría, en la práctica he podido comprobar que muchos scripts, pese a estar separados en funciones, se escriben de manera procedural.

Para aquellos que no sepan que es un lenguaje orientado a objetos, pensad en la división de herramientas (partes de código) que serán llamadas luego a ejecutar si fuese necesario. En vez de tener todo en el mismo archivo, generando un código 1.000 líneas, podemos separar todo en distintos archivos (llamados «Clases») con funciones predeterminadas que compondrán nuestro sistema de trading algorítmico.

El lenguaje en sí no es muy diferente de MQL4, estando éste basado en C++ y Ninja en C#.

Vamos a ver un código simple de ejemplo.

Ninjatrader Codigo Ejemplo

Ninjatrader Codigo Ejemplo

La función OnBarUpdate() sería el símil a OnTick() de nuestro Metatrader 4, es decir, donde ejecutamos la estrategia, pero estamos diciéndole que sea por cada vela que pasa en vez de Tick, el cual podemos usarlo también en Ninja, pero al menos, como ya sabéis por mi parte, uso siempre velas ya formadas.

Los dos primeros Ifs son mecanismos de seguridad que en Metatrader 4 son opcionales, pero en Ninjatrader sin estos, muchos Backtest no funcionan.

Necesitamos que haya un número mínimo de velas y que queden efectivamente velas para funcionar.

El resto como veis, es un sistema de Trading Algorítmico normal y corriente. Nos devuelve los máximos y mínimos en formato int con la posición del array de forma similar a Metatrader 5.

No hagáis mucho caso a las reglas de Entrada y Salida, son pruebas que estuve haciendo anoche con Ninjatrader.

Si la posición del mercado es «Flat», es decir, MarketPosition<>0 (Tradestation) o Trade==true (Como he enseñado a hacerlo en MQL4) revisamos las condiciones de mercado y ejecutamos una orden.

Nos olvidamos de OrderSend y decimos EntryLong(cantidad, comentario) o EntryShort. Y si han pasado X velas desde la posición, cerramos.

Como podemos ver, no es un lenguaje complicado al uso, de hecho yo diría que aunque el nombre de las funciones sea largo, es increíblemente intuitivo.

Como aprender C#

Algo que suelo recomendar siempre, es aprender un lenguaje de programación de propósito generalista, y si queremos aprender Ninjatrader será todavía aún más interesante por los argumentos presentados.

Hay un curso online gratuito muy interesante de píldoras informáticas sobre este lenguaje:

Desde esta web y sin tener afiliación alguna con Píldoras Informáticas me gustaría agradecer su labor de divulgación de programación y pediros que si os gusta el contenido, apoyéis su canal en Youtube.

Similitudes con otros lenguajes:

Realmente NinjaScript no dista mucho de MQL4, las funciones son muy similares, cuando accedemos al High, Low, RSI… etc, la sintaxis es muy similar y ambos son lenguajes fuertemente tipados con las mismas normas de puntos y comas, llaves, corchetes y paréntesis.

Sigo recomendando como base de Trading MQL4 y Metatrader 4 incluso para las personas que no quieran operar Forex ni lleguen a ejecutar en real con esta.

Por la facilidad de esta plataforma y la curva de aprendizaje en programación además de ser gratuita con datos incluidos. No es un paso obligatorio, se puede empezar con C# o Ninja desde cero, pero creo que puede seguir siendo una buena ayuda conocer esta plataforma.

Como una opinión personal, con mi curso gratuito en Youtube de MQL4 he visto como personas sin demasiados conocimientos de informática han conseguido aprender desde cero, personas de todas las edades y lugares.

Digo esto, de forma muy relacionada, con que, un lenguaje tan similar a MQL4, puede ser aprendido fácilmente, siempre y cuando se tenga constancia para no abandonarlo. ¡Sin excusas!

Otros lenguaje similar que puede ser de ayuda sería Java.

La mayoría de lenguajes de programación para plataformas de Trading Algorítmico están basados en C, C++, C# o Visual Basic.

Recursos Ninjascript:

Existen pocos recursos para Ninjascript en la red como tal, pero el manual de referencia es una buena ayuda, para buscar cuando se necesiten averiguar determinadas funciones.

Esto es, como sacar el máximo de un array, como llamar a un determinado indicador, desde luego es un recurso común a todos los lenguajes de programación y todas las plataformas.

Manual de referencia de Ninjascript.

Desarrollando estrategias de Trading Algorítmico

Vamos a empezar con los básicos una y otra vez, como ya digo, post introductorio, no espero que sepáis de programación ahora mismo.

Conexión y descarga de datos históricos:

Lo primero, será en Ninjatrader crear una conexión de datos. Si queremos hacer Trading Algorítmico con Futuros, necesitaremos históricos y estos son de pago, las alternativas gratuitas para aprender a programar son Forex y Cryptos.

Podemos usar Oanda (Forex) y Coinbase (Cryptos), voy a quedarme con la última por no necesitar registro alguno.

Conexiones Ninjatrader

Conexiones Ninjatrader

Desde ahí iremos a configure y añadiremos una conexión con Coinbase. Una vez la tengamos, nos conectaremos a esta y quitaremos las demás.

Una vez conectados es hora de descargar los datos:

Historicos Ninjatrader

Historicos Ninjatrader

En Herramientas -> Datos Históricos, una vez conectados a una fuente de datos, es tan fácil como ir a la pestaña Load y seleccionar el instrumento a descargar, fecha y tipo de datos. En este caso BTCUSD en datos de minuto con precio last.

Load - Cargar datos

Load – Cargar datos

Para conocer las posibilidades de datos históricos podemos verlo directamente en la página de Ninjatrader.

Creando nuestra primera estrategia de trading con Ninjatrader:

Trading Algoritmico - Ninjascript Editor

Trading Algoritmico – Ninjascript Editor

Una vez abrimos nuestro Ninjascript deberemos seleccionar el tipo de herramienta que queremos crear, botón derecho sobre Strategy:

Estrategias -> Nueva Estrategia

Estrategias -> Nueva Estrategia

Nota importante: Si queréis parámetros externos, añadidlos desde el asesor visual, en código da problemas.

Entonces, con este asesor visual de Ninjatrader para crear nuestra estrategia de trading algorítmico, añadiremos su nombre, descripción, cuando ejecutaremos el código (Tick, Vela, Cambio de Precio), parámetros externos y funciones como profundidad de mercado, noticias… etc

Una vez realizado esto, tenemos un código limpio. Y nos centraremos en la función OnBarUpdate().

Como ya digo, Ninjatrader tiene sus peculiaridades para Trading Algorítmico, y lo primero sería añadir el siguiente código:

if (BarsInProgress != 0)
return;
if (CurrentBar < BarsRequiredToTrade)
return;

Si no tenemos histórico cargado o no hay lo suficiente, para. El histórico tarda en cargarse durante el Backtest y sin estas líneas podemos generar un conflicto, al no haber datos la estrategia no funcionará. Esto lo soluciona.

Ahora solo nos falta lo mejor, crear una estrategia simple de Trading Algorítmico para comprobar cómo funciona este código.

Para ello, lo primero que haremos es asegurarnos que no existan otras posiciones en mercado, de esta forma nos evitaremos problemas de cara a un futuro. Nuestro famoso if(trade==true) en versión Ninjatrader:

if(Position.MarketPosition == MarketPosition.Flat){

acciones;

}

Si nuestra posición en mercado es plana, es decir, no hay nada abierto, podremos comenzar.

Tened en cuenta, que en principio, no podemos hacer Hedging o «posiciones contrarias» en esta plataforma, debido a las regulaciones Americanas sobre el mercado de futuros todo va por «Netting» o posicionamiento neto. Importante eso.

Entonces, si nuestra posición es plana, podemos operar, y crearemos condiciones sencillas para comprobar este funcionamiento.

Dicho esto, podemos ejecutar un hello world clásico de las estrategias de Trading:

Estrategia Algoritmica básica

Estrategia Trading Algorítmico básico

Traducida a pseudocódigo:

Por cada cambio de vela entonces comprobamos

Si hay velas para operar entonces comprobamos

Si no tenemos posición en mercado entonces comprobamos lo siguiente:

Si el precio de la última vela es mayor que la apertura -> Compramos

Si ha pasado un número determinado de velas desde ejecución -> Cerramos

Este número de velas es un parámetro int, pero podemos sustituirlo tranquilamente por un número como primera prueba. Si es mayor o igual que 5, por ejemplo.

Una vez tenemos nuestro código le daremos a compilar.

Probando nuestra estrategia:

Una vez compilada la estrategia, vamos al menú New -> Strategy Analyzer y nos encontraremos algo así:

Backtest Ninjatrader

Backtest Ninjatrader

A la derecha, en Settings, vemos todas las opciones posibles para hacer el Backtest de nuestra estrategia de Trading Algorítmico.

  • Tipo de Backtest (Optimización o normal)
  • Parámetros si los hubiese.
  • Instrumento y timeframe.
  • Fechas.
  • Incluir comisiones, fill de las órdenes… etc

A la izquierda los datos clásicos, profit factor, ganancias, pérdidas, ratio de Sharpe, r cuadrado…

Sin más dilación vamos a ejecutar nuestro backtest ajustando la temporalidad a 15 Minutos y pulsando en «Run».

Backtest Ninjatrader - Sumario

Backtest Ninjatrader – Sumario

Y si pulsamos en Summary, podemos ver el resto de opciones que nos ofrece esta plataforma a nivel de Trading Algorítmico:

Backtest Ninjatrader - Analisis

Backtest Ninjatrader – Analisis

Ya sabeis que la investigación es una parte muy importante en el Trading Algorítmico, y es por eso que os voy a dejar investigar un poco este tipo de ratios.

¿Es Ninjatrader una plataforma adecuada para mí?

He querido esperar a responder esta pregunta, primero enseñando el código, y es que de hecho, como veis es uno de los mayores pros que tiene.

Pero hay más, el uso de datos de Tick reales si se paga por ellos es otra ventaja muy grande para probar mejor las ventajas que extraigamos, el uso de Ticks y un buen proveedor de datos incluye el spread real de ese momento y el tamaño de las órdenes limitadas, para saber cuanto sería el deslizamiento de entrar con una orden a mercado (slippage). Recordando que los datos de futuros son centralizados, por lo que, a diferencia de Forex aquí los ticks pueden ser importantes.

El optimizador que tiene es bastante bueno y el algoritmo genético igual, el poder utilizar arquitecturas de 64-Bits da un rendimiento interesante.

El acceso a datos de la plataforma como Volume Profile, Profundidad de mercado e incluso velas «exóticas» por defecto como Renko y Heiken Ashi es otro plus.

Tiene sus desventajas también, oferta limitada de brokers, márgenes altos para futuros (salvo índices micro que siempre es el reclamo publicitario), la plataforma es cara y si usas la versión gratis las comisiones son más elevadas.

Por último, según que herramientas, el consumo de memoria RAM es disparatado, especialmente con la versión 8 donde se han reportado cientos de bugs usando Order Flow, herramienta que personalmente no me interesa, pero si buscas algo así… Mira otra plataforma.

Podría englobar que, si quieres una plataforma amplia para Trading Algorítmico, tienes un capital relativamente amplio para cubrir costes de datos y plataforma (Tradestation los da gratis) y quieres ejecutar estrategias está bien, tanto para las más complejas como las simples. Es una plataforma bastante completa para el análisis de pautas.

Si tienes una cuenta pequeña, no quieres caer en gastos de data y plataforma quizá miraría otras.

Ninjatrader vs Alternativas

Algo interesante para elegir una plataforma de Trading Algorítmico, es comparar esta con sus rivales directos, en el caso de Ninjatrader podríamos hablar de Tradestation y Sierra Chart.

Tanto Ninjatrader como Sierra Chart son de pago y sus características son muy similares, a la hora de procesar datos, crear algoritmos, lecturas de Level II y productos que se suelen operar (Futuros).

Cuando las comparamos con Tradestation, esta última es algo más simple y está orientada a Trading Algorítmico al 100%, pero no tiene las mismas facilidades para operar datos de Nivel 2 o noticias en Futuros.

Entre las tres, los márgenes más baratos se encontrarían en Sierra Chart mediante el broker AMP. Aunque con la volatilidad actual de mercado la diferencia no es demasiada.

Conclusión

Dentro del universo de plataformas para Trading Algorítmico, Ninjatrader es una opción válida y no me sorprende su uso tan expandido en los países Angloparlantes, especialmente en los Estados Unidos, donde es muy común ver material que en España todavía no hay.

El trading algorítmico en España y en los países latinos que son Hispanohablantes, como Colombia y México (países donde acorde a Google Trends hay más interés en el Trading), no es tan popular y la cantidad de material es menor (y quizá de menor calidad) y solo está enfocada a Metatrader 4 por ser una plataforma popular y sencilla, no quita que efectiva, pero, hay que conocer todas las alternativas posibles.

Hay muchos canales de Trading Algoritmico para esta plataforma en Inglés y merece la pena verlos, aunque os recuerdo que el proceso de investigación será el mismo en Tradestation y en Ninjatrader, cambia el lenguaje y algunas posibilidades, pero, tened en cuenta que la plataforma solo es la ejecución.

Dicho esto, para aprender este lenguaje de programación en profundidad me parece obligatorio pasar por C#, al menos para sacarle todo el potencial posible, entendiendo que, si estás interesado en esta plataforma será por acceso a datos más complejos que en otras. Aunque si la comodidad es el caso, se puede aprender desde cero o partiendo de lenguajes como MQL4.

Ya he mencionado píldoras informáticas, aunque no creo que tarde mucho en sacar material sobre este lenguaje de programación en algún momento, y enfocado directamente a la plataforma y al Trading Algorítmico.

Como siempre, espero que esto te sea de ayuda.

Un abrazo, Víctor – Sagaquant.

Artículos relevantes:

Estrategia para Futuros sobre Soja – Sagaquant

¿Forex o Futuros? – Sagaquant