Definir las condiciones del trading mediante los niveles de soporte y resistencia y el movimiento del precio

MICHAEL JANUS | 10 mayo, 2016

Índice


Introducción

Este artículo aborda un método de trading que se puede utilizar en los mercados Forex, de valores o de materias primas, además de algunos ejemplos de código en MQL4 que se pueden usar en un Asesor Experto basado en este método.

El movimiento del precio y la definición de los niveles de soporte y resistencia son los componentes clave del sistema. La entrada al mercado depende totalmente de estos elementos. Se van a describir los precios de los niveles de referencia junto con los mejores métodos para determinarlos. Los ejemplos en MQL4 incluyen los parámetros para minimizar el riesgo. Se reduce el riesgo dejando los niveles de salida del mercado y los niveles Stop relativamente cerca de los precios de entrada.

Este método ofrece una ventaja adicional que consiste en permitir un mayor volumen de operaciones, independientemente del tamaño de la cuenta. Por último, se comentan las opciones para determinar los objetivos en cuanto a beneficio, además del código MQL4 que permite que la salida del mercado sea rentable bajo distintas condiciones.


1. Seguimiento de los niveles de soporte y resistencia

Si se fija en cualquier gráfico de precios en cualquier mercado y con cualquier período de tiempo, observará dos hechos. El primero es que el precio del mercado nunca se queda en el mismo nivel durante mucho tiempo. Después de algún tiempo cambiará el precio de manera significativa. Se puede utilizar cualquier precio del gráfico como nivel de referencia.

No obstante, algunos precios son mejores que otros como niveles de referencia. Volveremos a este aspecto más adelante. El segundo hecho es que en cualquier gráfico hay un determinado precio donde se invierte la tendencia del mercado. El mercado puede llegar a alcanzar este nivel muchas veces y cambiar de dirección justo después. Estos son los niveles de soporte y resistencia que conoce prácticamente cualquier trader. El soporte es el nivel de precio por debajo del cual no caerá el mercado. La resistencia es el nivel de precio por encima del cual no subirá el mercado.

Estos niveles de precios, también conocidos como picos y valles (parte superior e inferior), envían informaciones acerca de los límites a los cuales puede llegar el mercado (por ahora) y la probabilidad de cambio de tendencia cerca de estos niveles. Los niveles de soporte y resistencia son buenos candidatos para usarlos como niveles de referencia, siendo unos precios que implican el inicio de una nueva tendencia. Otros precios, como aproximadamente el precio intermedio entre los niveles de soporte y resistencia, pueden ser también buenos niveles de referencia. Los vamos a llamar precios intermedios.

Se puede marcar cualquier parte del gráfico de precios con líneas horizontales en los precios correspondientes de soporte, resistencia y punto intermedio para usarlos como niveles de referencia. Se muestra un ejemplo en la siguiente figura.

Fig. 1 Soporte, resistencia y punto intermedio

Fig. 1 Soporte, resistencia y punto intermedio

La línea inferior de color morado representa un nivel de soporte de 1,09838. La línea superior roja representa un nivel de resistencia de 1,10257.

Aproximadamente entre las dos, está la línea negra que representa el nivel intermedio de 1,10048. Determinar el nivel exacto de soporte y resistencia es algo muy subjetivo y depende de sus propios criterios para elegir las posibles entradas y salidas del mercado. Puede querer abrir una posición en un precio concreto o cerca de él. O puede que el precio de entrada no tiene que ser exacto y le basta que se encuentre en un amplio rango de precios. Todo depende de su propio estilo de trading y de sus objetivos de beneficio.

En consecuencia, la distancia entre sus niveles de soporte y resistencia puede variar muchísimo. Sólo son referencias a utilizar para definir unas adecuadas condiciones de trading.

Fig.2 Intervalos de precios de soporte y resistencia

Fig. 2 Intervalos de precios de soporte y resistencia

La figura 2 muestra cuatro intervalos distintos de soporte y resistencia en un gráfico de 1 minuto.

Algunos intervalos son más anchos y otros más estrechos. Como ya se ha mencionado, se asignan los niveles del precio de manera subjetiva, pero es evidente que se producen siempre en los máximos y mínimos (y el punto intermedio entre ellos) de las tendencias a corto plazo.

Las figuras de 3 a 6 son ejemplos de intervalos de soporte y resistencia en períodos de tiempo largos y cortos en gráficos de 1 minuto.

Las figuras 3 y 4 muestran un mercado alcista y las figuras 5 y 6 muestran un mercado bajista.

Fig. 3 Mercado alcista ancho

Fig. 3 Mercado alcista ancho


Fig. 4 Mercado alcista estrecho

Fig. 4 Mercado alcista estrecho


Fig. 5 Mercado bajista ancho

Fig. 5 Mercado bajista ancho


Fig. 6 Mercado bajista estrecho

Fig. 6 Mercado bajista estrecho


Estos precios de referencia constituyen unas zonas específicas donde el precio tiene un movimiento específico. La aparición de este tipo de movimiento del precio en el gráfico indica las condiciones adecuadas para operar.


2. Identificación de las condiciones idóneas en base al movimiento del precio

Existe una gran variedad de patrones de velas dobles que se pueden utilizar para identificar las condiciones adecuadas para operar. Vamos a describir tres de ellos en este artículo. Estos patrones aparecen cerca de los niveles de soporte y resistencia que se están utilizando como posibles referencias de entrada al mercado. Todos los ejemplos que vamos a ver a partir de ahora van a ser con velas de 1 minuto. Siempre se usará este período de tiempo debido a que el sistema requiere puntos de entrada precisos, además de la corta distancia de las órdenes Stop Loss.

Cada uno de los siguientes patrones contiene dos velas de 1 minuto. Cuando aparece uno de estos patrones cerca del nivel del precio de referencia (soporte, resistencia o intermedio) se produce una entrada al mercado exactamente en el precio de apertura de la siguiente (tercera) vela de 1 minuto. Veremos un ejemplo después de describir los tres patrones.

El primer patrón está formado por una vela con una "sombra" más larga que su cuerpo y otra vela que cierra la primera en dirección opuesta a la sombra de la primera vela. La sombra es una línea vertical que indica el rango de precios entre el máximo y el precio de apertura y/o cierre por encima del cuerpo (sombra superior), o el rango de precios entre el mínimo y el precio de apertura y/o cierre por debajo del cuerpo (sombra inferior). La primera vela del patrón puede ser una vela "Doji".

Fig. 7 Patrón alcista 1

Fig. 7 Patrón alcista 1


Fig. 8 Patrón bajista 1

Fig. 8 Patrón bajista 1

La figura 7 muestra un patrón alcista y la figura 8 muestra un patrón bajista.

Estos patrones son similares a los patrones de vela "Hammer" (martillo), pero no son específicos, ya que una parte del patrón de "Doji" puede incluir cualquier combinación de velas crecientes o decrecientes.

La figura 9 muestra una tendencia bajista que comienza con este tipo de patrón.

Fig. 9 Tendencia alcista

Fig. 9 Tendencia alcista


El segundo patrón está formado por dos velas cuyos cuerpos tienen casi la misma longitud.

Los cuerpos de ambas velas tienen aproximadamente los mismos precios de apertura y cierre. Hay que tener en cuenta que la longitud de los cuerpos de ambas velas como sus respectivos precios de apertura y cierre no tienen que ser exactamente iguales. En la figura 10 se muestra el ejemplo de un patrón bajista y en la figura 11 el de un patrón alcista.

Estos patrones son conocidos como "pinzas". La figura 12 muestra una tendencia bajista que comienza con un patrón "pinza".

Fig. 10 Patrón bajista 2

Fig. 10 Patrón bajista 2


Fig. 11 Patrón alcista 2

Fig. 11 Patrón alcista 2


Fig. 12 Tendencia bajista

Fig. 12 Tendencia bajista

El tercer y último patrón es más común. Está formado por una primera vela que puede ser prácticamente de cualquier tipo y de una segunda vela que cierra por completo la vela anterior. La figura 13 muestra un patrón alcista y la figura 14 muestra un patrón bajista.

La figura 15 muestra una tendencia bajista que empieza con este tipo de patrón.

Fig. 13 Patrón alcista 3

Fig. 13 Patrón alcista 3


Fig. 14 Patrón bajista 3

Fig. 14 Patrón bajista 3


Fig.15 Tendencia alcista

Fig. 15 Tendencia alcista

Al observar un par de velas de 1 minuto que forman uno de estos tres patrones, hay que tener en cuenta otro factor para decidir si se entra o no al mercado en este momento.

Se trata de la distancia entre el precio de entrada y el precio de referencia más cercano del nivel de soporte o resistencia. Si el precio de entrada está muy lejos del precio de referencia, es mejor no abrir una posición, sin importar el patrón de movimiento del precio.

Como ya se ha mencionado antes, se lleva a cabo la entrada al mercado inmediatamente después de la apertura de la siguiente (tercera) vela de 1 minuto. En otras palabras, dos velas forman alguno de los patrones que hemos descrito y después se abre una tercera. Se coloca la orden en el mercado justo en el precio de apertura. Vamos a ver esto con más detalle en el siguiente apartado dedicado al código MQL4. Puesto que el patrón de movimiento del precio es un elemento clave en este tipo de estrategias de trading, siempre se usan órdenes de mercado para entrar. Nunca se usan órdenes pendientes para entrar.


3. Código MQL4 para identificar los patrones del movimiento del precio

Ahora que hemos visto los principios de entrada al mercado del sistema de trading, vamos a repasar el código para su implementación.

Se pueden utilizar los siguientes bloques de código en los Asesores Expertos basados en el movimiento del precio y en los niveles de soporte y resistencia. En primer lugar, hay que definir las variables. Algunas de estas variables son los precios más recientes de apertura y cierre, así como el precio máximo y mínimo de las velas de 1 minuto. Hay que determinar estos cuatro precios para la vela de 1 minuto actual y las dos velas anteriores. Esto se hace mediante iOpen(), iHigh(), iLow(), y iClose().

Como estamos buscando un patrón de dos velas completamente formado, la primera vela del patrón será la que se ha formado dos minutos antes que la vela actual (por ejemplo, la vela de la izquierda en la figura 7). La vela se llamará Candle1. La siguiente vela que se forma un minuto antes se llamará Candle2 (la vela de la derecha en la figura 7).

La vela actual se llamará Candle3, y se formará a la derecha de Candle2. Debido al seguimiento del movimiento del precio en tiempo real, el Asesor Experto debe estar siempre pendiente de la vela actual y de las dos anteriores.

double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);

El código anterior define el precio de apertura de Candle1.

Puesto que el valor de la variable no es entero, se usarán datos del tipo double. "O1" indica el precio de apertura de la primera vela en el patrón. iOpen() proporciona los datos y se usa Symbol() como el primer parámetro para poder trabajar con cualquier símbolo en el gráfico.

"PERIOD_M1" indica el período de tiempo de 1 minuto (M1) y el último parámetro (su valor es igual a 2 en este caso) indica el desplazamiento en relación a la vela actual. Un desplazamiento con un valor igual a 0 indica la vela actual, 1 indica una vela atrás y 2 indica dos velas atrás.

O1, H1, L1 y C1 indican respectivamente los precios de apertura (Open), máximo (High), mínimo (Low) y cierre (Close) de Candle1. O2, H2, L2, C2, y O3, H3, L3, C3 indican los mismos precios para Candle2 y Candle3.

El siguiente bloque de código es un ejemplo de definiciones de estas variables.

//---- Candle1 OHLC
double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
//---- Candle2 OHLC
double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
//---- Candle3 OHLC
double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);

Se describen a continuación las condiciones. En particular, las condiciones para la aparición de uno de los tres patrones de velas que hemos descrito.

Tenemos el caso del patrón 1 que hemos visto en la figura 7 del apartado anterior si la siguiente declaración es verdadera.

if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)

Este patrón requiere que se cumplan seis condiciones. La primera, C1>=O1, indica que Candle1 tiene que ser creciente o que su precio de apertura sea superior o igual a su precio de cierre. L1<O1 indica que el precio mínimo de Candle1 tiene que ser inferior a su precio de apertura. La siguiente condición requiere que la diferencia entre el precio de apertura y el mínimo de Candle1 sea superior a la diferencia entre sus precios de cierre y apertura. Esto quiere decir que la sombra inferior de Candle1 tiene que ser superior a su cuerpo.

La cuarto condición se refiere a Candle2 y requiere que su precio de cierre sea superior o igual a su precio de apertura. C2>H1 requiere que el precio de cierre de Candle2 sea superior al máximo de Candle1. Por último, el mínimo de Candle2 tiene que ser superior al mínimo de Candle1.

Si se cumplen todas las condiciones del primer patrón, el siguiente código colocará una orden de compra (BUY).

Esta orden tendrá un volumen de 0,1 lote, un deslizamiento (Slippage) de 5, un Stop Loss de 10 pips por debajo del precio de oferta (BID) y un Take Profit de 50 pips por encima del precio de oferta (BID).

 //---- Pattern 1 - bullish 
 if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

Del mismo modo, para colocar una orden de venta (SELL), van a cambiar las condiciones para permitir un patrón bajista como el de la figura 8. Los parámetros de la función OrderSend() también serán distintos.

Este código clocará una orden similar a la anterior, pero en dirección opuesta:

 //---- Pattern 1 - bearish
 if(C1 <= O1 && H1 > O1 && ((H1-O1)>(O1-C1)) && C2 <= O2 && C2 < L1 && H2 < H1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point);
   return;
  }

Se usará un código similar para colocar órdenes cuando se producen los patrones 2 y 3.

El patrón alcista 2 (pinzas) tiene las siguientes condiciones:

 //---- Pattern 2 - bullish
 if(C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

El patrón bajista 2 tiene el siguiente código:

 //---- Pattern 2 - bearish
 if(C1 > O1 && C2 < O2 && ((C1-O1)>(H1-C1)) && ((C1-O1)>(O1-L1)) && ((O2-C2)>(H2-O2)) && ((O2-C2)>(C2-L2)) && O2 >= C1 && O2 <= H1 && C2 <= O1 && C2 >= L1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
   return;
  }

Por último, el patrón 3 tiene las siguientes condiciones para la tendencia alcista y bajista respectivamente:

 //---- Pattern 3 - bullish
 if(C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

 //---- Pattern 3 - bearish
 if(C1 < O1 && ((O2-C2)>=(C2-L2)) && C2 < O2 && C2 < C1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
   return;
  }
Se pueden configurar algunos parámetros de las órdenes, tales como Stop Loss y Take Profit, en lugar de declararlos de manera explícita como en los ejemplos anteriores.


4. Combinar el soporte/resistencia con el movimiento del precio

Es el momento de combinar el código del movimiento del precio con el código de detección de los niveles de soporte y resistencia.

El Asesor Experto observará el mercado hasta que el precio alcance un nivel determinado. Una vez alcanzado este nivel, el Asesor Experto intentará detectar los patrones de precios 1, 2 y 3. Pueden ser los tres patrones, el alcista o el bajista, uno sólo o unos pocos. El siguiente código usa dos variables más para comprobar si el mercado ha alcanzado un precio determinado, en este caso, 1,09000 para EURUSD.

En este ejemplo, el mercado EURUSD está operando por debajo de 1,09000 en el momento de la activación del código.

double ref=1.09000;
int refhit=0;

if(O2 < ref && C3 >= ref)
  {
   refhit=1;
   return;
  } 

La variable ref representa el nivel del precio de referencia (soporte, resistencia o intermedio) que se está observando. La otra variable, refhit, describe si el estado actual del mercado ya ha alcanzado el nivel del precio de referencia o no. refhit es un número entero cuyo valor es 0 o 1. El valor por defecto es 0 e indica que no se ha alcanzado el nivel del precio de referencia.

Si se cumplen las siguientes condiciones, se van a establecer las variables nada más se alcanza el nivel de referencia. Vamos a añadir estas dos variables al código del movimiento del precio que hemos descrito antes.

En el ejemplo EURUSD, las condiciones del patrón alcista 3 intentarán superar 1,09000.

Este es el código del patrón 3 después de su modificación:

  if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

La primera condición adicional, refhit==1, requiere que el mercado alcance o supere el valor establecido de la variable ref, en este caso 1,09000. Recuerde que antes de alcanzar este nivel, el mercado está operando por debajo de 1,09000. Por último, las dos nuevas condiciones requieren que ambas velas del patrón 3 se cierren por encima de la variable ref, es decir el valor 1,09000.

En el último ejemplo, la figura 16 muestra el caso de trading de EURUSD a corto plazo con niveles de soporte y resistencia de 1,07660 y 1,07841 respectivamente.

Fig. 16 EURUSD

Fig. 16 EURUSD

En el extremo derecho del gráfico, podemos observar que el mercado está operando principalmente entre los dos niveles.

Cuando el precio está cerca del nivel de soporte de 1,07660, se considera que es una entrada larga (de compra). Debido a que los mercados no alcanzan siempre los precios exactos de soporte o resistencia, el Asesor Experto usará el precio más cercano como nivel de referencia.

En este caso será 1,07690, un precio superior al soporte con 3 pips. Se intentará identificar las tendencias alcistas de los patrones de 1 a 3.

//---- Variables defined ------------------
//---- Candle1 OHLC
double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
//---- Candle2 OHLC
double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
//---- Candle3 OHLC
double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);

double ref=1.07690;
int refhit=0;
//-----------------------------------------

int start()
 {
 //---- Reference check
 if(O2 < ref && C3>=ref)
  {
   refhit=1;
   return;
  } 
 //--- Pattern 1 - bullish 
 if(refhit==1 && C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //--- Pattern 2 - bullish
 if(refhit==1 && C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //--- Pattern 3 - bullish
 if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //---
return;
}

Fig. 17 Inversión de tendencia de EURUSD

Fig. 17 Inversión de tendencia de EURUSD


Fig. 18 Entrada de EURUSD

Fig. 18 Entrada de EURUSD


Fig. 19 Salida de EURUSD

Fig. 19 Salida de EURUSD

Todas las secciones del código de los patrones alcistas requieren que el mercado alcance 1,07690 y que Candle1 y Candle2 cierren por encima de él.

Además, se duplicaron los niveles Take Profit en comparación con los ejemplos anteriores. La figura 17 muestra que el mercado cambió su tendencia a bajista y pasó ligeramente por debajo de 1,07690 y alcanzó 1,07670 antes de cambiar de nuevo a alcista. Como resultado, el valor de refhit cambió a 1.

Poco después del cambio de la tendencia a alcista, se formó el patrón alcista 3. Es aquí donde se colocó una orden de compra (BUY) y se abrió la posición a 1,07740 como se muestra en la figura 18. (A la apertura de Candle3, el valor de BID era 1,07720. Teniendo en cuenta el deslizamiento de 5 pips, se ha ejecutado la orden a 1,07740.) Como se muestra en la figura 19, comenzó una fuerte tendencia alcista a partir de este punto. Nunca se alcanzó el nivel Stop Loss y se cerró la posición en el Take Profit de 1,08740.


Conclusión

Como se puede observar en los ejemplos incluidos en este artículo, el uso combinado del movimiento del precio junto con el seguimiento de los niveles de soporte y resistencia puede resultar muy efectivo en determinar las condiciones del trading.

Obviamente, el código MQL4 incluido y descrito en este artículo es incompleto y no constituye un Asesor Experto. Los códigos de los ejemplos están diseñados para utilizarlos como bloques en un Asesor Experto completo. El objetivo principal del artículo es describir los principios básicos del método de trading. Se pueden escribir los códigos de otros patrones del movimiento del precio para entrar y salir del mercado. Le deseo lo mejor en todos sus proyectos de trading.