Trading Window and Spread Guard
- Utilitários
-
Kazuma Uezono
MQL5 / MQL4 / Pine Script v6 developer and active trader.
Seller on the MQL5 Market (indicators for MT4/MT5).
Services:
- TradingView Pine Script to MT5/MT4 conversion (bar-by-bar matching, with tester report)
- MT4 to MT5 migration - Versão: 1.1
- Ativações: 5
Trading Window and Spread Guard é um utilitário para MetaTrader 5 que avisa os seus próprios Expert Advisors quando não abrir novas operações. Você define até cinco janelas de parada (dia da semana e horário; por exemplo, o rollover diário, as horas noturnas de pouca liquidez ou as horas em que os spreads da sua corretora ficam largos) e um limite de spread. Enquanto uma janela está ativa, ou enquanto o spread de um símbolo está acima do seu limite, o guard levanta uma flag que os seus EAs podem ler. Opcionalmente, também pode fechar posições abertas enquanto as novas operações estavam bloqueadas.
É uma ferramenta para pausar o trading, não uma estratégia de trading. Não procura bons momentos para operar, não dá sinais de compra ou venda e nunca abre uma posição nem coloca uma ordem numa conta real ou demo. Não evita perdas: só pode fazer com que os seus EAs pulem novas entradas, ou fechar uma nova posição depois de aberta. Quais horários evitar, e se e como operar, continua sendo decisão sua.
Com as configurações padrão nada fica ativo: sem janelas, limite de spread DESLIGADO, fechamento DESLIGADO. Até você preencher os parâmetros, o guard apenas mostra o seu painel.
Importante: os seus EAs precisam ler a flag. Um EA que não verifica a flag continua operando como antes. A verificação são poucas linhas de código (abaixo). Para um EA que você não pode alterar, só funciona a opção "Fechar posições abertas durante o bloqueio", e ela fecha a posição depois de aberta, o que custa spread e comissão.
Recursos
- Até 5 janelas de parada. Formatos: 12:00-12:30 (todos os dias), Mon-Fri 23:50-01:15 (começa em cada dia listado e pode passar da meia-noite), Mon,Wed,Fri 08:00-08:30, Fri 21:00-Mon 01:00 (um único intervalo entre dias). Dias em inglês (Mon ou Monday, sem diferença entre maiúsculas e minúsculas) ou em japonês; All = todos os dias. O fim pode ser 24:00. Janelas que se tocam ou se sobrepõem são unidas.
- Horários das janelas no horário do servidor (padrão) ou no horário deste computador.
- Limite de spread em pontos: um valor para todos os símbolos, mais valores opcionais por símbolo (por exemplo GOLD=50,US30=300).
- Símbolos: o símbolo do gráfico (padrão), uma lista, ou * = todos os símbolos da Observação do Mercado (até 100).
- Flags para os seus EAs como variáveis globais do terminal, com funções de leitura prontas (TWG_Reader.mqh).
- Opcional: fechar posições abertas durante o bloqueio, apenas para os símbolos e magic numbers que você escolher. Posições que já existiam quando o guard começou nunca são tocadas.
- Painel: estado (OK ou BLOCKED e o motivo), próxima janela com contagem regressiva, as suas janelas, spread e limite, configurações de fechamento, nomes das flags e a última mensagem. Inglês ou japonês (automático pelo idioma do terminal). Botão de recolher.
- Alertas pop-up e notificações push opcionais quando uma parada começa ou termina, um spread fica largo demais ou uma posição é fechada.
Parâmetros principais
- Stop windows: base de horário das janelas (horário do servidor / horário do computador), Window 1 a Window 5 (vazio = DESLIGADO).
- Spread limit: LIGADO/DESLIGADO (padrão DESLIGADO), spread máximo em pontos (padrão 30), máximo por símbolo.
- Symbols and positions: símbolos (vazio = este gráfico, * = todos da Observação do Mercado, ou uma lista), fechar posições abertas durante o bloqueio (padrão DESLIGADO), fechar apenas estes magic numbers (vazio = todos, 0 = operações manuais).
- Flags: prefixo do nome das variáveis globais (padrão "TWG").
- Alerts (pop-up, push), Panel (mostrar, idioma, canto, deslocamentos, tamanho da fonte), slippage máximo ao fechar, demonstração no testador de estratégia.
- 23 parâmetros em 7 grupos.
Como funciona
- O guard verifica a cada 250 ms e grava as flags cerca de uma vez por segundo, então o seu EA vê uma mudança cerca de 1 a 2 segundos depois.
- Flags (variáveis globais do terminal; os valores são horários UTC em segundos; "TWG" é o prefixo padrão):
- TWG.TIME: fim da janela de parada atual, 0 fora das janelas.
- TWG.SPR.<símbolo> (por exemplo TWG.SPR.EURUSD): maior que o horário atual enquanto o spread desse símbolo está acima do limite. Uma flag por símbolo monitorado.
- TWG.NEXT: início da próxima janela de parada. TWG.HB: última atualização (mostra que o guard está funcionando).
- Uma flag está LIGADA enquanto o seu valor for maior que TimeGMT().
- Verificação básica para o seu EA (mesma lógica do TWG_Reader.mqh com o prefixo padrão):
bool GuardBlocks(const string sym)
{
if(MQLInfoInteger(MQL_TESTER)) return false;
double now = (double)TimeGMT();
if(GlobalVariableGet("TWG.HB") < now - 30) return false; // guard not running
return GlobalVariableGet("TWG.TIME") > now || GlobalVariableGet("TWG.SPR." + sym) > now;
}
Antes de cada nova entrada: if(GuardBlocks(_Symbol)) return;
- O TWG_Reader.mqh acrescenta TWG_IsBlocked, TWG_TimeBlocked, TWG_SpreadBlocked, TWG_SecondsLeft e TWG_GuardRunning. O download do Market contém apenas o EA; o texto completo deste arquivo está publicado nos comentários deste produto. No testador de estratégia essas funções sempre respondem "não bloqueado", então os seus backtests não mudam.
- O dia da semana é o dia em que a janela começa. "Mon-Fri 23:50-01:15" cria cinco janelas que começam na segunda 23:50 … sexta 23:50 e terminam às 01:15 do dia seguinte. Não cobre a segunda 00:00–01:15, porque essa parte começaria no domingo. Para cobrir o fim de semana e a manhã de segunda, acrescente uma segunda janela como Fri 21:00-Mon 01:15. (Com Fri 21:00-Mon 01:00, a segunda 01:00–01:15 fica aberta.)
- "Aberta durante o bloqueio" significa: o horário de abertura da posição está dentro de uma janela de parada, ou o spread do seu símbolo estava acima do limite naquele momento (verificado para posições com até 10 minutos).
- O fechamento é enviado assim que o novo negócio (deal) aparece no terminal.
- Você pode executar o guard em vários gráficos com o mesmo prefixo (por exemplo, para monitorar símbolos diferentes). As flags então mantêm o valor mais longo. Use prefixos diferentes se grupos de EAs precisarem de regras diferentes.
Notas e limitações
- Não é garantia. O guard não bloqueia ordens por si só. Apenas os EAs que verificam a flag pulam novas entradas.
- Remover o último guard suspende a parada. Quando você o remove ou fecha o seu gráfico, ele apaga as suas flags imediatamente. Se o terminal parar inesperadamente, as funções de leitura consideram o guard parado após 30 segundos. Por padrão, elas então permitem operar. Se o seu EA deve esperar quando o guard não está funcionando, chame TWG_IsBlocked(_Symbol, "TWG", true) (blockIfGuardStopped = true).
- As flags atrasam cerca de 1 a 2 segundos. Uma ordem enviada no primeiro segundo de uma janela ou de um pico de spread ainda pode passar. Picos de spread mais curtos que uma verificação podem passar despercebidos.
- Ordens pendentes não são excluídas nem alteradas. Uma ordem pendente executada durante uma parada abre uma nova posição, que só é fechada se a opção de fechamento estiver LIGADA e a posição estiver no escopo.
- Numa conta netting, o volume acrescentado a uma posição aberta antes não é uma nova posição e não é fechado.
- Com o filtro de magic numbers vazio, a opção de fechamento também fecha operações que você abre manualmente dentro do escopo (magic 0 = operações manuais). Cada fechamento custa spread e comissão e pode terminar em perda. O guard não pode impedir outro EA de enviar ordens; se um EA continuar abrindo operações durante uma parada, cada uma é fechada.
- As flags de spread existem apenas para os símbolos monitorados. Se o seu EA opera outros símbolos, adicione-os à lista ou use *.
- Os horários das janelas seguem o relógio escolhido. O horário do servidor muda com o horário de verão da sua corretora; o horário do computador segue este PC.
- As variáveis globais pertencem a um único terminal. Execute o guard no mesmo terminal MetaTrader 5 que os seus EAs.
- O guard só funciona enquanto o MetaTrader 5 está aberto e conectado. Para fechar também é preciso Algo Trading LIGADO (botão da barra de ferramentas) e permitido nas configurações do EA.
- Testador de estratégia: as flags ficam apenas na memória. Com o parâmetro "Tester only: demo window and small demo positions" LIGADO (padrão), o guard abre pequenas posições de demonstração (lote mínimo, magic 73190): uma antes de uma janela, que o guard deixa aberta, e uma dentro dela, que o guard fecha na hora (a demonstração limpa as suas posições alguns minutos depois). Se nenhuma janela estiver definida, usa uma janela de demonstração (30 minutos ou 2 barras, no máximo uma vez por dia). O relatório do testador mostra apenas esta demonstração e não é um resultado de trading; pode mostrar uma pequena perda. Com depósitos muito pequenos (por exemplo 10 USD) pode não haver operações de demonstração. A demonstração nunca é executada numa conta real ou demo.
Compatibilidade e suporte
- Apenas MetaTrader 5 (contas hedging e netting). A versão para MetaTrader 4 é vendida separadamente. Coloque-o num gráfico; acrescente mais gráficos só se precisar.
- Sem DLLs, sem internet, sem servidor externo.
- Teste primeiro todas as configurações numa conta demo.
- Suporte por mensagens do MQL5, resposta em até 3 dias úteis: instalação, configurações, relatos de erros e como chamar as funções de leitura. Não podemos aconselhar quais horários ou spreads evitar, dar opiniões de mercado ou decisões de trading, nem alterar o seu EA por você.
- Nenhum resultado do seu trading é prometido ou insinuado.
