
El comercio nocturno en la sesión asiática: cómo mantener los beneficios
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
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
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
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
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
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).
- 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.
- 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.
- 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.
- 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.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.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 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
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)
Símbolo: GBPUSD
Periodo: M30 (2017.01.01 - 2017.11.06)
Parámetros:
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)
Símbolo: USDCAD
Periodo: M30 (2017.01.01 - 2017.11.07)
Parámetros:
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)
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.18. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad USDJPY H1
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.20. Resultado de la simulación de la estrategia de cambio brusco de la volatilidad 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





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso