miércoles, 30 de enero de 2013

Indicadores Técnicos en R


Para el desarrollo de estrategias de trading automático es fundamental contar con una buena librería de indicadores técnicos, tales como medias móviles, ATR, ADX, MACD, RSI, y un largo etcétera. En el entorno R ese papel lo desempeña el paquete TTR. El paquete TTR tiene más de 30 indicadores listos para su uso, que incluyen indicadores clásicos, como medias móviles, y algunos más recientes o menos conocidos, como el indicador DVI. Por otro lado, las funciones de TTR se integran muy bien con las del paquete quantmod del que ya hemos hablado en este blog, y por tanto, no sólo podemos incluir los indicadores técnicos de TTR en nuestra estrategia de trading, sino que además podemos visualizar gráficamente su comportamiento.

Como siempre, para poder empezar a utilizar TTR hay que instalarlo si no lo hubiéramos hecho ya, y decirle a R que lo vamos a utilizar. También aprovechamos para incluir el paquete quantmod:

> install.packages(“TTR”)
> require(TTR)
> require(quantmod)

Vamos a trabajar sobre el cambio EUR/USD, por lo que nos descargamos los datos desde el servidor de Oanda:

> getSymbols("EUR/USD", src="oanda")
> linesChart(EURUSD)

Y finalmente le vamos a añadir algunos indicadores técnicos sobre el gráfico: una media móvil de 60 barras, el indicador MACD con su correspondiente histograma:

> addSMA(n=60)
> addMACD(fast = 12, slow = 26, signal = 9, type = "SMA", histogram = TRUE)

El resultado lo podemos ver en la siguiente figura:

 

Y de igual manera se podría añadir el resto de los indicadores.

miércoles, 23 de enero de 2013

Charting con Quantmod


Una de las características que define el entorno estadístico R es su capacidad para generar gráficos de alta calidad. Algunos ejemplos de lo que se puede hacer con R se pueden encontrar en la siguiente colección. Incluso existen libros enteros dedicados al tema (véase por ejemplo R Graphics de Paul Murrel). Pero en esta ocasión lo que vamos a hacer es revisar brevemente algunas de las capacidades de R a la hora de dibujar gráficos para finanzas. En concreto, vamos a ver las posibilidades que nos ofrece el paquete Quantmod.

Quantmod es un paquete de R que está diseñado para facilitar la tarea de cargar y visualizar datos financieros. Quantomod se integra muy bien con otros paquetes de R como XTS para trabajar con series temporales, y TTR para el cálculo de indicadores técnicos (de los que tendremos oportunidad de hablar más adelante en este blog).

Como cualquier otro paquete, para poder utilizar las herramientas proporcionadas por quantmod, primero tenemos que instalarlo en R:

install.packages('quantmod'))
require(quantmod)

A continuación, lo que necesitamos es cargar en R los datos (serie temporal) de un determinado símbolo. Para ello los descargamos desde alguno de los proveedores de datos gratuitos que existen, como por ejemplo Yahoo Finance, o Google Finance. Nada más fácil, con:

getSymbols("AAPL",src="google")

descargaríamos la cotización de Apple desde Google, o con:

getSymbols("AAPL",src="yahoo")

que la descargaría desde Yahoo Finance. Esto nos cargaría los datos en R y crearía una variable con el mismo nombre del símbolo (AAPL) lista para utilizar. Si queremos visualizar los datos recién cargados en un gráfico de barras, tan simple como:

barChart(AAPL)


si por el contrario lo que queremos son velas japonesas utilizamos:

candleChart(AAPL)

y con líneas:

lineChart(AAPL)

También podemos visualizar sólo parte de los datos que tenemos disponibles con:


candleChart(AAPL, subset='2007-12::2008')

O cambiar los colores de nuestro gráfico con:

candleChart(AAPL, theme='white', type='candles')


Esta ha sido sólo una pequeña introducción a las posibilidades del paquete quantmod. En futuras entradas de este blog veremos cómo combinarlo con el paquete TTR para poder realizar nuestros propios análisis técnicos con R.




 

miércoles, 16 de enero de 2013

¿Por qué Entropycs?


El lanzamiento de la plataforma Entropycs ha despertado cierto interés entre la comunidad de desarrolladores de sistemas automáticos de trading, pero también son muchos los que no entienden del todo cual es el problema que pretendemos resolver, y nos han llegado muchas preguntas del tipo: ¿por qué una nueva plataforma? ¿por qué no simplemente utilizar MetaTrader, TradeStation, NijaTrader, o cualquier otra de las otras existentes en el mercado?

En esta entrada de blog intentaré explicar por qué no es posible utilizar esta plataformas. Para no complicar demasiado las cosas, voy a centrarme en las carencias de MetaTrader 4, que es quizás la plataforma más conocida en este mundo de los sistemas automáticos de trading.

Imaginemos que hemos desarrollado una estrategia de trading, que hemos hecho unas primeras pruebas con datos históricos, y que la estrategia parece que es rentable. A continuación queremos optimizar nuestra estrategia para encontrar aquellos parámetros que nos permitan obtener el máximo beneficio con el mínimo riesgo. Para ello primero tenemos que seleccionar una función objetivo, ¿y cuales son las funciones objetivo que nos permite definir MetaTrader? Pues muy pocas: balance, disminución maximal, y poco más. ¿Y si quiero utilizar alguna función objetivo algo más avanzada, como por ejemplo un ratio de Sharpe, o un retorno ajustado al riesgo? Pues simplemente no se puede.

Por otro lado está el tema de qué algoritmo utilizamos para optimizar nuestro robot. MetaTrader permite elegir entre una optimización lineal, y una optimización basada en algoritmos genéticos. ¿Sólo? ¿Y que pasa con el resto de las técnicas de optimización? Por ejemplo simulated annealing, particle swamp, etc. Pues que no están disponibles.

A continuación queremos hacer un análisis walk forward de nuestro sistema. Una prueba que a nuestro entender es la más básica que se le puede aplicar a cualquier robot de trading. Pues bien, MetaTrader no permite hacerlo. Aquí algunos lectores dirán que se puede hacer de manera manual. Y sí, es cierto. Pero cuando uno quiere aplicar este análisis a decenas de símbolos simultáneamente, la automatización es imprescindible.

¿Y que pasa si hablamos de gestión de carteras? No es ninguna locura pensar que un usuario quiere conocer el rendimiento y el riesgo de varios sistemas considerados en su conjunto. Pues tampoco. ¿Y si queremos analizar los resultados de los robots que tenemos en marcha? No sólo para ver si están cumpliéndose las expectativas que teníamos de ellos, sino también porque a lo mejor nos interesa utilizar una gestión monetaria basada en la fórmula de Kelly, y para ello necesitamos los datos históricos. Tampoco.

Y así podría seguir con una larga lista de carencias, como la simplicidad de los gráficos de optimización, la carencia total de análisis estadísticos decentes, etc. Básicamente se puede decir que casi cualquier análisis que uno quiera realizar sobre sus sistemas no se puede hacer con MetaTrader. Por ejemplo, ayer mismo estaba evaluando la posibilidad de modificar mi stop loss en base a un Maximial Excursion Análysis, y como me temía, esto en MetaTrader es poco menos que imposible.

Esperemos que con la plataforma Entropycs podamos dar solución a estas y a muchas otras limitaciones que nos encontramos al desarrollar y evaluar los sistemas automáticos de trading.

miércoles, 9 de enero de 2013

El Lenguaje R para Trading Cuantitativo


La plataforma Entropycs está desarrollada utilizando multitud de tecnologías de software libre (Qt, Nvidia CUDA, SQLite, etc), pero de entre ellas, hay una que destaca, e incluso quizás podríamos decir que forma el corazón de la plataforma: el lenguaje R.

R es un lenguaje de programación específicamente diseñado para análisis estadístico, que es muy popular en la comunidad científica. R proporciona un amplio abanico de herramientas estadísticas (modelos lineales y no lineales, tests estadísticos, análisis de series temporales, algoritmos de clasificación y agrupamiento, etc.) así como potentes gráficos. R se distribuye bajo la licencia libre GPL, y existe una amplia comunidad internacional de desarrolladores que contribuyen a mejorar el lenguaje mediante la addición de todo tipo de módulos. R está disponible para los sistemas operativos Windows, Macintosh, y Linux.

Existe un repositorio oficial con más de 2000 extensiones o paquetes que cubren las más diversas tareas. Los paquetes que forman R se agrupan en Task Views temáticas. En el caso de finanzas nos interesan la task view de econometría y, sobre todo, la de finanzas propiamente dicha. Entre las dos nos proporcionan más de un centenar de paquetes que abarcan todo tipo de análisis financieros.

Desgraciadamente, el usuario que se acerca por primera vez a R puede encontrar un poco intimidatorio la cantidad de paquetes disponibles, y existe el riesgo de que acabe perdiéndose entre tanta información. Por ello, en esta entrada de blog vamos a proporcionar algunos enlaces y puntos de entrada para que sea más fácil familiarizarse con esta poderosa herramienta. Además, también destacaremos algunos de los paquetes que han sido específicamente diseñados, o que son especialmente relevantes, para el desarrollo y evaluación de sistemas automáticos de trading (paquetes que a su vez han sido integrados en la plataroma Entropys).

Algunos recursos para empezar con buen pie en R:
  • Libros: un buen libro de introducción al lenguaje R (en inglés) es “R in a Nutshell” de Joseph Adler. En castellano también existen varios libros, que además son de descarga libre, tales como “R para Principiantes”, “Introducción a R”, “Estadística Básica con R”, y “Gráficos Estadísticos con R".
  • Listas de correo: la principal lista de correo de R es R-Help (en inglés); también existe una lista específicamente para finanzas R-SGI-Finance; en castellano tenemos la lista R-Help-Es, que además es una lista muy activa.
  • Páginas webs: como páginas web, además de la página oficial del proyecto R, se destacan la de Rmetrics centrada en la formación sobre análisis financiero con R, y FOSS Trading un blog con artículos muy interesantes de cómo utilizar R para hacer trading.
Listado de paquetes para el desarrollo y evaluación de sistemas de trading:
  • Xts: paquete para la gestión de series temporales de datos. Dado que los datos de cotización de acciones o de cambios de divisas son datos temporales, este paquete es básico para el análisis de los mismos.
  • TTR: implementación de los principales indicadores técnicos utilizados en los sistemas automáticos de trading, tales como medias móviles, MACD, RSI, ADX, etc.
  • quantmod: Quantitative Financial Modelling & Trading Framework, proporciona herramientas para la descarga de históricos de datos (desde por ejemplo Yahoo! Finance) así como su representación mediante gráficos de barras, líneas o velas japonesas. También permite integrar sobre estos gráficos los indicadores técnicos proporcionados por TTR.
  • PerformanceAnalytics: funciones econométricas para el análisis de rendimientos y riesgos.
  • Ibrokers: paquete que nos permite hacer trading directamente con nuestros sistemas en R, a través del broker IB Brokers.

miércoles, 2 de enero de 2013

Presentación de Entropycs


Con esta entrada, y coincidiendo con el año nuevo, inicio este blog dedicado a los sistemas automáticos de trading, y más concretamente, sobre la herramienta que desde algún tiempo vengo desarrollando para dar soporte a este tipo de sistemas.

Después de haber jugueteado durante algún tiempo con el nombre de Plataforma Aurora, al final la herramienta se llamará Entropycs, donde Entropycs es el nombre corto para Entropy Computational Services, que es la compañía que dará soporte al desarrollo de la herramienta.

¿Qué es Entropycs? Entropycs es una herramienta avanzada para el desarrollo, optimización y evaluación de sistemas automáticos de trading. Es decir, incluye todos aquellos elementos necesarios para poder implementar ideas de trading automático complejas, así como poder realizar un completo análisis estadístico que nos permita tener una cierta confianza de que las estrategias obtendrán un resultado positivo cuando sean llevadas a la operativa real.

¿Por qué una nueva herramienta? Fundamentalmente porque no existe en el mercado ninguna herramienta que permita implementar ideas complejas y hacer un análisis estadístico lo suficientemente completo de las mismas. La mayoría de las herramientas de trading existentes no permiten algo tan simple como hacer un análisis walk-forward, y aquellas que lo permiten, te dan un conjunto de funciones objetivo predefinidas, de las que no te puedes salir, y que son demasiado básicas. Desarrollar un sistema automático de trading bajo estas condiciones es casi como jugar a la lotería. De hecho, la mayoría de los desarrolladores individuales de sistemas es lo que están haciendo, jugar a la lotería (los inversores institucionales se pueden permitir el lujo de tener sus propias herramientas desarrolladas internamente). Además, como bien es sabido, todo trader necesita su “ventaja diferencial” para poder batir al mercado, y hoy día, mediante la combinación de indicadores técnicos clásicos, es muy difícil conseguir dicha ventaja.

¿Qué no es entropycs? Pues, sobre todo, no es una herramienta de “charting”, por lo que no esperéis grandes capacidades en cuanto a la visualización y manejo de gráficos. Tampoco es una herramienta de análisis técnico, por lo que estará bastante limitada en cuanto al herramientas utilizadas por los analistas técnicos, tales como retrocesos de Fibonacci, y demás.

Fundamentalmente, la herramienta Entropycs proporcionará la siguiente funcionalidad:

  • Sistemas: editor para el desarrollo de estrategias de trading, basado en el potente lenguaje estadístico R. Posibilidad de realizar un back-testing sobre barras de cualquier longitud y con un amplio conjunto de indicadores de rendimiento. Optimizar el sistema utilizando las últimas técnicas de optimización (particle swamp, simulated annealing, etc). Soporte completo a los análisis tipo Walk-forward, con soporte a todo tipo de funciones objetivo, y a las optimizaciones avanzadas mencionadas previamente.
  • Gráficos: mostrar los gráficos habituales en estos casos (barras, líneas y velas japonesas), con algunos elementos de análisis técnico básicos (líneas de soporte y resistencias, tendencias, puntos de entrada etc.). Sí que será especialmente relevante la colección de indicadores técnicos que se podrán añadir a estos gráficos (RSI, ADX, MACD, etc.), incluyendo indicadores basados en tecnologías avanzadas (redes neuronales, algoritmos genéticos, etc).
  • Cartera: Gestión de cartera, optimización, simulaciones Monte Carlo, y análisis del riesgo.
  • Datos: posibilidad de importar y exportar datos a un repositorio de alta capacidad y rendimiento, junto con herramientas de edición y de análisis de la calidad de los datos.
  • Trading: hacer trading en tiempo real, junto con el análisis de los resultados (desviaciones sobre lo previsto, control del riesgo, etc).
  • Herramientas: otras herramientas, como el análisis de relaciones y tendencias ocultas mediante minería de datos, o el desarrollo de nuevos sistemas con programación genética.

¿Por qué se distribuye bajo licencia libre? Fundamentalmente por dos razones. La primera es porque se espera que la principal fuente de ingresos de Entropy sea el trading, y no la venta de la propia herramienta o los servicios asociados a la misma. Muchas de las herramientas de trading disponibles comercialmente aducen precisamente este problema, que son empresas que fabrican herramientas de trading, pero que no hacen trading, y eso se nota mucho.

La segunda razón es que al integrar elementos de software libre ya existentes nos permite construir la herramienta en un tiempo mucho más reducido que si hubiese que desarrollar todo desde cero. Además de que se intentará crear una comunidad alrededor de Entropycs, en la que todos contribuyamos con ideas y código, y de la que todos nos podamos beneficiar.

A lo largo de los próximos meses iré liberando el código de la Plataforma Entropy, así como describiendo los elementos internos de que se compone.