English Русский 中文 Deutsch 日本語 Português
El comercio nocturno en la sesión asiática: cómo mantener los beneficios

El comercio nocturno en la sesión asiática: cómo mantener los beneficios

MetaTrader 5Trading | 22 diciembre 2017, 16:28
2 840 0
Dmitriy Zabudskiy
Dmitriy Zabudskiy

Introducción

Mucha gente se ha encontrado en ocasiones con el concepto de comercio nocturno. La primera cosa que viene a la mente al escuchar esta idea es que el comercio se lleva a cabo en la noche. Pero todo es más sencillo: debido a la diferencia de husos horarios, la noche llega a diferentes partes del mundo en diferentes momentos. La sesión comercial americana y la europea tienen lugar en los husos horiarios ubicados en -4 y +1 con respecto al Tiempo universal coordinado UTC, respectivamente.

Después se incluyeron en las transacciones mundiales las bolsas asiáticas y del Pacífico, cuyo huso horario es opuesto al de sus colegas americanos y europeos. Aquí el comercio comienza cuando los tráders estadounidenses regresan a casa y los europeos se van a dormir. Precisamente en esto consiste el comercio nocturno, según nuestras ideas. Los periodos de las sesiones comerciales se pueden representar como pueden ver en el mapa del mundo de la figura 1 (el tiempo va de derecha a izquierda):


Fig. 1. Las sesiones comerciales en el mapa mundial

Fig. 1. Las sesiones comerciales en el mapa mundial


De lo anteriormente dicho podemos comprender que el comercio nocturno básicamente se desarrolla en mercado plano o flat en parejas tales como: EUR/USD, GBP/USD, USD/CHF, USD/CAD, EUR/GBP, pero demuestra una gran actividad en las parejas: USD/JPY, GBP/JPY, AUD/JPY. Naturalmente, no tenemos ninguna garantía de que vaya a ser así siempre. Con esto en mente, en diferentes pares de divisas pueden darse diferentes estrategias durante la noche.

Estrategias de comercio nocturno

Básicamente, todas las estretegias en el mercado fórex se pueden dividir en estrategias de tendencia y estrategias de flat. Las primeras buscan señales que indiquen cambios en el mercado. Normalmente, se trata de la ruptura de canales horizontales o del retroceso con respecto a los canales, de carácter "alcista" o "bajista". La estrategia plana se orienta hacia el retroceso en el rango del canal horizontal. Tanto el mercado plano como el de tendencia pueden mostrar diferente volatilidad. Con frecuencia se forma después de la publicación de noticias macroeconómicas importantes. En la práctica, una gran volatilidad es propia principalmente de los movimientos de tendencia, pero hay excepciones. Para analizar las señales de tendencia y el mercado plano, se aplican los mismos indicadores, pero se interpretan de forma diferente.

Vamos a tomar la popular pareja EUR/USD. Normalmente, durante la sesión asiática, comienza a disminuir su volatilidad y a moverse hacia el flat. La corrección en esta etapa puede ser tan insignificante, que se podría considerar movimiento horizontal.


Fig.2. Movimiento plano en la sesión Asiática, pareja EUR/USD

Fig.2. Movimiento plano en la sesión Asiática, pareja EUR/USD

En la fig. 2 se destaca con rectángulos amarillos el movimiento de la pareja EUR/USD en el marco temporal H1 durante la sesión asiática. En el primer rectángulo (por la izquierda) se observa una pequeña oscilación dentro del canal. Al principio de la sesión tiene lugar el movimiento según la tendencia creada anteriormente, después, una pequeña corrección (hacia mitad de la sesión), y al final, un retorno brusco de vuelta. En el segundo rectángulo se observa un movimiento lento y ascendente, en este caso, repitiendo el movimiento del final del día. En el tercer rectángulo, la situación ha cambiado un poco. A diferencia de las anteriores sesiones, el movimiento inicial durante el tiempo nocturno corrige la tendencia diurna.

En todos los casos descritos, durante el periodo de la sesión asiática se ven pequeños movimientos en el rango de precio, una especie de "duda" del mercado. Este movimiento se puede tratar como mercado plano.

En los rectángulos amarillos, se ven los límites superiores e inferiores. Estos limitan el canal en el que oscila el precio. En el gráfico ya formado no supondrá ninguna dificultad dibujar un canal, pero en tiempo real no se sabe cómo se moverá el precio, y las grandes dudas conllevan volatilidad. ¿Qué podemos hacer?

Propongo solucionar este problema con la ayuda del indicador de tendencia Bollinger Bands, que da buenas señales en el mercado plano.

Fig.3. Uso del indicador Bollinger Bands con la pareja EUR/USD M30

Fig.3. Uso del indicador Bollinger Bands con la pareja EUR/USD M30

En la fig. 3 se muestra el gráfico de la pareja de divisas EUR/USD con el marco temporal М30. Sobre el mismo se ha superpuesto Bollinger Bands, para el que hemos elegido el periodo mínimo (10); el resto de los ajustes se han dejado por defecto. Podemos ver cómo el precio entra en el llamado "canal dinámico", creado por el indicador. Pero este canal no da señales completamente precisas. Por ejemplo, en el primer rectángulo, el precio se mueve hacia abajo, y el canal repite su movimiento. En este caso, además, el precio no retrocede desde el fondo del canal, pero hacia el final de la sesión asiática, todo cambia. El mercado comienza a retroceder con respecto a los límites del canal creado. En el segundo rectángulo, la acción del indicador se observa solo al final. En el tercer rectángulo, la situación se parece a la primera.

A partir de esta observación, podemos deducir que durante tres sesiones seguidas, las señales precisas del indicador se forman al final de la sesión comercial. Es decir, es posible detectar cierta ley y, partiendo de ella, podemos intentar construir una estrategia.

Ahora vamos a recurrir a otra estrategia, basada en la volatilidad brusca. Para la sesión asiática, serán las parejas en las que se encuentra el yen japonés. La estrategia analizada se ha descrito ampliamente en la Red. Su esencia consiste en entrar en el mercado en el momento de mayor volatilidad, cuando es posible un movimietno brusco en alguna dirección. Colocamos dos órdenes pendientes simultáneamente en direcciones opuestas, a una misma distancia y con los mismos parámetros: por encima del precio actual, para la compra; por debajo, para la venta. La hora de colocación de estas órdenes se encuentra, normalmente, en la segunda mitad de la sesión asiática (con posibles excepciones).

Bien, en la fig. 4 se muestra el gráfico de la pareja USD/JPY en el marco temporal H1:


Fig.4. Sesión asiática en la pareja USD/JPY H1

Fig.4. Sesión asiática en la pareja USD/JPY H1

Vamos a mirar los tramos de la sesión asiática con más detalle:


Fig.5. Tramos de la sesión asiática, pareja USD/JPY H1

Fig.5. Tramos de la sesión asiática, pareja USD/JPY H1


En la fig. 5 se han marcado con rectángulos rojos las posibilidades de entrada en el mercado. Todas ellas se han colocado con el precio de apertura de la vela. Son los momentos en los que la estrategia descrita propone colocar órdenes pendientes.

Ahora vamos a analizar cada tramo por separado. En los cuatro tramos temporales, la hora de apertura es 8.00 MOS (5.00 UTC).

  1. En la esquina superior, la apertura de la vela comienza en la marca 113.521. El mínimo del precio es 113.341, el máximo 113.553. En total obtenemos 32 puntos partiendo del precio de apertura hacia arriba y 180 hacia abajo.
  2. En el tramo superior derecho, la apertura de la vela comienza en la marca 114.152. El mínimo del precio es 114.109, el máximo (ya en la hora siguiente), es 114.308. En total, obtenemos 156 puntos partiendo del precio de apertura hacia arriba, y 43 hacia abajo. 
  3. El tramo inferior izquierdo se abre en 113.601. El mínimo del precio es 113.587, el máximo (tres horas después), es 113.747. En total, tenemos 146 puntos partiendo del precio de apertura hacia arriba y 14 hacia abajo.
  4. El último es el tramo inferior derecho: apertura 113.192, mínimo 112.957, máximo 113.193. Total: hacia arriba 1 punto, hacia abajo, 235.

Vamos a reunir todos los datos en un recuadro, para que se vean mejor:

Recuadro 1

№ del tramo Precio de apertura Precio máximo Precio mínimo Puntos máximos Puntos mínimos
1 113.521 113.553 113.341 180 32
2 114.152 114.308 114.109 156 43
3 113.601 113.747 113.587 146 14
4 113.192 113.193 112.957 235 1
Total --- --- --- mínimo 146 máximo 43

Como podemos ver por el recuadro 1, en cuatro sesiones, el mínimo de los movimientos máximos en una dirección ha sido de 146 puntos, y el máximo de los mínimos, 43 puntos. Vamos a redondear el máximo hasta la marca de los 140 puntos (a la baja), y el mínimo hasta los 45 puntos (a la alta), respectivamente. 

Para las cuatros situaciones, colocamos dos órdenes pendientes opuestas a 50 puntos. Colocamos un stop-loss a 100-110 puntos, y un take-profit a 50-80 puntos. El beneficio es de 200-320 puntos, respectivamente. Es decir, en los cuatro casos, obtenemos la activación del take-profit.

De nuevo conseguimos una estrategia rentable que funciona bastante bien. Solo queda convertirla en código, simularla en la historia y saber si traerá beneficios. 

Convirtiendo la estrategia en código

Estrategia basada en el indicador Bollinger Bands 

Primero incluimos la clase CTrade, para que sea más cómodo gestinar las transacciones. A continuación, nos ocupamos de las variables de entrada.

  • La variable div_work es responsable de los saltos bruscos de precio: acota el rango límite en el que puede encontrarse la señal.
  • La variable div_signal es la responsable de las desviaciones de la señal. No se considera señal el propio punto de contacto con el límite superior o inferior del indicador: le daremos un cierto margen. En otras palabras, la señal se activa cuando el precio sale de los límites en una distancia igual a esta variable. Esto filtrará bastantes señales falsas.
  • La variable work_alt es la bandera que permite cerrar la posición actual y abrir una nueva al aparecer la señal opuesta.
//+------------------------------------------------------------------+
//|                                        BollingerBandsForFlat.mq5 |
//|                                                          Aktiniy |
//|                                                             BBFF |
//+------------------------------------------------------------------+
#property copyright "Aktiniy"
#property link      "BBFF"
#property version   "1.01"
#include<Trade\Trade.mqh>
//--- input parameters
input char     time_h_start=22;       // Hora de comienzo del comercio
input char     time_h_stop=3;         // Hora de finalización del comercio
input int      bands_period=12;       // Periodo de Bollinger Bands
input int      bands_shift=0;         // Desplazamiento de Bollinger Bands
input double   bands_diviation=2;     // Desviación de Bollinger Bands
input double   div_work=3;            // Distancia máxima con respecto al límite del indicador
input double   div_signal=5;          // Distancia mínima con respecto al límite del indicador
input bool     work_alt=true;         // Trabajar con la posición en el caso de que exista una señal opuesta
input int      take_profit=50;        // Take Profit
input int      stop_loss=100;         // Stop Loss
//---
input bool     mon=true;              // Trabajar el lunes
input bool     tue=false;             // Trabajar el martes
input bool     wen=true;              // Trabajar el miércoles
input bool     thu=true;              // Trabajar el jueves
input bool     fri=true;              // Trabajar el viernes
//---
input long magic_number=65758473787389; // Número mágico
input double order_volume=0.01;         // Tamaño del lote
input int order_deviation=100;          // Desviación según la posición abierta
//--- Variable
MqlDateTime time_now_str;
datetime time_now_var;
CTrade trade;
int bb_handle;
double bb_base_line[3];
double bb_upper_line[3];
double bb_lower_line[3];
bool work_day=true;

El resto de las variables entrantes se han comentado con bastante detalle en el código.

En lo que respecta a las variables globales, aquí tenemos:

  • dos variables de tiempo equivalentes (time_now_str, time_now_var) para mayor comodidad en el trabajo,
  • a continuación, un objeto de clase para trabajar con órdenes,
  • manejador del indicador,
  • tres pequeñas matrices para los datos sobre el indicador en el momento actual (bb_base_line[], bb_upper_line[], bb_lower_line[]).
  • La variable work_day es la responsable de permitir la colocación de órdenes en los días de la semana.

Después, va un pequeño código para inicializar ciertos parámetros del trabajo con la clase:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   trade.SetExpertMagicNumber(magic_number);
   trade.SetDeviationInPoints(order_deviation);
   trade.SetTypeFilling(ORDER_FILLING_FOK);
   trade.SetAsyncMode(false);
//---
   return(INIT_SUCCEEDED);
  }

Ahora vamos a analizar el principal código de interacción y obtención de señales.

Primero obtenemos la hora del servidor, después, con la ayuda del operador-conmutador, comprobamos si se permite la colocación de órdenes hoy, introducimos la información en la variable work_day.

Se suponía que el asesor trabajaría no solo en la sesión asiática (sería universal). Además, es posible que la hora del terminal se diferencie en distintos terminales. Por eso hace falta comprobar la hora de funcionamiento. Aquí hay dos variantes: o bien trabaja dentro del periodo, o bien pasando a través del separador del periodo del día. Introducimos la información en la bandera work.

Si el tiempo de funcionamiento y el día elegido se corresponden, se calcula el manejador del indicador y sus datos se copian en la matriz anteriormente declarada. A continuación, sabremos los precios de compra y venta, puesto que según estos parámetros se calculan las señales de compra y venta. Después, si no hay posiciones abiertas, en el caso de que haya señal, colocamos la orden correspondiente.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// hora actual
   bool work=false;
   
      switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

//--- comprobamos la hora de trabajo     
   if(time_h_start>time_h_stop)             // trabajo con paso al día siguiente
     {
      if(time_now_str.hour>=time_h_start || time_now_str.hour<=time_h_stop)
        {
         work=true;
        }                                   // transmisión de la bandera de permiso de trabajo
     }
   else                                     // trabajar durante el día
     {
      if(time_now_str.hour>=time_h_start && time_now_str.hour<=time_h_stop)
        {
         work=true;
        }
     }                                     // transmisión de la bandera de permiso de trabajo

   int pos=PositionsTotal();

   if(work==true && work_day==true)        // permiso de trabajo recibido
     {
      bb_handle=iBands(_Symbol,_Period,bands_period,bands_shift,bands_diviation,PRICE_CLOSE);         // conocemos el manejador del indicador Bollinger Bands
      int i_bl=CopyBuffer(bb_handle,0,0,3,bb_base_line);
      int i_ul=CopyBuffer(bb_handle,1,0,3,bb_upper_line);
      int i_ll=CopyBuffer(bb_handle,2,0,3,bb_lower_line);
      if(i_bl==-1 || i_ul==-1 || i_ll==-1)
        {Alert("Error of copy iBands: base line=",i_bl,", upper band=",i_ul,", lower band=",i_ll);}   // comprobamos los datos copiados

      double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

      if(pos<1)
        {
         if((price_ask-(div_signal*_Point))>=bb_upper_line[2]-(div_work*_Point) && (price_ask-(div_signal*_Point))<=bb_upper_line[2]+(div_work*_Point))// señal de venta
           {
            trade.Sell(order_volume,_Symbol,price_bid,(price_bid+(stop_loss*_Point)),(price_bid-(take_profit*_Point)),"pos<1_sell");
           }
         if((price_bid+(div_signal*_Point))<=bb_lower_line[2]+(div_work*_Point) && (price_bid+(div_signal*_Point))>=bb_lower_line[2]-(div_work*_Point))// señal de compra
           {
            trade.Buy(order_volume,_Symbol,price_ask,(price_ask-(stop_loss*_Point)),(price_ask+(take_profit*_Point)),"pos<1_buy");
           }
        }
      if(pos>0 && work_alt==true)
        {
         if(trade.RequestType()==ORDER_TYPE_BUY)                     // si hasta el momento había una orden de compra
            if((price_ask-(div_signal*_Point))>=bb_upper_line[2]-(div_work*_Point) && (price_ask-(div_signal*_Point))<=bb_upper_line[2]+(div_work*_Point))// señal de venta
              {
               trade.PositionClose(_Symbol,order_deviation);
               trade.Sell(order_volume,_Symbol,price_bid,(price_bid+(stop_loss*_Point)),(price_bid-(take_profit*_Point)),"pos>0_sell");
              }
         if(trade.RequestType()==ORDER_TYPE_SELL)                   // si hasta el momento había una orden de venta
            if((price_bid+(div_signal*_Point))<=bb_lower_line[2]+(div_work*_Point) && (price_bid+(div_signal*_Point))>=bb_lower_line[2]-(div_work*_Point))// señal de compra
              {
               trade.PositionClose(_Symbol,order_deviation);
               trade.Buy(order_volume,_Symbol,price_ask,(price_ask-(stop_loss*_Point)),(price_ask+(take_profit*_Point)),"pos>0_buy");
              }
        }
     }
   else
     {
      if(pos>0)
        {
         trade.PositionClose(_Symbol,order_deviation);
        }
     }
  }
//+------------------------------------------------------------------+ 

Y el último elemento del código: en caso de que se cierre la sesión nocturna, se cerrarán todas las órdenes. COn esto finaliza el código del asesor.

Estrategia basada en el cambio abrupto de la volatilidad

Aquí todo es muy sencillo: las órdenes se colocan solo a una hora order_time determinada. Las órdenes se colocan a una distancia order_div del precio actual, con el stop-loss (order_sl) y el take-profit (order_tp) correspondientes. Si no se ha activado ninguna de las órdenes pendientes, esto indica que tenemos mercado plano, y las órdenes se eliminan al terminar el tiempo time_to_del (se indica en segundos).

El resto de los datos de entrada son los mismos que en el experto anterior.

De las variables globales, aquí se añaden:

  • work — bandera para permitir la colocación única de órdenes,
  • work_del — bandera que permite eliminar la orden opuesta en caso de activación de una de las órdenes,
  • work_day — bandera que permite trabajar en el día actual.

Asimismo, se han añadido las dos estructuras de los resultados que sirven para obtener información y eliminar una orden pendiente

//+------------------------------------------------------------------+
//|                                                TimeBuyOrSell.mq5 |
//|                                                          Aktiniy |
//|                                                             TBOS |
//+------------------------------------------------------------------+
#property copyright "Aktiniy"
#property link      "TBOS"
#property version   "1.01"
#include<Trade\Trade.mqh>
//--- input parameters
input int      order_time=0;                        // Hora de apertura de la orden
input int      order_sl=200;                        // Stop Loss
input int      order_tp=180;                        // Take Profit
input int      order_div=120;                       // Desviación de la colocación de las órdenes con respecto al precio actual
input int      time_to_del=10800;                   // Hora de eliminación de las órdenes
//---
input bool     mon=true;                            // Trabajar el lunes
input bool     tue=false;                           // Trabajar el martes
input bool     wen=true;                            // Trabajar el miércoles
input bool     thu=true;                            // Trabajar el jueves
input bool     fri=true;                            // Trabajar el viernes
//---
input long magic_number=65758473787389;             // Número mágico
input double order_volume=0.01;                     // Tamaño del lote
input int order_deviation=100;                      // Desviación de la apertura de la posición
//--- Variable
CTrade trade;
MqlDateTime time_now_str;
datetime time_now_var;
bool work=true;
bool work_del=true;
bool work_day=true;
//---
MqlTradeResult result_buy={0};
MqlTradeResult result_sell={0};

A continuación, va un código pequeño para la inicialización de ciertos parámetros de trabajo con una clase idéntica a la anterior.

El inicio de la función OnTick coincide con el experto descrito anteriormente. Después de obtener la bandera de trabajo en ese día, tiene lugar la comprobación de la correspondencia de la hora actual de trabajo. Si todo ha tenido éxito, calculamos los parámetros de apertura de las órdenes (Take Profit, Stop Loss, precio de apertura y hora de eliminación en el caso de que no se active). Enviamos al servidor las solicitudes comerciales correspondientes.

Después de colocar las órdenes pendientes, el experto monitorea la activación de una de ellas y elimina las sobrantes según el ticket de la estructura del resultado (result_buy, result_sell).

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// hora actual

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

   if(time_now_str.hour==order_time && work==true && work_day==true)
     {
      double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

      double div=order_div*_Point;
      double sl=order_sl*_Point;
      double tp=order_tp*_Point;

      double price_buy=price_ask+div;
      double price_sell=price_bid-div;

      double buy_sl=price_buy-sl;
      double buy_tp=price_buy+tp;
      double sell_sl=price_sell+sl;
      double sell_tp=price_sell-tp;

      datetime time_end=time_now_var+time_to_del;     //3600 секунд, один час

      trade.BuyStop(order_volume,price_buy,_Symbol,buy_sl,buy_tp,ORDER_TIME_SPECIFIED,time_end,"BuyLimit");
      trade.Result(result_buy);

      trade.SellStop(order_volume,price_sell,_Symbol,sell_sl,sell_tp,ORDER_TIME_SPECIFIED,time_end,"SellLimit");
      trade.Result(result_sell);

      work=false;
     }

   if(PositionsTotal()>0 && work_del==true)
     {
      PositionSelect(_Symbol);
      long position_type=PositionGetInteger(POSITION_TYPE);
      if(position_type==POSITION_TYPE_SELL)
         trade.OrderDelete(result_buy.order);
      if(position_type==POSITION_TYPE_BUY)
         trade.OrderDelete(result_sell.order);

      work_del=false;
     }
   if(PositionsTotal()==0)
      work_del=true;

   if(time_now_str.hour!=order_time)
     {
      work=true;
     }

  }
//+------------------------------------------------------------------+

Al final del código, se coloca la bandera para permitir la colocación de órdenes tras salir de la hora de apertura.

Simulación y rentabilidad

Estrategia basada en el indicador Bollinger Bands 

  • Símbolo: EURUSD
  • Periodo: М30 (2017.01.01 - 2017.11.03)
  • Bróker: Halifax Investment Services Pty Ltd
  • Divisa: AUD
  • Depósito inicial: 100.00
  • Apalancamiento: 1:100

Durante la optimización, se han descubierto los parámetros:


Aclararemos brevemente algunos aspectos: el trabajo tiene lugar en horario nocturno, desde la una de la madrugada hasta las 11 (MOS), el periodo del indicador es 11, la distancia máxima del límite del indicador es 12, la distancia mínima del límite del indicador es 13, Stop Loss=140 y Take Profit=120, trabajar todos los días de la semana, excepto el martes.

Para comenzar, echemos un vistazo a los resultados de la simulación de "OHLC en M1", figs. 6 y 7:


Fig.6. Resultados de la simulación de la estrategia basada en Bollinger Bands de OHLC en M1

Fig.6. Resultados de la simulación de la estrategia basada en Bollinger Bands de OHLC en M1

Fig.7. Resultados de la simulación en el gráfico (Bollinger Bands de OHLC en M1)

Fig.7. Resultados de la simulación en el gráfico (Bollinger Bands de OHLC en M1)

Resultados de la simulación con los mismos parámetros, pero en el modo "Cada tick basado en ticks reales", figs. 8 y 9:

Fig.8. Resultados de la simulación de la estrategia basada en Bollinger Bands con "Cada tick basado en ticks reales"

Fig.8. Resultados de la simulación de la estrategia basada en Bollinger Bands con "Cada tick basado en ticks reales"

Fig.9. Resultados de la simulación en el gráfico (Bollinger Bands con "Cada tick basado en ticks reales")

Fig.9. Resultados de la simulación en el gráfico (Bollinger Bands con "Cada tick basado en ticks reales")

Como podemos ver por los resultados, se obtiene beneficio en ambos casos: en el primero — 152%, en el segundo — 48%, (la calidad de la historia se deja sentir). En ambas simulaciones, la reducción es menor al 25%. Parece que es un resultado lo suficientemente interesante como para prestarle atención.

Anteriormente, en la fig. 3 hemos analizado los tres periodos de la sesión y hemos descrito la estrategia. Ahora vamos a analizar cómo ha trabajado el asesor en los dos primeros tramos (figs. 10 y 11):

Fig.10. Resultados del trabajo del asesor en el primer periodo, analizado anteriormente

Fig.10. Resultados del trabajo del asesor en el priemer periodo, analizado anteriormente

En la figura 10 (se trata del primer periodo de la fig. 3) se puede ver cómo el asesor realiza tres entradas. La primera no tiene éxito y termina con un stop-loss, pero las dos posteriores - a finales de la sesión asiática e inicios de la sesión europea - se cierrran con un take-profit.

Fig.11. Resultados del trabajo del asesor en el segundo periodo, analizado anteriormente

Fig.11. Resultados del trabajo del asesor en el segundo periodo, analizado anteriormente

En la fig. 11 (se trata del segundo periodo de la fig. 3) el asesor realiza dos entradas, a finales de la sesión asiática e inicios de la sesión europea. Una de ellas ha sido rentable, la otra ha dado pérdidas. En el tercer periodo de la fig. 3, el asesor no ha entrado en el mercado. Era martes y, de acuerdo con los ajustes, el asesor no comercia este día.

Ahora vamos a ver cómo se comporta la estrategia con otras parejas importantes:

Símbolo: AUDUSD

Periodo: M30 (2017.01.01 - 2017.11.07)

Parámetros:


Fig.13. Resultados de la simulación de AUDUSD M30 (BollingerBands)

Fig.13. Resultados de la simulación de AUDUSD M30 (BollingerBands)

Fig.13. Resultados de la simulación de AUDUSD M30 (BollingerBands)

Símbolo: GBPUSD

Periodo: M30 (2017.01.01 - 2017.11.06)

Parámetros:


Fig.14. Resultados de la simulación de GBPUSD M30 (BollingerBands)

Fig.14. Resultados de la simulación de GBPUSD M30 (BollingerBands)

Fig.14. Resultados de la simulación de GBPUSD M30 (BollingerBands)

Símbolo: NZDUSD

Periodo: M30 (2017.01.01 - 2017.11.07)

Parámetros:


Fig.15. Resultados de la simulación de NZDUSD M30 (BollingerBands)

Fig.15. Resultados de la simulación de NZDUSD M30 (BollingerBands)

Fig.15. Resultados de la simulación de NZDUSD M30 (BollingerBands)

Símbolo: USDCAD

Periodo: M30 (2017.01.01 - 2017.11.07)

Parámetros:


Fig.16. Resultados de la simulación de USDCAD M30 (BollingerBands)

Fig.16. Resultados de la simulación de USDCAD M30 (BollingerBands)

Fig.16. Resultados de la simulación de USDCAD M30 (BollingerBands)

Símbolo: USDCHF

Periodo: M30 (2017.01.01 - 2017.11.07)

Parámetros:


Fig.17. Resultados de la simulación de USDCHF M30 (BollingerBands)

Fig.17. Resultados de la simulación de USDCHF M30 (BollingerBands)

Fig.17. Resultados de la simulación de USDCHF M30 (BollingerBands)

Tras acumular todos los datos de las simulaciones, podemos sacar las siguientes conclusiones.

  • Las mejores parejas para trabajar con este asesor son EURUSD, NZDUSD, AUDUSD. Podemos entender por los parámetros que las señales se procesan más en las parejas mencionadas anteriormente, donde el Take Profit y el Stop Loss se diferencian en no más de tres veces. Naturalmente, el beneficio aquí también es más progresivo.
  • El día de la semana influye indudablemente en el beneficio. El comportamiento de las parejas de divisas es diferente en distintos días de la semana, pero no hemos podido descubrir dependencias absolutas: todo depende de la pareja seleccionada en particular, y también de los ajustes elegidos.

Estrategia basada en el cambio abrupto de la volatilidad

Cambian estos parámetros de simulación:

  • Símbolo: USDJPY
  • Periodo: H1 (2017.01.01 - 2017.11.03)

Para comenzar, comprobaremos la estrategia mencionada más arriba, aquí están sus parámetros: 

  • order_time=8;
  • order_sl=140;
  •  order_tp=70;
  • order_div=50;
  • time_to_del=18000.

Aquí hemos aumentado el stop-loss de 110 a 140, esto ha aumentado un poco la rentabilidad de la estrategia. Los resultados de la simulación se muestran en la figs. 18 y 19, respectivamente:

Fig.12. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad USDJPY H1

Fig.18. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad USDJPY H1

Fig.13. Resultado de la simulación en el gráfico

Fig.19. Resultado de la simulación en el gráfico USDJPY H1

En el gráfico se ve que la estrategia comienza a funcionar más o menos hacia la mitad de la simulación. Pero con un periodo de simulación más largo (aproximadamente desde 2015), la estrategia no trae beneficios en general. Asimismo, según los parámetros dados, la entrada tiene lugar a las 8.00 MOS, eso significa que vuelve a tocar la sesión europea. Este comercio ya podemos llamarlo matinal.

Así que el resultado obtenido no tiene un carácter positivo. Vamos a optimizar con un rango de fechas más amplio, y solo durante el "horario nocturno".

Cambian estos parámetros de simulación:

  • Símbolo: USDJPY
  • Periodo: H1 (2015.01.01 - 2017.11.03)

Parámetros de simulación:


Es decir, el asesor trabaja solo los martes, coloca posiciones a las 4, hora de MOS (sesión asiática), el stop-loss y el take-profit son casi iguales y constituyen 270 y 220 puntos, respectivamente, las órdenes se colocan a una distancia de 130 del precio de entrada. Los resultados de la simulación se muestran en la figs. 20 y 21:

Fig.14. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad USDJPY H1 (2015-2017)

Fig.20. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad USDJPY H1 (2015-2017)

Fig.15. Resultado de la simulación en el gráfico USDJPY H1 (2015-2017)

Fig.21. Resultado de la simulación en el gráfico USDJPY H1 (2015-2017)

En la última simulación en los modos "Cada tick basado en ticks reales" o "OHLC en M1", el resultado no cambia especialmente, por eso se muestra la primera variante (figs. 20 y 21)

Conclusión

Podemos llegar a la conclusión de que el comercio "de noche" (sesión asiática) es posible con beneficios y una reducción relativamente pequeña. Ha mostrado ser especialmente buena durante la simulación la estrategia basada en el indicador Bollinger Bands, tanto en las horas nocturnas, como en el día completo (en este artículo solo se muestran los resultados de la sesión asiática, con un pequeño intervalo de la europea). En el futuro, esperamos seguir trabajando para mejorar esta estrategia, pues parece bastante simple y prometedora.

En cuanto a la estrategia basada en el cambio en la volatilidad, es bastante simple, pero ha mostrado un rendimiento significativamente inferior. Aunque es posible utilizarla como complemento a otras estrategias. También la hemos simulado tanto de día, como en la sesión europea, además, ha demostrado índices bastante aceptables. Demuestra un mayor grado de dependencia del día de la semana que la estrategia basada en el indicador Bollinger Bands, esto lo hemos averiguado durante la simulación con un gran intervalo temporal. El asesor ha resultado un poco saturado, las posibilidades de modernizarlo posteriormente son mínimas.


Archivos:

# Nombre Tipo Descripción
1 BollingerBandsForFlat_v1.01.mq5 Asesor Experto Asesor orientado al comercio en la sesión asiática con mercado plano, basado en las señales del indicador Bollinger Bands
2 TimeBuyOrSell_v1.01.mq5 Asesor Experto Asesor orientado al comercio en el tiempo más volátil


Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/4102

Selección automática de señales prometedoras Selección automática de señales prometedoras
Este artículo está dedicado al estudio de las señales comerciales para MetaTrader 5 con la ejecución automática en las cuentas de los suscriptores. Además, se considera el desarrollo de las herramientas para buscar las señales comerciales prometedoras directamente en el terminal.
Evaluación del riesgo en la secuencia de transacciones con un activo. Continuación Evaluación del riesgo en la secuencia de transacciones con un activo. Continuación
Este artículo desarrolla las ideas propuestas en la parte anterior y continua su análisis. Aquí se describen las cuestiones de la distribución de los beneficios, la modelación y el estudio de las regularidades estadísticas.
Comercio por los niveles de DiNapoli Comercio por los niveles de DiNapoli
En este artículo se considera una de las versiones de la implementación práctica del Asesor Experto para el comercio por los niveles de DiNapoli a través de las herramientas estándar MQL5. Ha sido realizado el testeo de sus resultados, y han sido sacadas conclusiones.
Indicador NRTR y módulos comerciales en su base para el Asistente de MQL5 Indicador NRTR y módulos comerciales en su base para el Asistente de MQL5
En este artículo se describe el indicador NRTR y el sistema comercial creado en su base. Para este propósito, se crea el módulo de las señales comerciales a través de las cuales se crean las estrategias basadas en las combinaciones del NRTR e indicadores comerciales que confirman la tendencia.