Seguimos escudriñando los entresijos de la gestión monetaria aplicada al trading sistemático. En esta segunda entrega, me complace presentar un estupendo artículo de nuestro amigo Santi Gil (autor de la web Bolsa1) e incansable investigador de todas las virtudes y trampas que encierra esta compleja -y tremendamente adictiva- modalidad inversora. Vaya por delante agradecimiento por su amabilidad al cedernos este trabajo. Espero que disfruten con su lectura.
Existen cientos de documentos sobre "Gestión de la Posición", "Gestión del Riesgo", "Gestión del Capital" o "Money Management". A pesar de toda la información disponible, no es habitual encontrar traders que contemplen claramente en su plan de trading cómo gestionar la posición, definir las proporciones de capital, cuándo arriesgar y cuánto arriesgar, en definitiva: Cómo ganar más exponiendo menos.
La cuestión es que operar sin este tipo de planificación es incluso más arriesgado que operar echando una moneda al aire, ya que, si asumimos demasiado riesgo, siempre perderemos, y si asumimos demasiado poco, nuestra cuenta no crecerá a un ritmo adecuado. No entraré más en estas cuestiones de definición, ya que disponéis del magnífico artículo anterior a este para informaros sobre el tema.
A la pregunta de "¿Cómo gestiona usted el riesgo de sus posiciones?" pocos responden claramente con unos cálculos precisos. Muchos hablan vagamente del 2% famoso, o simplemente creen que el aumento de las posiciones es algo que tendrán que hacer en el futuro, cuando un sistema ya haya demostrado que funciona.
¡Totalmente INCORRECTO!
La gestión de la posición debe formar parte del proceso de creación del sistema, como eslabón fundamental hacia el éxito del mismo. Una vez se conocen algunas técnicas, sencillas y efectivas, de aplicar esta gestión, nos daremos cuenta de todo el tiempo que hemos perdido buscando un sistema infalible, utópico, y nos centraremos en buscar un sistema con esperanza matemática positiva y DrawDown razonable.
Antes de empezar a aplicar las técnicas de Money Management, vamos a aclarar unos puntos (los que ya conozcáis algo del tema, podéis saltaros esta parte):
- El MM te dice cómo gestionar el riesgo asociado a tu sistema de forma que se optimicen los beneficios. No te dice dónde entrar a mercado ni cuándo, pero sí te puede ayudar a minimizar un riesgo y, en consecuencia, dónde variar un Stop o recoger beneficios (aunque algunos autores no consideren a estas prácticas muy "ortodoxas", demostraremos que tienen validez con varios ejemplos).
- El MM se aplica sobre un sistema con esperanza matemática positiva, es decir, (Avg.Profit) * (%aciertos) > (Avg.Loss) * (%fallos). Trabajaremos sobre este sistema sin tocar su funcionamiento interno, simplemente alteraremos el número de contratos/objetivo en mercado según sus resultados. Es aconsejable tener, además un drawdown razonable para que los resultados sean viables.
- El ejemplo que vamos a ver está realizado sobre un mercado de futuros con un sistema automático, pero la técnica es válida y necesaria en cualquier tipo de mercado y para cualquier estilo de trading.
Existen diversas técnicas de MM, pero en este artículo explicaré cómo aplico yo mis favoritas. Intentaremos mejorar sensiblemente este sistema sencillo combinando dos técnicas de MM, una interna, de recuperación de posición (estilo "martingala"), y una externa, de gestión del tamaño del paquete (anti-martingala), el "Fixed Ratio".
Partimos de un sistema sencillo, cuyo código os muestro a continuación:
protected override void Initialize()
{
IncludeCommission=true;
ExitOnClose=true;
SetProfitTarget(objetivo*contratos);
SetStopLoss(perdida*contratos);
CalculateOnBarClose = false;
}
protected override void OnBarUpdate()
{
if (Close[0]>Close[1] && High[1]-Low[1]>High[0]-Low[0])
EnterLongLimit (contratos, Low[1],"");
else if (Close[0]<Close[1] && High[1]-Low[1]>High[0]-Low[0])
EnterShortLimit (contratos, High[1],"");
}
Es muy sencillo: Tenemos un objetivo fijo, una pérdida fija y un número de contratos inicial (que dejaremos en 1 para las pruebas). El sistema entra en mercado cuando el tamaño de la última vela es menor que el de la anterior, largo cuando la última vela es alcista, y corto... viceversa.
Probamos el sistema sobre un gráfico de 30 minutos del mini-Dow desde el 1-1-04 al 1-1-08, con unos parámetros fijos que hemos determinado casi "a ojo", pero que nos servirán para ver los efectos de las técnicas de mejora sobre el sistema.
La verdad es que los resultados arrojados son un poco patéticos, pero nos servirán como ejemplo:
Martingala, sí pero... ¿hasta cuando?
La (tantas veces criticada) martingala la utilizaremos para recuperar pérdidas. No una martingala estricta (geométrica, de duplicación), sino una derivada (aritmética), que intente recuperar, al menos parte de una operación perdedora. Cuando tengamos una operación negativa, añadiremos un contrato y cambiaremos el objetivo para ajustarlo a recuperar esta pérdida. Utilizaremos esta técnica con un límite, y para acotar ese límite determinaremos primero el número posible de operaciones perdedoras consecutivas. Esto es fácil, viendo el backtest.
Sabemos que, al menos en una ocasión, 6 operaciones consecutivas fueron negativas. ¿Quiere esto decir que debemos aplicar hasta 6 niveles de Martingala? Por supuesto que no... pero sí quiere decir que el máximo nivel es el sexto. Ahora debemos hacer la prueba pertinente para determinar cual es el nivel óptimo de "Martingala de la posición".
Cambiamos el código del sistema para ajustarlo a nuestros propósitos:
protected override void Initialize()
{
IncludeCommission=true;
ExitOnClose=true;
contratosvar=contratos;
CalculateOnBarClose = false;
}
protected override void OnBarUpdate()
{
//--------------------- PROFIT LOSS --------------------------
SetProfitTarget(objetivovar*contratos);
SetStopLoss(perdida*contratosvar, false);
//------------------- ENTRADA -------------------------------------------
if (Close[0]>Close[1] && High[1]-Low[1]>High[0]-Low[0])
EnterLongLimit (contratosvar, Low[1],"");
else if (Close[0]<Close[1] && High[1]-Low[1]>High[0]-Low[0])
EnterShortLimit (contratosvar, High[1],"");
}
//------------------- GESTION DE CONTRATOS -----------------------
protected override void OnPositionUpdate(IPosition position)
{
if (position.MarketPosition == MarketPosition.Flat)
if (Performance.AllTrades[Performance.AllTrades.Count - 1].ProfitCurrency<(-1)*comision*contratosvar)
{
if (contratosvar<contratos*2) contratosvar=contratosvar+contratos;
objetivovar=(Performance.AllTrades[Performance.AllTrades.Count - 1].ProfitCurrency*(-1));
}
else
{
if (contratosvar>contratos) contratosvar=contratosvar-contratos;
else contratosvar=contratos;
objetivovar=objetivo;
}
}
En este caso, estaremos aplicando el sistema con 2 niveles de Martingala. Cambiando el 2 resaltado por 3,4,5 y 6 vemos los resultados:
Vemos cómo mejoran los resultados comparados con nuestro sistema inicial, sin embargo a partir del tercer nivel la Martingala no nos aporta nada. Nos quedaremos, pues, con 3 niveles. Esto significa que en nuestro capital inicial debemos tener en cuenta que en momentos puntuales nuestro sistema funcionará con 3 contratos, con lo que esto conlleva a nivel de márgenes para el broker.
Otro detalle a tener en cuenta es que el drawdown se mantiene con respecto a nuestro sistema inicial. Esto es debido a que tenemos un objetivo de beneficios que hemos podido variar sin añadir proporcionalmente un riesgo significativo a la operación.
Esta técnica que estamos utilizando no funcionaría en sistemas continuos o sin un objetivo que podamos "ponderar", variando el riesgo asumido en la operación. El mero aumento de contratos aumentaría proporcionalmente el beneficio, pero también el DrawDown. Veámoslo con otro ejemplo.
En este caso tenemos un sistema continuo, por cruce de medias, con salida por TrailStop, por lo que no tenemos el poder de concretar el objetivo:
if (CrossAbove(EMA(Periodomedia1), EMA(Periodomedia2), 1))
{
EnterLong(contratosvar, "");
}
if (CrossBelow(EMA(Periodomedia1), EMA(Periodomedia2), 1))
{
EnterShort(contratosvar, "");
}
Volvemos a ejecutar un backtest con parámetros razonables, aunque no optimizados:
Los resultados sin aplicar Martingala son estos:
Resultados discretos, por ser benevolente. ¿Qué pasaría si aplicamos ahora la Martingala (de forma que también se aumenta el margen del TrailStop, por supuesto)?
No podemos controlar el riesgo, y el DrawDown aumenta sin remedio:
Por ello concluyo esta parte de "gestión interna" con que, para aplicar esta técnica, se debe tener un objetivo inicial. Este objetivo inicial podrá ser variado en la optimización Walk-Forward para adaptarse a los cambios del mercado sin afectar a nuestra estrategia interna de Martingala.
Volvemos a nuestro primer sistema, que nos había dejado los siguientes resultados:
Dentro de las diversas técnicas de MM, el Fixed Ratio se encuentra en el grupo de las "Anti-Martingale" ("antimartingalas" de toda la vida). A diferencia de las "martingalas", las anti-martingalas premian el buen comportamiento con aumento de posiciones, y castiga las bajadas de capital con reducciones. Ésta técnica la utilizaremos para aumentar exponencialmente nuestros beneficios, intentando salvar nuestro capital lejos del temido DrawDown.
Antes de seguir, quiero aclarar un punto: El Fixed-Ratio lo aplicaré como MM totalmente externo al funcionamiento del sistema, y nos basaremos exclusivamente en el capital disponible para aumentar posiciones. Si la aplicación de la Martingala nos arrojó un resultado de nivel 3 (3 contratos como máximo), cuando el Fixed Ratio nos indique el aumento de una posición, deberemos considerar que el número máximo de contratos es 6 (3 de la martingala X 2 del Fixed Ratio), y los siguientes niveles 9,12, 15, etc...
Para aplicar el Fixed Ratio utilizaremos el MSA. Una vez importadas las operaciones, nos queda el siguiente gráfico:
Pulsando "F3" nos vamos a la parte divertida del asunto... el "Position Sizing". Elegimos Fixed Ratio y aquí hay multitud de opciones. Mi opción personal es, quizá, excesivamente conservadora para algunos... pero esto es lo bueno del Fixed Ratio: Puedes ajustar el riesgo que estás dispuesto a correr y evaluar si merece la pena, si aguantarás, si tienes capital inicial suficiente para ejecutarlo, etc...
Una configuración que me parece razonable es la siguiente (pulsar "F7"):
Limitamos el DD máximo soportable (al menos en la teoría) al 25% de nuestro capital. El Delta arrojado en este caso es $10.000, por lo que el sistema aumentará un paquete de contratos cada vez que alcancemos esta cantidad, siguiendo la progresión característica del Fixed Ratio que ya conocéis del anterior artículo.
El resultado:
Partiendo de un sistema totalmente mediocre y sin optimizar, aplicándole dos sencillos pasos de control de riesgos y gestión de la posición, hemos conseguido los siguientes resultados:
Nuestro beneficio ha aumentado un 400% y el DrawDown prácticamente se ha mantenido. Obviamente es un sistema infinitamente mejorable y no es válido para operar, pero lo importante era analizar los efectos de las dos técnicas de gestión de la posición aplicadas.
Utilizando el MSA podemos añadir operaciones basándonos en las estadísticas que ya tenemos (Ctrl+Alt+T), y observar mejor la progresión del Fixed Ratio. Si añadimos 2000 operaciones más tendremos los resultados teóricos para un intervalo temporal de unos 8 años de sistema, y los resultados se disparan, aún llegando sólo a cuatro "paquetes" de contratos:
Los métodos de gestión de riesgos y control del capital son muy útiles, pero lo más importante es que son también necesarios. La ayuda que nos proporcionan hacia el éxito de un sistema es fundamental, y espero que este artículo os ayude a convenceros de la necesidad de aplicar alguna de estas técnicas sobre vuestros sistemas.
Mi postura es incluir las técnicas de position sizing desde un comienzo, en la fase de pruebas, porque las considero parte del sistema. Además, dadas las características de la Martingala, que sí afecta al funcionamiento interno del sistema en cuanto a la colocación de objetivos, es necesaria. El Fixed Ratio podría entender que se pudiese separar, por su condición exógena al sistema en cuanto a la mecánica del mismo, aunque siempre debe ser previamente calculado para conocer, al menos teóricamente, nuestro punto de "no retorno" y los riesgos asumidos en cada aumento de contratos.
Esta necesidad de incluir las técnicas de MM dentro del proceso de creación de un sistema, es otro punto que justifica que nuestro método de MM debe ser llevado a la práctica real en fase de pruebas (al menos 5-6 meses), ya que ninguna optimización Walk-Forward ni análisis de Montecarlo nos dirá si el perro tiene la rabia, hasta que le acerquemos la mano realmente, y el potencial real de un sistema debe incluir la ayuda de estas técnicas en sus resultados, ya que forman parte del mismo.
"Toda vez que sabemos que la gestión monetaria es simplemente un juego de números, y que lo único que necesitamos es un sistema con esperanza positiva, el inversor puede parar en su búsqueda del Santo Grial"
Ryan Jones
© Santi Gil (Bolsa1), 2008