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.
Posiblemente porque ya lo tienes instalado se te olvidó comentar que el paquete de XML no viene preinstalado. Antes de importarlo hacemos:
ResponderEliminarinstall.packages("XML")
Y listo.
Estupéndo artículo.
Un saludo.