Automatizar Sistemas con Interactive Brokers

Tal y como decíamos en nuestro artículo del 6 de Abril, ha llegado el momento de que el pequeño inversor luche con las mismas armas que los leones más poderosos del mercado. Y por fin, tras algunos meses de investigación y con la colaboración de Tinito, Tolo y Alquimista (muchas gracias a los tres por vuestras aportaciones y chequeos) podemos decir que tenemos algo casi definitivo.

Gracias a esa maravillosa plataforma que es la TWS de Interactive Brokers, una pequeña API conocida como TSim+ y un poco de programación en Visual Basic podemos lanzar ordenes automatizadas a los mercados de futuros que deseemos y sin ningún coste adicional. Veamos los pasos necesarios para conseguirlo:

1. ¿Qué necesitaremos?
Para poder lanzar ordenes automáticas necesitamos:

a) Ser clientes de Interactive Brokers y disponer de la última versión de su plataforma (Trader WorkStation o TWS). En dicha plataforma no debemos olvidar tener activados dentro del menu Configure -> API las opciones Enable ActiveX Clients y Enable DDE Clients.

b) Descargarnos e instalar una preciosa API que nos hará mucha falta, el TSim+. Podeis descargarlo de la siguiente página web: http://www.tradingsimulation.com

c) Introducir una serie de códigos en Visual Basic en nuestros sistemas.

2. Comenzamos…
El primer paso es, evidentemente, modificar el código de nuestro sistema en Visual Chart. Para ello, debemos introducir tras las condiciones de compra y venta, modificando nuestro sistema en Visual Basic, lo siguiente:

– En primer lugar, debemos declarar tras la frase Option Explicit lo siguiente:

Option Base 1
Dim FSO, Order

Con la declaración de FSO y Order lo que vamos a hacer es generar un fichero de texto en la carpeta del TSim+, el cual será traducido a ordenes para la TWS mediante dicha API.

– Asimismo, aunque muchos de Vds. posiblemente lo hayan hecho ya en algunos sistemas, es conveniente poneer una variable de tipo booleano, que se llame por ejemplo HeComprado, la cual tomará valor 1 cuando compremos y valor 0 cuando vendamos. Con esto conseguimos que no se generen constantemente ordenes, lo cual va a ser fundamental cuando generemos el fichero con la orden. Para ello nada tan sencillo como poner en la declaración de variables del sistema (o tras el encabezado ‘¡¡ PDV declarations si hemos generado el VBA con la plataforma de desarrollo de Visual) lo siguiente:

Dim HeComprado As Boolean ‘Boolean

– Si hemos seguido todos los pasos correctamente hasta aqui, ahora ya tan sólo falta añadir un par de renglones tras la orden tal que:

If {Condición de Compra = Verdadera} And HeComprado = False Then
.Buy AtClose, 1
HeComprado = True
Set FSO = CreateObject(«Scripting.FilesystemObject»)
Set Order = FSO.createtextfile(«c:Archivos de ProgramaTSimPlusauto.tsm», True)
Order.writeline («xplace,buymkt,estx50,1,,,»)
Order.Close

Else
If {Condición de Venta = Verdadera} And HeComprado = True Then
.Sell AtClose, 1
HeComprado = False
Set FSO = CreateObject(«Scripting.FilesystemObject»)
Set Order = FSO.createtextfile(«c:Archivos de ProgramaTSimPlusauto.tsm», True)
Order.writeline («xplace,sellmkt,estx50,1,,,»)
Order.Close
End If

Veamos un poco más despacio este código: lo que estamos haciendo con él es, en el primer bloque, comprobar si la condición de compra es verdadera y si antes hemos vendido (suponemos el caso de un sistema que se gira y está en mercado todo el rato). En caso de ser ciertas ambas condiciones, genera una compra en Visual Chart, cambia la variable HeComprado a Verdadera (True) y seguidamente crea un fichero de texto llamado ‘auto.tsm’ con la línea que se indica en su anterior. Dicha línea, al ser leida por TSim+ (el cual chequea cada 300 ms dicho archivo y despues lo borrra), genera una orden de compra o de venta a mercado en la TWS para el ticker que le indiquemos. La interpretación es análoga para el segundo bloque de instrucciones en VBA utilizado para vender.

Bien, ahora ya tenemos nuestro sistema modificado y, salvo que hayamos cometido algún error, podremos compilarlo y utilizarlo como siempre. Pasemos a configurar el TSim+: lo primero que podeis comprobar es que inicialmente TSim+ nació como un simulador que extraia datos de la TWS y permitia operar con ella sin lanzar ordenes reales y llevando un control de todas las operaciones.

Para utilizarlo, lo primero que debemos hacer es editar con el Bloc de Notas un archivo de texto llamado ‘contracts.tsm’ y en el que debeís especificar las características de los contratos de futuros sobre los que vamos a operar. En mi caso por ejemplo tengo los siguientes contratos configurados:

ESTX50,FUT,200309,DTB,1,€,10,2
DAX,FUT,200309,DTB,0.5,€,25,2
GBL,FUT,200309,DTB,0.01,€,10,2
ES,FUT,200309,GLOBEX,0.25,$,50,2.4
NQ,FUT,200309,GLOBEX,0.5,$,20,2.4
YM,FUT,200309,ACE,1,$,5,2.4

de donde no es muy difícil deducir que sigue una estructura como la siguiente:

CódigoIB, TipoActivo, FechaVencimiento, Mercado, Tick Minimo, Divisa, Valor por Tick, Comision Aplicada.

Facil no? Una vez configurado podreis ver sin problemas (arrancando primero la TWS y despues el TSim+) los datos de los contratos especificados en dicho fichero en tiempo real.

Ahora ya sólo resta activar el modo de trading real (para ello, debeis ir al menu Mode del TSim+ y marcar las opciones Live y Automatic) y ya está: Visual Chart generará el archivo de texto cada vez que se genere una orden, TSim+ lo leerá y transmitirá la orden a la TWS. Por cierto la linea de comandos para establecer ordenes en el fichero de texto son los siguientes (veamoslo a partir del ejemplo anterior para el Eurostoxx):

CMD,TYPE,SYMBOL,QTY,LIMIT,STOP,TARGET (Por ejemplo, xplace,buymkt,estx50,1,,,)

Como puede verse se trata de una sola línea de texto con 6 comas que obligatoriamente deben aparecer y que indican lo siguiente:

-CMD = indica el comando que mandaremos a la TWS. Admite los siguientes: XPlace = Cerrar los contratos abiertos y abrir una nueva posición (ideal para girarse); Place = Abrir una nueva posición; CloseAll = Cierra todas las posiciones (ideal para cerrar todas las posiciones antes del cierre del mercado)

– TYPE= indica si comprará o venderá. Admite dos posibilidades: BuyMkt (comprar a mercado) o SellMkt (vender a mercado)

– SYMBOL = Codigo de IB que debemos tener tambien incluido en el archivo contracts.tsm.

– QTY = Nº de contratos

– LIMIT = Dejar en blanco si operamos en futuros

– STOP = Nº de ticks por debajo o encima del precio de entrada en el que situamos el stop de perdidas

– TARGET = Nº de ticks por debajo o por encima del precio de entrada en el que situamos nuestro objetivo de beneficios.

Evidentemente estos dos últimos comandos nos evitan tener que programar en Visual Chart los objetivos de beneficios y pérdidas.

Finalmente, para que todo esto funcione, en qué orden debemos arrancar los programas??? Primero, Visual Chart con el sistema insertado en el gráfico; seguidamente debemos chequear, antes del inicio de la sesión que no ha quedado ningún archivo ‘auto.tsm’ huerfano que nos lance la orden nada más abrir la plataforma de IB. Seguidamente abriremos la TWS y finalmente deberemos abrir el TSim+, aceptar la conexión con la TWS y ya está, simplemente debemos dejarlo funcionar por si solo…

3. Algunos cabos pendientes de atar…
Sin embargo, no todo iba a ser de color rosa. Todavia queda mucho que hacer y que depurar, esto es tan solo el comienzo de algo muy grande, una transformación del inversor español en toda regla.

Para empezar debemos luchar contra los siguientes imprevistos:

– Caida de ADSL/Cable: tiene facil solución, forzar con un modem a que se conecte el ordenador en caso de caida de la Red. No es complicado y basta con tener un modem y permitir que cualquier programa que busque la Red marque con el modem en caso de que no funcione el ADSL o el cable. Si no recuerdo mal, Windows 2000 y Windows XP lo hacen bastante bien.

– Se nos va la luz: para resolverlo deberemos comprar un SAI (Servicio de Alimentacion Ininterrumpida). Se trata de una fuente de alimentación continua que acumula energia electrica mientras lo tenemos enchufado entre el ordenador y la corriente. Normalmente suelen dar una 2 horas de autonomia y no debemos olvidar comprarlo con mas de un enchufe para poder enchufar tambien el router o modem ADSL que tengamos.

Pero es que además (esto es muy importante) lo que acabo de contar aqui tiene un pequeño fallo y es que, cada vez que el Workspace de Visual Chart se reinicia (bien porque cerremos y volvamos a abrir el Visual o porque se caiga la Red y el Workspace se reinicie solo), se lanzan todas las ordenes automaticamente que halla en el grafico en bloque lo que satura al TSim+ y lo cuelga (dense cuenta de que ambas aplicaciones trataran de leer y escribir a la vez en el mismo archivo), lo que nos deja sin conexion con la TWS (nos podemos quedar abiertos sin quererlo) y anula el registro de operaciones del TSim+ lo que provoca que el comando XPlace, que cierra la ultima operacion realizada y abre una nueva posición, no funcionará correctamente cuando abramos de nuevo el TSim+ pues no sabrá si estamos comprado o vendidos!!!.

Por ello, ruego a todo aquel que tenga conocimientos avanzados de Visual Basic, trate de hallar una solución a este problema tan tonto en apariencia pero que puede dar más de un disgusto en el mercado. En principio, parece que la solución pasa por forzar a que solo se escriba el fichero de texto después de la hora de arranque del Visual Chart pero que no se tengan en consideración para crear dicho fichero las ordenes anteriores.

Finalmente, otra posibilidad que aun no he probado es la que ofrece otra API que les ruego echen un vistazo porque es sencillamente increible por la cantidad de posibilidades que ofrece: se trata de Ninja Trader (http://www.ninjatrader.com) que aparte de todas las opciones de que dispone, permite automatizar tambien sistemas y ajustar el tiempo de chequeo del fichero de texto que genere Visual Chart (cosa que en TSim+ no es modificable). Seguiremos investigando…. como siempre, pueden enviarme sus opiniones y resultados a [email protected]

Un saludo
X-Trader

COMPARTIR EN: