Acceder

📊​​Trading En La Zona - PARTE 2

En la primera entrega de esta serie de dos estudiamos las zonas de trading, a las que todos los inversores deberían prestar atención. Ahora que hemos identificado estas zonas, estamos listos para construir un sistema que las implemente.

El mes pasado hablamos acerca de la teoría detrás de las zonas de trading clásicas, a veces llamadas «puntos de pivote», y mostramos algunos patrones simples de trading basados en estas zonas. Ahora abordaremos un tipo diferente de zona intradiaria, las zonas de rango de apertura, y combinaremos ambos tipos de zonas en un sistema de trading S&P 500.

El concepto que hay detrás de las zonas de rango de apertura consiste en dividir el mercado en zonas de trading basadas en el movimiento de los precios en relación con la apertura de hoy. Estas zonas no producen una distribución normal como las zonas estándar, sino que forman niveles de apoyo y resistencia. Para analizar las zonas de rango de apertura del S&P 500 desde el 21 de abril de 1982 hasta el 1 de mayo de 1997, dividiremos el mercado en zonas basadas en un porcentaje dado del rango medio verdadero de tres días. Estas zonas son: 100%, 75%, 50%, 25%, 15%, -15%, -25%, -50%, -75% y -100%. Podemos ver con qué frecuencia el S&P 500 pasa por cada una de estas zonas durante nuestro período de análisis. Nuestros resultados son:

Esto muestra que el mercado alcanza el 50 % del promedio de tres días del rango verdadero por encima de la apertura alrededor del 37 % de las veces, y alcanza -50 % por el 39 % de las veces. El mercado se mueve más del 25 % del rango medio verdadero de tres días por encima o por debajo de la apertura alrededor del 64 % de las veces. Nos movemos 100 % por encima de la apertura el 12,3 % del tiempo y 100 % por debajo de la apertura el 13,7 % del tiempo.

A continuación determinaremos qué porcentaje del tiempo el mercado cierra en una zona determinada. Usando el mismo período que antes, el mercado cierra:

Podemos ver que el mercado cierra un 50 % por encima de la apertura el 21,6 % de las veces. Como se ve en nuestros primeros resultados, el mercado alcanza este nivel el 37,3 % de las veces. Esto significa que una vez que alcanzamos este nivel, cerramos por encima de él 0,216/0,373 o, lo que es lo mismo, el 57 % del tiempo. Alcanzamos el 75 % alrededor del 21,6 % del tiempo y cerramos por encima de él 13,3 % de las veces, lo que significa que una vez que alcanzamos este nivel, cerramos por encima de él 61 % de las veces. No tenemos los mismos resultados en el lado corto. Una vez que alcanzamos cualquier zona dada por debajo de la apertura, solo cerramos por debajo de ella alrededor del 50 % de las veces.

La idea de comprar en una ruptura por encima o por debajo de la apertura se llama ruptura de «rango de apertura». Esta técnica ha sido investigada por muchos traders, entre los que destacan Larry Williams y Toby Crabel. Una de las mejores fuentes de estas investigaciones es el libro de Crabel, «Day Trading Using Short Term Price Patterns and Opening Range Breakouts».

Para analizar una ruptura de rango de apertura al alza en el S&P 500, usaremos los mismos tres períodos de 45 minutos de datos del S&P 500 usados en el artículo del mes pasado. Estos períodos son:

1) Del 30 de septiembre de 1985 al 29 de diciembre de 1989

2) Del 2 de enero de 1990 al 31 de mayo de 1995

3) Del 1 de junio de 1995 al 17 de abril de 1997

Usaremos un nivel de ruptura del 50 % y una parada de protección en la apertura de hoy. Nuestras reglas y resultados son sin slippage ni comisiones, si bien no hay que olvidarse de que estamos buscando una tendencia de mercado y no un sistema de trading. Vemos los resultados en RUPTURA DE RANGO.


Usar una apertura de rango al alza es un buen punto de partida del sistema.

Este patrón produjo un total de 226.350 dólares durante el período 1, mostrando que una ruptura de la zona de apertura al alza en el S&P 500 es un gran punto de partida para desarrollar un patrón de trading. También hicimos pruebas con el 50% de las rupturas a la baja y encontramos que no producían una tendencia estadística significativa. Nuestro análisis del S&P 500 muestra que las rupturas de rango de apertura funcionan mejor en largo que comprando una ruptura de R2 (segundo punto de resistencia), pero vender una ruptura de S2 (segundo punto de soporte) funciona mejor que coger una operación corta basada en una ruptura de rango de apertura. (Ver «Trading In The Zone», Futures, agosto de 1997, análisis de R2 y S2.)

Poniendo en práctica lo que hemos aprendido sobre la ruptura de rangos de apertura y los puntos de pivote, desarrollaremos patrones que integren estas zonas intradiarias en un sistema de S&P 500. Tanto el código de soporte como el código de nuestras plantillas en EasyLanguage de TradeStation se muestran a continuación.

CÓDIGO DEL SISTEMA

El siguiente código incluye tanto el código de soporte como las plantillas para las reglas 1-5. Este sistema utiliza tanto las señales de nombre como la función de entrada en las salidas, permitiéndonos desarrollar reglas de salida que solo funcionan para una señal dada.

Para incluir las reglas filtradas de las que hemos hablado en el sistema, reemplace las secciones coloreadas del código con el código apropiado del texto principal.

Este sistema se debe probar en períodos de 45 minutos de S&P 500.

Rule1(TRUE),Rule2(FALSE),Rule3(FALSE),Rule4(FALSE),Rule5(FALSE); Vars: S1(0),R1(0),Piv(0),S2(0),R2(0),Stoc(0),TOpen(0);
Vars:PivUp(0),PivDn(0),DayBar(0);
Vars: DidTrade(FALSE),DidBuy(FALSE),DidSell(FALSE); Arrays: 
DAYPAT[10](0);
Arrays: MDAYPAT[10,2](0);
{ A new Trading Day} If Date <> Date[1] then begin DidTrade = FALSE;
 DidBuy = FALSE;

DidSell = FALSE;
{Current Trading bar of the day } DayBar = 0;
{ Save yesterday’s zone movements in yesterday’s array buffer } MDayPat[0,1] = MDayPat[0,0];
MDayPat[1,1] = MDayPat[1,0];
 MDayPat[2,1] = MDayPat[2,0];
 MDayPat[3,1] = MDayPat[3,0];
 MDayPat[4,1] = MDayPat[4,0];
 MDayPat[5,1] = MDayPat[5,0];
 MDayPat[6,1] = MDayPat[6,0];
 MDayPat[7,1] = MDayPat[7,0];
 MDayPat[8,1] = MDayPat[8,0];
 MDayPat[9,1] = MDayPat[9,0];
{ Save Today’s Open }
TOpen =
Open;
{Calculate the Pivot Points }
Piv= (H of Data2 + L of Data2 + C of Data2)/3; R1 = 2 * 
Piv-L of Data2;
S1 = 2 * Piv-H of Data2; R2 = (Piv-S1)
+ R1;
S2 = Piv-(R1-S1);
end;
{ If this is the opening bar, then save the number of the zone we are opening in } If DayBar = 0 then begin
IfTOpen > Piv then begin DayPat[0] = 
1;
end;
IfTOpen < Piv then begin DayPat[0] = 
-1;
end;
IfTOpen > R1 and TOpen < R2 then begin DayPat[0] = 
2;
end;
IfTOpen > R2 then begin DayPat[0] = 
3;
end;
IfTOpen < S1 and TOpen > S2 then begin DayPat[0] = 
-2;
end;
IfTOpen < S2 then begin DayPat[0] = 
-3;
end; end;
{ Increment Bar count for the day. Let close of 10:15 bar be bar 1 } DayBar =
 DayBar + 1;
{ Record which zone each bar close in for each 45 minute bar } If Close > Piv then begin
DayPat[DayBar] = 1;
end;
IfClose< Piv then begin DayPat[DayBar] = -1;
end;
IfClose> R1 and Close[1] < R2 then begin DayPat[DayBar] = 
2;
end;

If Close > R2 then begin DayPat[DayBar] = 3;
end;
IfClose< S1 and Close > S2 then begin DayPat[DayBar] = -2;
end;
If Close < S2 then begin DayPat[DayBar] = -3;
end;
{ Buying an opening range breakout } If Rule1 = TRUE then begin
Buy(“BkBuy”) at TOpen + .50 * Average(TrueRange of Data2,3) stop;
{ Exit buy entry BkBuy at Topen on a stop. This exit will not exit any of the other long signals }
Exitlong(“ExBk”) Entry(“BkBuy”) at TOpen stop; end;
{Countertrend short pattern } If Rule2 = TRUE then begin
IfHighest(High,DayBar) > R2 then sell(“CntS1”) at R1 stop; Exitshort(“ExCS1”) Entry(“CntS1”) at R2 stop;
end;
{ Breakout short pattern }
IfRule3 = TRUE then begin Sell(“BkSell”) at S2 stop;
Exitshort(“ExBkS”) Entry(“BkSell”) at S1 stop; end;
{Countertrend long pattern } If Rule4 = TRUE then begin
IfDidSell= FALSE and Lowest(Low,DayBar) < S2 then buy(“CntB1”) at S1 + .10 stop; Exitlong(“ExCntB1”) Entry(“CntB1”) at S2 stop;
end;
{ Breakout long pattern }
IfRule5 = TRUE then begin Buy(“BBk2”) at R2 stop;
Exitlong(“ExBBk2”) Entry(“BBk2”) at R1 stop; end;
{ Set flag if we had a long trade or a short trade } If MarketPosition = 1 then DidBuy = TRUE;
IfMarketPosition = -1 then DidSell = TRUE;
{ At the end of the day save how the market moved though the zones } If DayBar = 9 then begin
MDayPat[0,0] = DayPat[0];
 MDayPat[1,0] = DayPat[1];
 MDayPat[2,0] = DayPat[2];
 MDayPat[3,0] = DayPat[3];
 MDayPat[4,0] = DayPat[4];
 MDayPat[5,0] = DayPat[5];
 MDayPat[6,0] = DayPat[6];
 MDayPat[7,0] = DayPat[7];
 MDayPat[8,0] = DayPat[8];
 MDayPat[9,0] = DayPat[9]; end;

 Nota: Usamos una función incorporada de TradeStation para salir de todas las operaciones al final del día.

Mejorando la zona
Nuestro código, o shell, nos permite probar cada uno de nuestros cinco patrones básicos de zonas, tanto individualmente como en conjunto. La regla 1 se analiza más arriba y compra en la ruptura del rango de apertura. La regla 3 es el patrón corto de ruptura que vende en S2. La regla 4 es el patrón largo de contratendencia que compra en S1, y la regla 5 es el patrón largo de ruptura que compra en R2. Ya se habló de las reglas 3-5 el mes pasado. La regla 2 es un patrón nuevo corto de contratendencia que vende en R1. La regla 2, al igual que nuestro patrón de ruptura de S2 (Regla 3), mostró un sesgo estadístico significativo durante los períodos 1 y 3, pero durante el período 2 (2 de enero de 1990 al 31 de mayo de 1995), solo consiguió 7,57 dólares por operación sin slippage ni comisiones. Durante el período 1 nuestro promedio fue de 177,06 dólares por operación, y durante el período 3 tuvimos un promedio de 126,29 dólares por operación. Para mejorar cada una de estas reglas, usaremos diferentes filtros técnicos y temporales. Aquí están las versiones finales filtradas de las reglas:

If Rule1 = TRUE then begin If DayBar <> 9 and

Lowest(Low,DayBar) > TOpen-.20

* Average(TrueRange of Data2,3) and Range of Data2 < Average(Range of Data2,5) then Buy(“BkBuy”) at TOpen + .50 * Average(TrueRange of Data2,3) stop;

Exitlong(“ExBk”) Entry(“BkBuy”) at TOpen stop;

end;

If Rule2 = TRUE then begin If DayBar <> 9 and

Highest(High,DayBar) > R2 then sell(“CntS1”) at R1 stop;

Exitshort(“ExCS1”) Entry(“CntS1”)

at Highest(High,DayBar) + .10 points stop;

end;

If Rule3 = TRUE then begin If DayBar > 5 and

Highest(High,DayBar) < R1 and DayofWeek(Date) <> 1 then Sell(“BkSell”) at S2-.15 * Average (TrueRange of Data2,3) stop;

Exitshort(“ExBkS”) Entry(“BkSell”) at S1-.15 * Average(TrueRange of Data2,3) stop;

end;

If Rule4 = TRUE then begin

If DidBuy = FALSE and DayBar <> 6 and Lowest(Low,DayBar) < S2 then Buy(“CntB1”) at S1 + .10 stop;

Exitlong(“ExCntB1”) Entry(“CntB1”) at S2 stop;

end;

If Rule5 = TRUE then begin

If DayBar <> 9 and DayBar <> 6 then Buy(“BBk2”) at R2 stop;

Exitlong(“ExBBk2”) Entry(“BBk2”) at R1 stop;

end;

En la Regla 1 ya no entramos en la operación después de las 3:30 p.m., y cancelamos nuestra orden si el mercado retrocede más del 20% del promedio de tres días del rango verdadero por debajo de la apertura. También entramos en caso de que el rango de ayer sea menor que el promedio de cinco días. En la regla 2 filtramos una vez más las operaciones después de las 3:30 p.m. También hemos desarrollado un nuevo stop de protección. Entonces, salimos de nuestra posición corta si el mercado establece un nuevo máximo para el día en más de .10.

En la regla 3, cogemos la operación si es más de la 1:15 p.m. y no es un lunes. Hemos ajustado también nuestros precios de entrada y salida usando un porcentaje del promedio de tres días del rango verdadero. En la regla 4 filtramos las operaciones que ocurren alrededor del mediodía. Finalmente, en la regla 5 filtramos todas las operaciones de alrededor del mediodía y de después de las 3:30 p.m. Nuestros filtros mejoran enormemente el rendimiento de cada regla como vemos a continuación:

Las nuevas versiones de nuestros patrones son significativamente mejores que los originales.

 

Por ejemplo, la Regla 3 original que se mostró en el artículo del mes pasado solo produjo un total de 87.500 dólares durante los tres periodos en 1.004 operaciones con un promedio de 87,15 dólares por operación en los tres periodos. Su nueva versión mejorada ha producido 116.475 dólares en 488 operaciones con un promedio de 238,67 dólares por operación. Esto supone una mejora del 273 % de media por operación y del 33 % en el beneficio neto.

También podemos ver que el simple hecho de filtrar las rupturas que ocurren alrededor del mediodía también ayuda a un patrón. En la Regla 4, aumentó tanto el beneficio neto así como las ganancias por operación en los tres períodos. Nuestro beneficio pasó de 81.250 dólares a 88.850 dólares y nuestro promedio por operación aumentó de 277,30 dólares a 292,26 dólares. Ahora que hemos escogido nuestras versiones de cada una de estas reglas, necesitamos integrarlas en un sistema de operaciones.

Zonas de combinación Analizar todas las reglas y tratar de combinarlas no es una tarea fácil. De hecho, nuestro beneficio neto será menor que lo que cada patrón obtuvo por sí mismo. Si activamos las reglas 1 y 5, que son ambas señales de compra de ruptura, vemos que ya solo la regla 1 genera 142.575 dólares en los tres conjuntos de datos, mientras que la 5 produce 150.325 dólares. Probándolas juntas, ganamos 210.500 dólares. Aunque es una cifra menor a los $292.900 que ambos patrones hacen por separado, se debe a que muchas de las operaciones se superponen.

Mientras que en el ejemplo anterior seguimos ganando más que en cualquiera de los patrones de forma individual, es posible ganar menos. Esto sucederá si no aislamos nuestras señales y no nos aseguramos de que las salidas y entradas adecuadas funcionen con las reglas pertinentes. Por ejemplo, si usamos una parada de protección en la apertura en una ruptura R2 en lugar de R1, o una salida en R1 en una ruptura de rango de apertura, esto reduciría enormemente la rentabilidad. Los resultados de cómo se desempeña nuestro sistema cuando combinamos los cinco patrones se muestran en la siguiente tabla.

La combinación de todos los patrones proporciona resultados consistentes y comerciables.

Se puede ver que el promedio por operación es consistente en los tres períodos, pero con el aumento del slippage durante 1997, la operación promedia de aproximadamente 260 dólares del período 3 es un problema. Este sistema gana 447.375 dólares durante los tres períodos combinados en 1.724 operaciones. El promedio por operación es de 259,50 dólares. Por lo tanto, incluso si usamos 100 dólares de slippage y comisiones, todavía ganaríamos 274.975 dólares desde el 30 de septiembre de 1985 hasta el 17 de abril de  1997, o durante los tres períodos. Esto proporciona un beneficio neto de 23.704,71 dólares al año. Nuestra drawdown máximo, 14.450 dólares, se produjo durante el período más reciente, lo que nos da un rendimiento anual medio del 82%.

Incluso en esta etapa de nuestra investigación, nuestros resultados están al nivel de algunos de los mejores sistemas de trading intradiario. Si combinamos el análisis del ciclo con los niveles clave de soporte y resistencia se mejoraría el rendimiento de nuestro sistema. Este es el método utilizado por R-MESA de MESA Software.

Limitar el deslizamiento La cifra del promedio por operación puede seguir siendo un problema, especialmente si se piensa que hay que usar hasta 200 dólares de slippage (antes de 1995, 75 dólares era suficiente). Una solución es usar una orden límite de detención. Este tipo de orden se convierte en una orden límite una vez que el mercado ha penetrado en un determinado nivel de stop.

Pensemos en este ejemplo: tenemos una orden de stop de compra del S&P 500 a 900. Una vez que el mercado haya operado por encima de 900, tendríamos una orden límite. Por ejemplo, tendríamos un stop a 900 con un límite de 900.10. Si bien esto limitaría el slippage a 0,10 o 50 dólares, no tenemos ninguna garantía de que se cumpla. Este concepto necesita ser probado, pero podría mejorar la operatividad de este sistema en los mercados volátiles de hoy en día.

Tras esta lección, hemos de saber cómo desarrollar nuestro propio sistema de S&P 500 basado zonas. Este concepto ha sido una de las metodologías de trading más utilizadas desde antes de la era tecnológica, y, como puedes ver, ha perdurado.

Muchas gracias a Michael Barna por contribuir a la investigación para desarrollar este artículo.

ENVÍE UN MAIL A [email protected] SI QUIERE RECIBIR CÓDIGO GRATIS CON LA VENTAJA DEL SISTEMA.
¿Te ha gustado mi artículo?
Si quieres saber más y estar al día de mis reflexiones, suscríbete a mi blog y sé el primero en recibir las nuevas publicaciones en tu correo electrónico
Accede a Rankia
¡Sé el primero en comentar!

Proveedor de soluciones innovadoras de trading algorítmico e inteligencia artificial. Aportamos toda nuestra experiencia en el diseño, desarrollo e implantación de soluciones algorítmicas y de inteligencia artificial para inversores de todo tipo. TELEGRAM: t.me/quantifiedmodelstrading CONTACTO: [email protected]