Stops Flexibles ante el Ruido

Mike Bryant es un monstruo en esto del trading: aparte de operar por cuenta propia, también es el dueño de Adaptrade Software (empresa creadora del mítico Market System Analyzer) y de Breakout Futures, una compañía de reventa de sistemas. En la web de esta última, existe una newsletter gratuita a la que les recomiendo que se suscriban por los excelentes artículos que suele traer. En uno de ellos, Mike presenta un método para determinar dinámicamente la distancia a la que debemos situar el stop de pérdidas y que no salte a causa del ruido de mercado. El método, como veremos, presenta ventajas ya que depende de un sólo parámetro que no requiere optimización y se adapta al comportamiento del precio.

La mayor parte de los traders utiliza un stop de pérdidas. Sin embargo, la mayor complicación de los stops no está en si hay que usarlo o no (creo que en eso todos nuestros lectores estarán de acuerdo en que sí hay que usarlo), sino en la distancia a la que debemos situarlos con respecto a nuestro punto de entrada, ya que dependiendo de donde lo situemos podemos tener una buena o una mala operación. Así, si el stop está demasiado cerca del precio de entrada, saltará rápidamente como consecuencia del ruido del mercado antes de que la tendencia tenga tiempo de desarrollarse; por el contrario, si situamos el stop demasiado lejos, la pérdida será más grande de lo necesario en caso de que el stop fuera alcanzado.

Para situar el stop se utiliza generalmente alguno de los siguientes métodos:

  • Establecer una pérdida monetaria fija (por ejemplo, en cada operación pierdo 100€).
  • Fijar el stop en torno a un soporte o resistencia (por ejemplo, un stop de compra por encima del mayor máximo de las últimas x barras si estamos cortos)
  • Un múltiplo del ATR (por ejemplo, restar 3 veces el ATR al precio de entrada si estamos largos)

Si bien todos estos métodos son válidos, también presentan algunos problemas. Así, situar el stop en una zona de soporte o resistencia es arriesgado ya que son zonas donde otros traders también estarán posicionados por lo que en caso de alcanzarse se producirá suficiente actividad como para tocar nuestro stop. Por su parte, establecer una pérdida monetaria fija implica no adaptarse a la volatilidad del mercado por lo que en unas ocasiones este tipo de stop será demasiado amplio y otras veces, si la volatilidad se dispara, puede ser demasiado ajustado. Finalmente, utilizar un múltiplo del ATR nos permite adaptarnos a la volatilidad pero entonces tendremos el problema de tener que ajustar el multiplicador, lo que implica tener que recurrir a la optimización de ese parámetro.

Veamos una forma alternativa de fijar los stops: si alguna vez han estudiado series temporales, recordarán que una serie siempre se puede descomponer en tendencia (lo que intentamos capturar con nuestra operación) y un componente aleatorio o ruido, es decir, el zig zag del gráfico a lo largo de la tendencia.

Obsérvese que la definición de ruido depende de la tendencia en la que estemos interesados. Por ejemplo, si trabajamos con barras de 1 minuto y nuestras operaciones ganadoras suelen durar de media 15 minutos, entonces la tendencia se define como lo que sucede durante 15 minutos, mientras que el ruido serán las desviaciones con respecta a esa tendencia formada en 15 minutos. Lógicamente el ruido será mayor en magnitud cuanto mayor sea el marco temporal considerado.

Pues bien, podemos tratar de aprovechar el ruido del mercado en nuestro beneficio. Para determinar el nivel de ruido del mercado, podemos eliminar la tendencia de la serie de precios y calcular la desviación de esta nueva serie de precios sin tendencia. Para ello existen diversos métodos, siendo lo más habitual restar una media móvil al precio o tomar diferencias entre cierres.

En la siguiente figura se muestra un gráfico de cotizaciones y su línea de tendencia:

 

Dicha línea de tendencia se ha obtenido uniendo los cierres de la primera y de la última barra.

Utilizando dicha línea de tendencia podemos eliminar la tendencia existente en el gráfico, restándola de los precios. Matemáticamente:

Precio sin Tendencia(j) = Precio(j) – [ (C[N] – C)/N * j + C]

Donde Precio(j) es cualquier valor de la barra (apertura, máximo, mínimo, cierre) de hace j barras, C[N] es el cierre N barras atrás y C es el cierre actual. 

Aplicando esta ecuación al gráfico de la figura anterior, obtenemos la serie sin tendencia que se muestra a continuación:

 

Los precios ahora oscilan en torno a cero por lo que ahora podemos ver claramente el concepto de ruido: se trata simplemente de la desviación del precio sin tendencia con respecto a cero. Ahora ya tenemos el dato para fijar nuestro stop de pérdidas: si estamos comprados, bastará con restar al precio de entrada la media de los máximos de dichas desviaciones en las últimas N barras (o sumárselo en caso de estar vendidos).

Ello puede hacerse en EasyLanguage utilizando el siguiente código:

{ Function NTStop – © 2006 www.BreakoutFutures.com }

input: N (NumericSimple); { Lookback length }

Var: HDet (0), { detrended high }
LDet (0), { detrended low }
Devi (0), { deviation from trend line }
MaxDev (0), { maximum deviation }
ii (0); { loop counter }

{ Calculate deviation of price from trend }

MaxDev = 0;
for ii = 0 to N Begin
HDet = H[ii] – ((C[N] – C)/N * ii + C);
LDet = L[ii] – ((C[N] – C)/N * ii + C);
Devi = MaxList(AbsValue(HDet), AbsValue(LDet));
if Devi > MaxDev then
MaxDev = Devi;
End;

{ Use average of MaxDev over past N bars as stop size }
NTStop = Average(MaxDev, N);

Observese que el tamaño del stop depende del parámetro N, es decir, la longitud del periodo utilizado para calcular la media de los máximos de las desviaciones. Sin embargo, no es necesario optimizar dicho parámetro ya que puede tomarse como aproximación la duración media de las operaciones ganadoras del sistema. Ello debe realizarse en dos pasos: fijamos un valor de N inicial basado en dicha duración media, lo introducimos en el sistema, determinamos nuevamente la duración media de las operaciones ganadoras y ajustamos N si es necesario.

Para terminar, Mike compara un mismo sistema (el Time Charger System de Joe Krutsinger) aplicado al futuro mini sobre S&P MidCap 400 durante el periodo 2002-2006, utilizando un stop de pérdida fijo frente a un stop flexible ante al ruido de mercado. En las estadísticas se han incluido 25$ por operación en concepto de slippages y comisiones.

Utilizando un stop fijo tenemos los siguientes resultados:

Net Profit: $27,475
Profit Factor: 1.54
% Wins: 52.9%
639 trades
Average Trade: $43.00
Max Intraday Drawdown: -$2160.

Por su parte, aplicando el stop flexible tenemos que:

Net Profit: $25,910
Profit Factor: 1.45
% Wins: 57.4%
638 trades
Average Trade: $40.60
Max Intraday Drawdown: -$2515.

Los resultados son similares, siendo ligeramente mejores en el caso del stop fijo. Sin embargo, debe tenerse en cuenta que dicho stop está optimizado mientras que en el caso del stop flexible no ha habido optimización ninguna. Asimismo, el porcentaje de operaciones ganadoras en el segundo caso es mayor que en el primero lo que sugiere que se ha logrado el objetivo de evitar que nos salté el stop por un aumento del ruido en el mercado.

Un saludo
X-Trader

COMPARTIR EN: