jueves, 14 de marzo de 2013

Integración de MetaTrader y R


Ya hemos hablado en entradas anteriores de las limitaciones que plataformas como MetaTrader presentan a la hora de hacer un análisis cuantitativo de las estrategias de trading, y de cómo con R se podrían cubrir esas limitaciones. En esta ocasión vamos a ver cómo se podría integrar MetaTrader y R para que cada uno haga aquella función que mejor sabe hacer, es decir, con MetaTrader desarrollamos una estrategia y la probamos con datos históricos, y con R analizamos los resultados, optimizamos la estrategia, y realizamos un análisis walk-forward.

Existen varias alternativas para integrar MetaTrader y R. A continuación revisamos brevemente algunas:

MT4 API nos permite acceder a la mayoría de las funciones de MetaTrader (tales como abrir o cerrar órdenes, calcular indicadores técnicos, recuperar el estado de una cuenta, etc) desde un programa en C externo, que a su vez, podría ser llamado desde R. Esta solución es la que mejor nos permitiría integrar MetaTrader con R. Desde R controlaríamos casi todo el proceso, desde definición de la estrategia, testing, optimización, análisis, trading real, etc., y MetaTrader lo utilizaríamos básicamente para abrir y cerrar órdenes (control de stop loss y demás), y llevar el control de la cuenta. El mayor inconveniente es que se trata de una solución cerrada y de pago ($450).

Con R for MetaTrader le daríamos la vuelta al calcetín, es decir, desde MetaTrader podríamos invocar funciones escritas en R. En este caso, el control lo llevaría MetaTrader, lo cual tiene sus limitaciones, ya que el análisis y la optimización de estrategias seguiría siendo la de MetaTrader, y carecemos de walk forward. Esta solución es interesante si queremos desarrollar estrategias de trading avanzadas, por ejemplo, podríamos desarrollar una estrategia basada en Self Organized Maps utilizando R, que se invocaría desde MetaTrader. Además, este producto es libre y gratuito.

La última solución sería procesar los ficheros HTML de resultados generados por MetaTrader e importar los datos en R. Esta es la solución más sencilla, ya que no requiere software adicional, aunque requeriría de algo de programación para hacer una automatización completa del proceso de análisis de una estrategia. Dada su sencillez, en el resto de esta entrada de blog vamos a ver un ejemplo de cómo podemos importar los resultados de MetaTrader en R. Nótese que cuando hablo de resultados me refiero a todo tipo de resultados que se puedan grabar como ficheros tipo HTML, desde el testing de una estrategia, los resultados de una optimización, o los resultados de la operativa real.

Lo primero que tendríamos que hacer es importar (e instalar si no lo hemos hecho ya) el paquete XML de R. Este paquete contiene multitud de utilidades para crear y trabajar con ficheros XML, y sus derivados, como HTML.

library('XML')

A continuación vamos a importar los datos correspondientes a un informe de testing (Strategy Tester Report) generado por MetaTrader sobre una estrategia concreta. Lo que vamos a importar es el listado de entradas que se han producido en el mercado, y la información relativa a las mismas (tipo, número de orden, volumen, precio, S/L, T/P, beneficios y balance). Para ello escribimos la orden:

mitabla = readHTMLTable("C:/Users/Rafael/src/R/CDMM.htm", header=T, colClasses=c("integer", "character", "character", "integer", "numeric", "numeric", "numeric", "numeric", "numeric"), which=2)

El primer argumento es el nombre del fichero HTML generado por metatrader. En el segundo le indicamos que la tabla que contiene los datos dispone de una cabecera, que a su vez será utilizada por R. El tercer parámetro es una lista de tipos de datos, que ayudará a R a interpretar correctamente los valores que va a leer. Y por último, con el parámetro “which” le indicamos a R que lo que queremos importar es la segunda tabla del fichero (la primera corresponde a la tabla resumen).

En este momento tenemos en R una variable llamada “mitabla” a la que le podemos aplicar toda la potencia de análisis de R. Por ejemplo podríamos empezar por

summary(table$Beneficios)

y ya tendríamos más información sobre nuestra estrategia que la que nos proporciona MetaTrader.

1 comentario:

  1. Posiblemente porque ya lo tienes instalado se te olvidó comentar que el paquete de XML no viene preinstalado. Antes de importarlo hacemos:

    install.packages("XML")

    Y listo.

    Estupéndo artículo.
    Un saludo.

    ResponderEliminar