17 de Septiembre, 13:04 pm

Finanzas.com

Recordar mis datos | 縊lvidaste tu contrase馻?

zona de trading

Cryptotrading algor韙mico: dise馻ndo un sistema

Carlos Doblado / Isaac de la Pe馻

El 2017 fue el del rally de las criptomonedas. La capitalizaci髇 de mercado de todas las criptomonedas ha pasado de 17,000 millones de d髄ares hasta m醩 de 760,000 millones en solo un a駉. El Bitcoin estaba valorado en 963.74 d髄ares a principios de 2017, pero se dispar y lleg a cotizar cerca de los 20,000 d髄ares para cerrar el a駉 en 13,685. Aunque inicialmente se perfilara como una "reserva estable de valor" similar al oro, m醩 all del alcance de las pol韙icas de los gobiernos, la ausencia de fundamentales y las contrastadas expectativas de los diferentes agentes de mercado han provocado que Bitcoin sea en estos momentos uno de los activos m醩 especulativos del mundo.

Ante esta situaci髇 cabe la pregunta: 縫odemos utilizar los recursos del an醠isis t閏nico y del trading en tendencia para optimizar nuestras inversiones en criptodivisas? El objetivo de este art韈ulo es mostrar, utilizando un entorno tan realista como nos sea factible, como un sistema muy sencillo de trading basado en indicadores de an醠isis t閏nico puede batir a una inversi髇 pasiva en Bitcoin.Todo el c骴igo y otros recursos de este art韈ulo se encuentran disponibles en: https://github.com/isaacdlp/bitcoin

Preparaci髇 del Sistema

Para nuestro backtesting utilizaremos la plataforma backtrader, que es gratuita y de c骴igo abierto, lo que una vez nos sintamos c髆odos con dicho entorno nos va a permitir modificarlo, extenderlo y adaptarlo a nuestras necesidades de testeo. Adem醩, ya que backtrader est escrito en el lenguaje de programaci髇 Python, muy popular entre las comunidades de expertos en el an醠isis contaremos con otras librer韆s para poder realizar ciencia de datos avanzada e incluso a馻dir inteligencia artificial a nuestros sistemas con relativamente poco esfuerzo. Puede conseguir backtrader desde el sitio web https://www.backtrader.com donde tambi閚 podr encontrar plenamente documentados el proceso de instalaci髇 y primeras pruebas.

El siguiente paso ser encontrar informaci髇 de precios, ya que nuestros resultados solamente ser醤 tan buenos como la calidad de los datos que los sustentan. Un dicho popular en este entorno es: garbage in, garbage out. Si le metes basura, sacar醩 basura. Por suerte no hemos de desembolsar grandes sumas de dinero para obtener dichas fuentes. Sin ir m醩 lejos el sitio web de Bitcoincharts ofrece todos las datos hist髍icos de trading de Bitcoin para descarga de forma completamente libre. Basta con acudir al enlace http://api.bitcoincharts.com/v1/csv y seleccionar el archivo correspondiente al mercado que se desee utilizar.

Para esta prueba he decidido centrarme en el popular mercado Kraken por su largo hist髍ico (la andadura de este servicio se remonta al 2014). Vamos a proceder a descargar el archivo krakenUSD.csv, lo cual nos llevar un rato porque ocupa casi 500 MB, no en vano contiene todos los trades individuales de Bitcoin desde el inicio del servicio. Si abrimos el archivo veremos que se trata de una serie de hileras con el siguiente aspecto:

1389118697,874.670400000000,0.010690590000
1389118703,883.326140000000,0.010638230000
1389118711,892.067530000000,0.010586140000

Cada hilera corresponde a un tick o transacci髇 y contiene tres valores separados por comas, que de derecha a izquierda significan 1) la fecha del trade, en formato UNIX expresado en milisegundos (por ejemplo 1389118697 corresponde al 7 de Enero del 2014), al precio expresado en d髄ares estadounidenses (874.670400000000 USD), y finalmente al volumen intercambiado (0.010690590000 Bitcoins o, lo que es lo mismo, 1,069,059 Satoshis).

La parte positiva es que el archivo est ordenado en orden cronol骻ico creciente, es decir, de las transacciones m醩 antiguas a las m醩 recientes seg鷑 descendemos por el documento, que es el orden con el que backtrader puede trabajar. La parte negativa es que backtrader no puede entender fechas en milisegundos, y adem醩 espera un formato de l韓ea con los siguientes campos:

Fecha, Open, High, Low, Close, Volumen, Inter閟 Abierto

Si hay algo que caracteriza a backtrader es su flexibilidad, por lo que con unas pocas l韓eas de programaci髇 podremos adaptar el cargador de datos est醤dar, llamado GenericCSVData, para adaptarse a esta situaci髇 sin necesidad de reescribir los archivos originales. Podr encontrar dicha adaptaci髇 en la clase BitcoinFeed del archivo Resample.py. Sin embargo, hacer un backtest tick a tick puede no ser id髇eo por dos razones, una pr醕tica y la otra te髍ica. La pr醕tica se debe al volumen de la informaci髇 que manejamos, que nos va a enlentecer en exceso el mecanismo de testeo. Los recursos exigidos para procesar los datos van a convertir una rutina de minutos en una espera de horas, y eso va a impactar en nuestra capacidad de experimentaci髇. La te髍ica es que si analizamos en base a ticks estamos suponiendo que una vez encontremos un sistema viable y queramos operar sobre 閘, vamos a disponer de la misma resoluci髇 de datos cuando nos conectemos al mercado a tiempo real, y eso es mucho suponer: lo m醩 com鷑 es que ni dispongamos de dicha granularidad ni seamos capaces de actuar sobre ella para capturar el siguiente tick.

As que ser mucho mejor para nosotros reconvertir la informaci髇 de ticks en un formato tradicional de velas, con precios Open, High, Low, Close que resumen la actividad en un determinado intervalo de tiempo, as como un Volumen agregado. Esta operaci髇 se conoce como resampling (o, para ser exactos, upsampling ya que pasamos de mayor a menor granularidad temporal) y backtrader cuenta con recursos propios para manejar la tarea sin ning鷑 problema, basta con cargar los datos mediante la funci髇 resampledata en lugar de adddata y proporcionar unos pocos par醡etros adicionales acerca de c髆o queremos que se realice el proceso. Por nuestra parte, como vamos a estar iterativamente ejecutando una serie de backtests sobre los mismos datos preferimos guardar previamente los datos resumidos en disco para acelerar significativamente el trabajo; esa es la funci髇 de nuestro archivo Resample.py. Para nuestro art韈ulo hemos elegido una resoluci髇 de 15 minutos - un tiempo razonable para operar, adem醩 del hecho de que muchas fuentes de informaci髇 est醤 retrasadas 15 minutos en su versi髇 de acceso libre - obteniendo pero si lo desea puede modificar la propiedad mins por otro valor en minutos para obtener una granularidad diferente.

El archivo resultante, krakenUSD_15m.csv, adem醩 de ser much韘imo m醩 compacto y manejable (6 MB en lugar de 500), cuenta ya con un formato directamente legible por backtrader - con la salvedad de que deberemos rellenar el Open Interest con valores nulos porque carecemos de dicha informaci髇.

Date,Open,High,Low,Close,Volume
2014-01-07 18:30:00,883.32614,892.06753,874.48165,
874.48165,0.04276811
2014-01-07 19:15:00,866.10944,866.10944,860.0,860.0,0.17440196000000002
2014-01-07 19:30:00,870.0,870.0,830.00001,835.02002,6.227191829999995

Benchmark: Escenario Base

Es importante resaltar que para mantener todos nuestros tests ceteris paribus operaremos siempre una cuenta de apenas 1,000 EUR, entrando o saliendo del mercado pr醕ticamente con todo el capital disponible en cuenta (menos un margen de seguridad del 5%). Para acercar nuestro entorno lo m醩 posible a las condiciones reales del mercado, aplicaremos una comisi髇 del 0.3% tanto a las entradas como a las salidas, y tendremos en cuenta el volumen de la barra actual, suponiendo que, debido a la presencia de otros operadores, s髄o podemos aspirar a un 25% del volumen de cada barra para llenar nuestras 髍denes.

Tambi閚 incluiremos en nuestro sistema un leve apalancamiento de 2. Dicho apalancamiento no es fundamental para que el sistema opere, pero nos permite extraer un plus de rentabilidad en los momentos de subida libre - aunque por otro lado har m醩 peligrosos los momentos de ca韉a libre, ya que el efecto multiplicador del apalancamiento opera tanto para las p閞didas como para las ganancias. Por supuesto, este apalancamiento no implica que nuestro br髃er nos posibilite operar con cuentas apalancadas o comprar con margen, puede ser tan sencillo como pedir prestado otros 10,000 EUR a nuestro t韔 rico con el acuerdo de devolverle dicho capital inicial al final de nuestro periodo de inversi髇.

Finalmente, para evaluar si nuestro sistema es bueno o no, hemos de compararlo siempre con un escenario base o benchmark. Ya que en el fondo queremos evaluar si nuestra acci髇 sobre la criptodivisa produce un resultado positivo, lo m醩 sensato ser compararlo con... no actuar. Es decir, una estrategia pasiva consistente simplemente en comprar y mantener el valor durante el periodo de inversi髇, lo que se conoce como Buy & Hold o, en la jerga del criptomundo, HODL (t閞mino que aparece cuando un usuario borracho publica la errata en un post del Forum de Bitcoin de Diciembre del 2013 - "I AM HODLING" - para tal regodeo del resto de la comunidad que, al parecer, hizo historia). Nuestro escenario base se encuentra en el archivo BitcoinBenchmark.py. Tras ejecutarlo obtendremos los resultados del Gr醘ico 1:
End value 13,587.4801

Sistema en Tendencia

Nuestro sistema en tendencia se encuentra en el archivo BitcoinAlgo.py. Para su creaci髇 vamos a utilizar unos indicadores muy simples de an醠isis t閏nico y bastante conservadores, una serie de cruces de medias m髒iles.

Para entrar en una posici髇 vamos a esperar hasta que se produzca un cruce al alza entre dos medias m髒iles - una lenta, y otra r醦ida - sobre el precio de cierre. A la inversa, saldremos de la posici髇 cuando se produzca un cruce a la baja entre ambas medias m髒iles. En ambos escenarios pediremos tambi閚 que el movimiento en precios se vea acompa馻do igualmente por un aumento de la cantidad bajo trading para confirmar la tendencia - en este caso representado mediante una media m髒il sobre el volumen de mercado.

Tras ejecutar nuestro sistema en tendencia obtendremos los resultados del Gr醘ico 2:燛nd value 227,820.2741
Frente a una rentabilidad del 1,200% con el escenario base, nuestro sencillo sistema nos proporciona una rentabilidad superior al 22,000%. Nada mal para empezar.

Prueba por Periodos

Antes de terminar vamos a realizar otra prueba bastante simple para comprobar si las mejor韆s de nuestro sistema se producen solamente en un entorno de mercado particular o si, en cambio, se mantienen a lo largo de perfiles de mercado marcadamente dispares.
A tal efecto vamos a ejecutar nuestras pruebas para tres periodos distintos:

El mercado esencialmente lateral de inicios del 2014 a inicios del 2017.
El mercado claramente alcista del 2017.
El mercado bajista a partir de inicios del 2018.

Backtrader hace esta tarea muy f醕il al permitirnos delimitar el rango de aplicabilidad de nuestro an醠isis en los par醡etros de carga del feed, mediante las propiedades fromdate y todate:

data = BitcoinFeed(
name="BTC",
dataname="krakenUSD_15m.csv",
timeframe=bt.TimeFrame.Minutes,
fromdate=dt.datetime(2017, 1, 1),
todate=dt.datetime(2018, 1, 1),
nullvalue=0.0)

Si ejecutamos los an醠isis pertinentes obtendremos los siguientes resultados, donde comprobamos que el sistema bate al benchmark en todos los entornos de mercado:

El mercado esencialmente lateral de inicios del 2014 a inicios del 2017.
- Benchmark: 1,195.2990
- Sistema: 5,249.9300
El mercado claramente alcista del 2017.
- Benchmark: 27,428.6104
- Sistema: 34,798.3657
El mercado bajista a partir de inicios del 2018.
- Benchmark: -41.2294
- Sistema: 680.4281

Lea el resto del art韈ulo en la revista TRADERS

Carlos Doblado:燭rader. Arranca su vida profesional en GVC燝aesco en 1995. Hoy es uno de los analistas爐閏nicos m醩 influyentes del panorama espa駉l.燜undador de Bols醙ora en 2002, la primera爃erramienta de asesoramiento t閏nico爌or Internet creada en Espa馻 y de su evoluci髇,犃gora EAFI. Lidera la secci髇 financiera燿el peri骴ico El Confidencial desde septiembre燿e 2014 y fue colaborador del peri骴ico燛l Economista durante ocho a駉s donde爁und la herramienta EcoTrader. Participa con爁recuencia en medios espa駉les como Capital燫adio y Radio Intereconom韆.

Isaac de la Pe馻:牋Ha trabajado como Director de Tecnolog韆 en爈a empresa de business intelligence Microstrategyy燰icepresidente S閚ior de M醨keting爕 Tecnolog韆 para la entidad bancaria Pentagon燜ederal en Washington DC. Cuenta燾on conocimientos amplios de internet,爉ovilidad, an醠isis de datos, motores de recomendaci髇爕 big data. Limited Partner del爁ondo Inveready First con gran experiencia爀n empresas de capital riesgo. Sloan Fellow爂raduado por el Massachusetts Institute of燭echnology (MIT) de Boston con especializaci髇en finanzas.

publicidad
publicidad