Mira cómo descargar robots gratis
¡Búscanos en Facebook!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Librerías

TradeState - interruptor de modo comercial del experto, dependiendo del tiempo - librería para MetaTrader 5

Visualizaciones:
932
Ranking:
(44)
Publicado:
2016.02.04 15:23
Actualizado:
2016.07.05 15:21
tradestate.mqh (5.15 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

¿Ha tenido alguna vez que limitar temporalmente el funcionamiento de su asesor experto? ¿Por ejemplo, cómo hacer que el experto no realice acciones comerciales durante la sesión nocturna? O, si usted comercia en la sección urgente de la Bolsa de Moscú, ¿ha tenido alguna vez que cerrar todas las posiciones antes del cierre del mercado o antes del fin de semana? ¿Y qué ocurre cuando se dan instrucciones más complejas? Por ejemplo, ¿cómo hacer que su expero pueda abrir y cerrar operaciones hasta las 7 de la tarde, y después de las 7 no realice nuevas transacciones? En realidad es posible lograr una configuración así de flexible. Para ello, contará con la ayuda del módulo especial CTradeState.

¿Cómo funciona CTradeState? El módulo retorna uno de los seis estados, descrito con la ayuda de la estructura ENUM_TRADE_STATE:

//+------------------------------------------------------------------+
//| Define el estado comercial del experto                           |
//+------------------------------------------------------------------+
enum ENUM_TRADE_STATE
{
   TRADE_BUY_AND_SELL,              // Se permite comprar y vender.
   TRADE_BUY_ONLY,                  // Se permite solo la compra. La venta está prohibida.
   TRADE_SELL_ONLY,                 // Se permite solo la venta. La compra está prohibida.
   TRADE_STOP,                      // El trading está prohibido. Cerrar de inmediato todas las posiciones. No admitir nuevas señales a la entrada.
   TRADE_WAIT,                      // El control sobre las posiciones abiertas se pierde. Las nuevas señales son ignoradas. Es útil en los momentos en los que salen noticias.
   TRADE_NO_NEW_ENTRY               // Las señales a la entrada se ignoran. Sin embargo, las posiciones ya abiertas se siguen según la lógica comercial. 
};

En su experto, usted deberá ejecutar este o aquel conjunto de acciones, dependiendo de qué modificador precisamente de esta estructura le retorne CTradeState (el valor se retorna con la ayuda del método GetTradeState).

Antes que usar los modos comerciales, hace falta establecer para qué precisamente es necesario llamar al método SetTradeState. El prototipo del método SetTradeState es el siguiente:

//+--------------------------------------------------------------------------+
//| Establece el estado comercial TradeState                                 |
//| INPUT:                                                                   |
//| time_begin  - La hora a partir de la cual entra en funcionamiento        |
//|               el estado comercial.                                       |
//| time_end    - La hora hasta la cual funciona el estado comercial         |
//| day_of_week - Día de la semana al que se hace extensivo                  |
//|               el estado comercial. Se corresponde con los modificadores  |
//|               ENUM_DAY_OF_WEEK o el modificador ALL_DAYS_OF_WEEK         |
//| state       - Estado comercial.                                          |
//| Atención, el componente de la fecha en time_begin y time_end se ignora.  |
//+--------------------------------------------------------------------------+
void CTradeState::SetTradeState(datetime time_begin,datetime time_end, int day_of_week, ENUM_TRADE_STATE state);

Por ejemplo, para que el módulo del estado comercial retorne el modificador TRADE_WAIT (el control sobre las posiciones abiertas se detiene, no se abren nuevas posiciones) en el momento desde las 18:45 hasta las 18:49 inclusive, es necesario llamar SetTradeState con los siguientes parámetros:

TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT);

Usted puede indicar, no solo la hora de comienzo, sino también la de finalización del modo comercial, para el que funciona este modo. Si el modo establecido se debe indicar para todos los días de la semana, es necesario usar el modificador ALL_DAYS_OF_WEEK. Si quiere establecer un modo comercial solo para determinados días de la semana, en la variable day_of_week indique uno de los valores de la enumeración de sistema ENUM_DAY_OF_WEEK.

Para obtener el modo comercial actual, use el método GetTradeState.

En calidad de ejemplo, describiremos la combinación de modos que puede ser útil para comerciar en la sección urgente de la Bolsa de Moscú.

Hora Modo Descripción
10:00 - 10:01 TRADE_WAIT Hora de apertura del mercado. El momento de apertura se caracteriza por la volatilidad y los saltos bruscos del precio. Las acciones comerciales en estos momentos conllevan un gran riesgo, por eso en el primer minuto es mejor abstenerse de comerciar, para lo cual debemos poner el experto en esos momentos en el modo espera.
14:00 - 14:03 TRADE_WAIT Hora de ejecución del clearing intermedio. En este intervalo de tiempo el mercado no funciona, por eso el asesor experto se debe poner en el modo TRADE_WAIT.
18:45 - 18:49 TRADE_WAIT Hora de ejecución del clearing principal. En este momento el mercado también está cerrado y el comercio está prohibido. Existe el modo TRADE_WAIT.
23:50 - 9:59 TRADE_WAIT El mercado está cerrado, el comercio está prohibido. Modo del asesor TRADE_WAIT.
Viernes, desde las 15:00 TRADE_NO_NEW_ENTRY Viernes, último día comercial de la semana. Para no dejar posiciones abiertas en los días festivos, se las deberá cerrar el último día de comercio. Por eso, abrir nuevas posiciones el último día comercial, para luego cerrarlas, no tiene mucho sentido. Para estos menesteres se usa el modo NO_NEW_ENTRY. Cada viernes, a partir de las 15:00, se ignoran todas las nuevas señales a la entrada. Las posiciones existentes solo pueden cerrarse.
Viernes, 23:40-23:50 TRADE_STOP Hora precedente al cierre del mercado. A esta hora, todas las órdenes deberán estar cerradas. El asesor experto, pasando al modo TRADE_STOP a las 23:40, cerrará su posición abierta y pasará al modo espera.
Sábado, domingo. TRADE_WAIT Los fines de semana no se comercia. Debido al traslado de las fiestas, algunos sábados pueden ser laborables. Esos días la bolsa funciona. Se trata de un fenómeto muy poco frecuente, y semejantes días "laborables" deben ser evitados, debido a su baja volatilidad y su vaguedad estadística. El comercio en estos días se deberá prohibir, independientemente de que se trate o no de un día laborable.

 

Ejemplo de uso. Esta combinación de modos se establece con la ayuda de la siguiente secuencia de llamadas a SetTradeState (el ejemplo está en forma de script):

//+------------------------------------------------------------------+
//|                                               TestTradeState.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "http://www.mql5.com"
#property version   "1.00"
#include <Strategy\TradeState.mqh>

CTradeState TradeState(TRADE_BUY_AND_SELL);  // Establecemos el modo por defecto Buy And Sell
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TradeState.SetTradeState(D'15:00', D'23:39', FRIDAY, TRADE_NO_NEW_ENTRY);
   TradeState.SetTradeState(D'10:00', D'10:01', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'14:00', D'14:03', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'23:50', D'23:59', ALL_DAYS_OF_WEEK, TRADE_STOP);
   TradeState.SetTradeState(D'0:00',  D'9:59',  ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'23:40', D'23:49', FRIDAY, TRADE_STOP);
   TradeState.SetTradeState(D'00:00', D'23:59', SATURDAY, TRADE_WAIT);
   TradeState.SetTradeState(D'00:00', D'23:59', SUNDAY, TRADE_WAIT);
   
   printf("10:00 - " + EnumToString(TradeState.GetTradeState(D'10:00')));
   printf("14:01 - " + EnumToString(TradeState.GetTradeState(D'14:01')));
   printf("18:50 - " + EnumToString(TradeState.GetTradeState(D'18:50')));
   printf("23:50 - " + EnumToString(TradeState.GetTradeState(D'23:51')));
   printf("Friday, > 15:00 - " + EnumToString(TradeState.GetTradeState(D'2015.11.27 15:00')));
   printf("Saturday - " + EnumToString(TradeState.GetTradeState(D'2015.11.28')));
   printf("Sunday - " + EnumToString(TradeState.GetTradeState(D'2015.11.29')));
   printf("Default State - " + EnumToString(TradeState.GetTradeState(D'11:40')));
}
//+------------------------------------------------------------------+

A modo de comprobación, en este script se realiza la impresión del modo que corresponde a uno u otro intervalo comercial.

Es importante comprender que el módulo propuesto es solo un recurso auxiliar. La propia decisión sobre si detener el comercio (o cerrar todas las posiciones) la debe tomar el propio experto. Sin embargo, con la ayuda de este módulo, es bastante sencillo crear diferentes zonas temporales y modos comerciales para cualquier experto.

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/14335

Interés (sentiment) Interés (sentiment)

Robot que comercia con el interés abierto del mercado.

CIsSession - clase para establecer los intervalos temporales (sesiones) CIsSession - clase para establecer los intervalos temporales (sesiones)

Esta sencilla clase se puede usar para configurar, por ejemplo, los diapasones comerciales o para prohibir/permitir determinadas acciones durante cierto tiempo o en ciertos días de la semana.

PA_Oscillator_HTF PA_Oscillator_HTF

Indicador PA_Oscillator con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.

LinearMomentum_HTF LinearMomentum_HTF

Indicador LinearMomentum con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.