miércoles, 26 de marzo de 2014

¿El movimiento de EUR/USD es simplemente ruido?

En esta entrada vamos a estudiar si la variación de precios del par EUR/USD presenta algún tipo de patrón que pueda ser predecido, o se asemeja más a un ruido blanco. Supongamos que tenemos el par EUR/USD en barras de 1 hora, precio de apertura, y para el año 2013, como muestra la siguiente figura:


Y calculamos la serie temporal de la variación entre los precios:


¿Se puede sacar algo en claro, o se trata de simplemente ruido? Vamos a verlo. Calculamos si la serie de diferencias está autocorrelada para distintos desplazamientos, y vemos el correspondiente correlograma:

Y nos da la típica distribución correspondiente al ruido blanco, donde no existe autocorrelación.



lunes, 24 de marzo de 2014

La hora como factor predictivo en Forex

En una entrada anterior de este blog estudiamos si el par EUR/USD presentaba algún tipo de ciclo o estacionalid en los valores más comunes, tales como el mes del año, día del mes, día de la semana, u hora del día; pero vimos que en ninguna de estos marcos temporales parecía presentar un ciclo claro que nos pudiese ayudar en nuestro sistema de trading.

Sin embargo, esto colisiona con lo que muchos autores de robots de Forex nos dicen, a saber, que la hora en la que se hace trading tiene un gran valor predictivo. Desde un punto de vista económico, esto podría tener sentido, ya que supuestamente no es lo mismo hacer treding sólo cuando las bolas asiáticas están abiertas, que cuando están abiertas las plazas de Londres y Nueva York.

Veamos lo que nos dicen los datos. Vamos a estudiar cuatro años diferentes para cuatro pares distintos.

El primer caso es el ya visto EUR/USD, pero para cuatro periodos de tiempo (años) distintos:


No parece que existan diferencias apreciables entre el comportamiento del par entre las distintas horas. Veamos ahora el caso del GBP/USD:


El resultado es muy parecido, la hora no tiene capacidad predictiva. Veamos ahora el USD/CHF:

 
Exactamente lo mismo. Y por último, el caso del USD/JPY: 

En definitiva, la hora no tiene ningun valor predictivo sobre el valor del cambio. Y la pregunta es, ¿y por qué ciertos autores lo recomiendad? Pues por el problema de siempre: una variable más introducida en el sistema reduce el sesgo del mismo, por lo que un único backtest mejora sensiblemente, pero también incrementa la varianza, por lo que de media, el sistema es peor predictor.

viernes, 21 de marzo de 2014

Búsqueda de Ciclos en EUR/USD

Cuando se trabaja con series temporales, el primer análisis que siempre se hace es la búsqueda de tendencias y estacionalidad en los datos. Una vez identificadas estas tendencias se pueden crear modelos sencillos que nos permiten hacer predicciones sobre la evolución futura de la serie. El problema es que en las series temporales estocásticas, muy habituales en finanzas, no existen tendencias y estacionalidad bien definidos, y por tanto, se requieren de modelos más complejos para explicar el comportamiento de la serie. Por ejemplo, con el siguiente código R podemos comprobarlo en el par Euro - Dólar:

EURUSD <- read.csv('http://www.quandl.com/api/v1/datasets/QUANDL/EURUSD.csv?&trim_start=2004-01-01&trim_end=2013-12-31&collapse=monthly&sort_order=asc', colClasses=c('Date'='Date'))
Euro <- ts(EURUSD$Rate,  start = c(2004, 1), freq = 12)
layout(1:3)
plot(Euro)                  # Original data
plot(aggregate(Euro))       # Check for a trend in data
boxplot(Euro ~ cycle(Euro)) # Check for a seasonality

Que nos genera la siguiente figura:

Como podemos observar no existe una tendencia clara. A veces el par está alcista, y a veces bajista, y el cambio de tendencia parece aleatorio.

La estacionalidad de una serie temporal está referida a un año completo, pero, ¿existirían cliclos temporarles de menor tamaño? Por ejemplo, ciclos mensuales, semanales o diarios. A continuación vamos a verlo para el mismo par.

El ciclo mensual de EUR/USD para los años 2012 y 2013 es el siguiente:


Aunque existe variabilidad entre unos días y otros, no se observa ningún tipo de ciclo, y sobre todo, los boxplot no indican que podamos distinguir estadísticamente entre unos días y otros.

El ciclo semanal de siete días tiene la siguiente forma:

En este caso el resultado es aun más desesperanzador, porque todos los días de la semana tienen un corportamiento muy parecido.

Y por último, el ciclo diario de 24 horas es el siguiente:

Que al igual que el ciclo semanal, ocurre que, a priori, no son distinguibles las distintas horas de trading.

sábado, 17 de agosto de 2013

La Máquina Mágica

Cuando empecé a trabajar con los sistemas automáticos de trading, una de las primeras tareas que me autoasigné fue el desarrollar una metodología de trabajo que me permitiese determinar, de forma cuantitativa y dentro de un cierto intervalo de confianza, si un determinado sistema tiene esperanza matemática positiva, además de identificar cual es la estrategia de gestión del riesgo que mejor se le ajusta, y el tamaño óptimo de las posiciones a abrir. Una vez desarrollada la metodología, me llevé la desagradable sorpresa de que no existía en el marcado ninguna herramienta lo suficientementemente potente como para poder poner en marcha mi nueva metodología.

A partí de ahí, y gracias a mi formación como ingeniero informático, me puse a desarrollar mi propia herramienta de análisis de sistemas de trading. Con el tiempo, la herramienta llegó a un nivel de madurez que me hizo plantearme la posibilidad de venderla como un producto comercial. Como emprendedor sabía que sólo tienen éxito aquellos productos que los clientes necesitan, quieren, y están dispuestos a pagar por ellos. Pero ¿cómo no iban a querer los traders una herramienta que dado un sistema te dice si es o no rentabe, y además te ayuda a maxizar el retorno mientras minimiza el riesgo? Pues no, eso no es lo que quieren los traders. Al menos no es lo que quieren los traders individuales, que es el mercado al que me dirigía.

Efectivamente, la gente lo que quiere es una "Máquina Mágica". Es decir, una maquinita que pulses un botón y automáticamente salga dinero, sin que sea necesario dedicarle tiempo ni esfuerzo. Eso es lo que me estaban demandando. Y cuando le explicaba que dicha máquina no existe, los potenciales clientes no lo entendían, o mejor dicho, no lo querían entender. Algunos incluso se enfadaban, y me decían que el problema era que no quería compartir mis secretos (pero oiga, ha visto usted que tenga un Mercedes aparcado en la puerta de mi casa).

Así que no tuve más remedio que cancelar la versión comercial de Entropycs. Desgraciadamente ser empresario es incompatible con ser trader, ya que ambas son profesiones a tiempo completo, y hay que optar por una u otra. En cualquier caso, sigo mejorando la plataforma para mi uso interno, y seguiré dando cuenta de mis avances en este blog.

martes, 30 de julio de 2013

Indicador Técnico: RSI

El Índice de Fuerza Relativa, o RSI (del inglés Relative Strength Index), es un oscilador diseñado para medir la velocidad con la que varían los precios. El indicador RSI oscila entre los valores 0 y 100 y se calcula de la siguiente manera:

                       100
        RSI = 100 - --------
                     1 + RS

        RS = AG / AL

Donde AG es la ganancia media (del inglés Average Gain), es decir, la media aritmética de las últimas N barras con resultados positivos (y donde N es el periodo de cálculo del indicador), y AL es la pérdida media (del inglés Average Loss), o la media artimética de las pérdidas de las últimas N barras.

Por ejemplo, un RSI calculado sobre 14 barras podría ser el siguiente:


Tradicionalmente se dice que tenemos un mercado en sobrecompra cuando el RSI es superior a 70, y un mercado en sobreventa cuando es inferior a 30. Por tanto, un sencillo sistema de trading podría ser abrir en corto cuando tenemos un mercado en sobrecompra, y abrir en largo cuando está en sobreventa.

En el paquete TTR de R el indicador RSI se calcularía de la siguiente forma:

RSI(price, n = 14, maType)

donde maType es el tipo de media móvil que queremos utilizar para el cálculo del RSI (simple, exponencial, ...). Por ejemplo, el RSI(14) se calcularía como: 
 
data(ttrc)
price <- ttrc[,"Close"]
rsi <- RSI(price, n=14)

Como resultado la variable macd contendría algo similar a:


67.21311 68.33130 68.90238 71.65472 74.12134 74.12134 75.12550 70.69429 ...


martes, 23 de julio de 2013

Bolsa, timos y estadística

Cuando estudiaba matemáticas, en la asignatura de probabilidad y estadística de primero solían poner como ejemplo un sencillo timo en bolsa. El engaño era el siguiente: seleccionamos un gran número de inversores en bolsa (por ejemplo 1024), a continuación a la mitad le enviamos el Lunes una carta donde le decimos que durante la semana la bolsa subirá, y a la otra mitad otra carta donde le decimos que la bolsa bajará; a la semana siguiente, a los 512 inversores para los que hemos acertado les enviamos otra carta, nuevamente a la mitad le decimos que la bolsa subirá y a la otra mitad que bajará; a la semana siguiente, volvemos a hacer lo mismo con los 256 inversores para los que ya hemos acertado dos veces en nuestro pronóstico; al cabo de varias semanas nos quedarán unos 16 inversores para los que siempre hemos acertado; llegados a este punto le enviamos una última carta donde nos presentamos, les decimos cualquier parrafada de lo buenos que son nuestros métidos de predicción, y les ponemos como ejemplo las 6 semanas consecutivas que hemos acertado, y les decimos que si quieren la previsión para la siguiente semana nos tienen que pagar mil euros. Evidentemente, es difícil que alguien caiga en el timo, pero si lo organizamos a gran escala, empezando con 65.536 inversores y parando con 1024, a poco que pique uno de cada diez, tenemos un negocio redondo.

Este timo, que parece tan obvio, es utilizado habitualmente, por ejemplo, por los bancos: si preguntamos en un banco por un fondo de inversión rentable, seguro que nos muestran cuatro o cinco que nunca han perdido dinero; el cómo lo hacen es muy simple, se trata de abrir muchos fondos e ir cerrando aquellos que entren en pérdidas, de tal manera que los que queden tienen una rentabilidad continuada. También es un método utilizado por los gurús de la bolsa, en este caso el método consiste en hacer muchas predicciones cada día, y al día siguiente sólo recordad aquellas en las que han acertado.

Pero también se utiliza, y esto no es tan evidente, para el caso de los robots, o expert advisors, de trading automático. Ya que existen miles de robots funcionando, por pura estadística, algunos de ellos debe necesariamente ser rentables. Los vendedores nos muestran la rentabilidad pasada de dichos robots, y nos repiten una y otra vez que no se trata de "backtesting" o de rentabilidades en cuentas demo, sino de rentabilidades en real, como garantía de la eficacia del robot. Pero al igual que pasaba con nuestro timador de las cartas, lo normal es que estos robots, tarde o temprano, acaben abandonando la lista de robots con rentabilidades sostenidas en el tiempo, momento en el cual serán sustituidos por otros.

El que un robot haya tendio una rentabilidad sostenible en el pasado no quiere decir absolutamente nada, y por tanto, no debemos jugarnos nuestro dinero con ellos. Si queréis comprar un robot, seleccionar hoy un grupo de robots prometedores, seguir sus rentabilidades durante un tiempo prudencial, por ejemplo un año (el tiempo requerido depende de la frecuencia de las inversiones), y después decidir la compra.

lunes, 1 de julio de 2013

Indicador Técnico: MACD

El indicador técnico MACD, o Media Móvil Convergente/Divergente (del inglés Moving Average Convergence / Divergence)  es un oscilador que se basa en la diferencia de dos medias móviles, una media móvil lenta, y una media móvil rápida. El MACD se desglosa en tres componentes:
  • Línea MACD: media móvil rápida - media móvil lenta
  • Línea de Señal: media móvil aplicada sobre la Línea MACD
  • Histograma MACD: Línea MACD - Línea de Señal
Por ejemplo, el MACD con una media móvil lenta de 26, una media móvil rápida de 12, y una media móvil de señal de 9 tendría el siguiente aspecto:


El indicador MACD combina lo mejor de dos mundos: los indicadores de tendencia y los osciladores. Sin embargo, dado que el indicador no se encuentra acotado dentro de un rango predefinido, es difícil utilizarlo para detectar niveles de sobrecompra o sobreventa.

Un sistema sencillo basado en el indicador MACD podría ser el siguiente: cuando la Línea MACD cruza al alza a la Línea de Señal abrimos en largo, y cuando la Línea MACD cruza a la baja a la Línea de señal abrimos en corto.

En el paquete TTR de R el indicador MACD se calcularía de la siguiente forma:

MACD(x, nFast = 12, nSlow = 26, nSig = 9, maType)

donde maType es el tipo de media móvil que queremos utilizar para el cálculo del MACD (simple, exponencial, ...). Por ejemplo, el MACD(12, 26, 9) se calcularía como:

data(ttrc)
macd <- MACD( ttrc[,"Close"], 12, 26, 9, maType="EMA" )

Como resultado la variable macd contendría algo similar a:


           macd    signal
 [1,] 1.6680643 2.1294258
 [2,] 1.6230876 2.0281582
 [3,] 1.6606279 1.9546521
 [4,] 1.5104438 1.8658105
 [5,] 1.3984768 1.7723437