Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

TradeState - o modo de negociação do EA se altera dependendo do tempo - biblioteca para MetaTrader 5

Visualizações:
1589
Avaliação:
(44)
Publicado:
2016.02.05 11:04
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Você já restringiu as operações do seu EA dependendo do tempo? Por exemplo, como que uma pessoa faz para o EA não realizar nenhuma atividade de negociação durante a sessão noturna? Ou, se você negociar na seção de derivativos da Bolsa de Moscou, você já fechou todas as posições antes do fechamento do mercado antes do fim de semana? Que tal estruturas mais complexas? Por exemplo, como é que uma pessoa faz o EA ser capaz de abrir e fechar posições até as 19h00 e não realizar nenhuma negociação nova depois das 19h00? Na verdade, é possível obter tal configuração flexível. O módulo especial CTradeState irá lhe ajudar com isso.

Como a CTradeState funciona? O módulo retorna um dos seis estados, definidos usando a estrutura ENUM_TRADE_STATE:

//+------------------------------------------------------------------+
//| Determina o estado da negociação do EA                           |
//+------------------------------------------------------------------+
enum ENUM_TRADE_STATE
{
   TRADE_BUY_AND_SELL,              // Compra e venda é aceito.
   TRADE_BUY_ONLY,                  // Apenas a compra é permitida. A venda não é permitida.
   TRADE_SELL_ONLY,                 // Apenas a venda é permitida. A compra não é permitida.
   TRADE_STOP,                      // A negociação não é permitida. Fecha todas as posições imediatamente. Não aceita novos sinais de entrada.
   TRADE_WAIT,                      // O controle sobre as posições abertas é perdido. Novos sinais são ignorados. Útil durante os comunicados de imprensa.
   TRADE_NO_NEW_ENTRY               // Os sinais de entrada são ignorados. No entanto, as posições abertas são mantidas de acordo com a lógica de negociação. 
};

Em seu Expert Advisor você deve executar um conjunto de ações, dependendo de qual modificador específico a partir da estrutura dada a CTradeState retorna (o valor é devolvido utilizando o método GetTradeState).

Antes de utilizar os modos de trade, eles devem ser definidos, para qual método o SetTradeState deve chamar. O protótipo do método SetTradeState é como se segue:

//+-----------------------------------------------------------------------+
//| Define o estado da negociação de TradeState                           |
//| ENTRADA:                                                              |
//| time_begin  - Tempo, a partir de qual estado de negociação ele inicia |
//|               seu funcionamento.                                      |
//| time_end    - Tempo, até que estado do trade que ele funciona         |
//| day_of_week - Dia da semana, para que a definição do estado da        |
//|               negociação é aplicado. Corresponde aos modificadores    |
//|               ENUM_DAY_OF_WEEK ou o modificador ALL_DAYS_OF_WEEK      |
//| state       - O estado do trade.                                      |
//| Atenção, o componente de data em time_begin e time_end é ignorado.    |
//+-----------------------------------------------------------------------+
void CTradeState::SetTradeState(datetime time_begin,datetime time_end, int day_of_week, ENUM_TRADE_STATE state);

Por exemplo, para o módulo de estado da negociação retornar o modificador TRADE_WAIT (controle sobre as posições em aberto é interrompido, novas posições não são bertas) no horário das 18:45 até 18:49, é necessário chamar o SetTradeState com os seguintes parâmetros:

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

É possível especificar não só o horário de início e encerramento modo de negociação, mas também o dia da semana, para o qual este modo está ativo. Se o modo de negociação precisa ser específico para cada dia da semana, o modificador ALL_DAYS_OF_WEEK modifier necessita ser usado. Se o modo de negociação precisa ser específico para um certo dia da semana, especifique um dos valores da enumeração do sistema ENUM_DAY_OF_WEEK na variável day_of_week.

A fim de obter o modo de negociação atual, use o método GetTradeState.

Como um exemplo, considere uma combinação de modos, que pode ser útil se utilizado em uma negociação na seção de derivativos da Bolsa de Moscou:

Hora Modo Descrição
10:00 - 10:01 TRADE_WAIT Tempo de abertura do mercado. O momento de abertura é caracterizado por uma alta volatilidade e por picos de preços. As atividades de negociação nestes momentos estão associados com um risco elevado, por isso, é melhor abster-se da negociação nos primeiros minutos, para isso, o EA tem de ser definido para o modo de espera nesse período de tempo.
14:00 - 14:03 TRADE_WAIT Horário de Clearing secundário. Neste intervalo de tempo, o mercado também não funciona, por isso o EA deve ser definido para o modo TRADE_WAIT também.
18:45 - 18:49 TRADE_WAIT Horário do Clearing principal. Neste momento, o mercado também está fechado, e a negociação desativada. O modo TRADE_WAIT está ativo.
23:50 - 9:59 TRADE_WAIT O mercado está fechado, a negociação está desativada. O modo do EA é TRADE_WAIT.
Sexta-feira, a partir das 15:00 TRADE_NO_NEW_ENTRY Sexta-feira - o último dia de negociação da semana. A fim de não deixar as posições em aberto no fim de semana, elas precisam ser fechadas no último dia de negociação. Portanto, não há razão em abrir novas posições no último dia de negociação, apenas em fechá-las algumas horas mais tarde. Por estas mesmas razões é que o modo NO_NEW_ENTRY é usado. Toda sexta-feira, a partir das 15:00, os novos sinais de entrada são ignorados. As posições existentes só podem ser fechadas.
Sexta-feira, 23:40 - 23:50 TRADE_STOP O horário antes do fechamento do mercado. Este é o momento quando todas as posições devem ser fechadas. O EA muda para o modo TRADE_STOP às 23:40, fecha sua posição em aberto e muda para o modo de espera.
Sábado, Domingo TRADE_WAIT A negociação não é realizada durante o fim de semana. Devido à transferência de feriados, alguns sábados podem ser dias de trabalho. A Bolsa está trabalhando em tais dias. Esta é uma ocorrência muito rara, e tais dias de "trabalho" devem ser evitados devido à baixa volatilidade e a incerteza estatística. A negociação nestes dias deve ser desativada, independentemente se é um dia de trabalho ou não.

 

Exemplo de uso. Esta combinação de modos é definida utilizando a seguinte sequência de chamadas do SetTradeState (exemplo como um 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);  // Define o modo padrão para Compra e Venda
//+------------------------------------------------------------------+
//| Script da função de início do programa                           |
//+------------------------------------------------------------------+
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')));
}
//+------------------------------------------------------------------+

Como um controle, este script implementa uma impressão de modo que corresponde ao tempo de negociação específica.

É importante perceber que o módulo proposto é apenas uma ferramenta auxiliar. A decisão de interromper a negociação (e para fechar todas as posições) deve ser feita pelo próprio Expert. No entanto, é bem fácil criar diferentes zonas de tempo e modos de negociação para qualquer Expert usando este módulo.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/14335

Sentimento Sentimento

Robô que negocia o sentimento de abertura do mercado.

CIsSession - classe para definir os intervalos de tempo (sessões) CIsSession - classe para definir os intervalos de tempo (sessões)

Esta classe simples pode ser usada para ajustar, por exemplo, intervalos de negociação, ou habilitar/desabilitar certas ações pelo tempo ou dia da semana.

PA_Oscillator_HTF PA_Oscillator_HTF

O PA_Oscillator com a opção de seleção do tempo gráfico disponível nos parâmetros de entrada.

LinearMomentum_HTF LinearMomentum_HTF

O LinearMomentum com a opção de seleção do tempo gráfico disponível nos parâmetros de entrada.