O Gold Fractal Breakout EA é um Expert Advisor do MetaTrader 5 que busca máximas e mínimas de oscilação confirmadas e, em seguida, tenta colocar ordens Buy Stop e Sell Stop próximas a esses níveis. Sua detecção de estrutura utiliza barras vizinhas configuráveis, em vez do indicador iFractals integrado. As ordens e posições são identificadas pelo símbolo atual e pelo número mágico configurado.
A estratégia combina estrutura de preços, entradas pendentes e gerenciamento de saída baseado em porcentagem. Ela não desenha setas de entrada, marcadores fractais ou painéis de negociação no gráfico. A ilustração abaixo explica o conceito de colocação de ordens; trata-se de uma simulação e não representa negociações históricas, uma captura de tela do terminal ou desempenho medido.

O nome do produto sugere ouro, portanto, um símbolo de ouro específico da corretora, como XAUUSD, é o ponto de partida pretendido para avaliação. No entanto, a fonte negocia o símbolo do gráfico ao qual está vinculada e não contém nenhuma restrição exclusiva ao ouro. Nenhuma evidência fornecida de backtest ou forward-test estabelece um símbolo, período de tempo ou conjunto de parâmetros lucrativos ideais.
O período do gráfico é fixado em H1 pela constante interna InpFractalTF. Não se trata de uma entrada editável. Mesmo quando o período do gráfico ou do Testador de Estratégias é D1, o CopyRates lê as barras H1. As varreduras são executadas no primeiro tick disponível após o intervalo configurado, cujo padrão é de 15 minutos; o gerenciamento de posições é executado a cada tick. H1, portanto, descreve os dados padrão do sinal, e não um período de negociação ideal comprovado.
O IsSwingHigh exige que a máxima candidata seja estritamente superior a todas as máximas vizinhas anteriores e posteriores selecionadas; o IsSwingLow exige a mínima correspondente que seja estritamente inferior. Com as configurações padrão, cinco barras são verificadas de cada lado. O FindSwing começa além das cinco barras fechadas mais recentes, excluindo a barra atual da janela de confirmação, e retorna o nível qualificado mais recente. Se o histórico necessário não estiver disponível, nenhum nível é retornado.
Para uma configuração de compra, o Ask deve estar abaixo da alta de oscilação em mais do que a margem mínima configurada. Para uma configuração de venda, o Bid deve estar acima da mínima de oscilação em mais do que essa margem. O EA então aplica seu deslocamento de entrada, verifica se há uma ordem pendente na mesma direção dentro da distância duplicada e confirma se a entrada pendente está além da distância mínima de stop da corretora em relação à cotação atual.
Entrada de compra = alta de oscilação + alta de oscilação × deslocamento de compra / 100. Entrada de venda = baixa de oscilação − baixa de oscilação × deslocamento de venda / 100. Ambos os deslocamentos padrão são de −0,10%, portanto, a entrada de compra fica abaixo da alta e a entrada de venda fica acima da baixa. Esses valores padrão antecipam o limite da oscilação, em vez de exigirem uma quebra completa além dele. A ordem só é enviada se seu preço for válido para uma ordem de stop em relação ao mercado atual.
Os trechos a seguir foram extraídos do arquivo MQ5, que pode ser baixado atualmente nesta entrada do CodeBase. Eles explicam partes selecionadas da implementação e não são programas independentes.
const ENUM_TIMEFRAMES InpFractalTF = PERIOD_H1; // Intervalo de tempo dos dados H1 fixo, independente do período do gráfico ou do testador double FindSwing(bool high) { //--- Carregar as barras de preço para a busca de oscilações MqlRates r[]; ArraySetAsSeries(r,true); int need=InpMaxSearchBars+InpFractalLeft+InpFractalRight+5; if(CopyRates(_Symbol,InpFractalTF,0,need,r)<need) return 0; //--- Ignorar candidatos não confirmados e pesquisar do mais recente ao mais antigo int first=InpFractalRight+1; int last=MathMin(InpMaxSearchBars,ArraySize(r)-InpFractalLeft-1); for(int i=first;i<=last;i++) if(high ? IsSwingHigh(r,i) : IsSwingLow(r,i)) return high?r[i].high:r[i].low; return 0; }
A matriz de séries usa o índice 0 para a barra atual. Começar em InpFractalRight + 1 mantém fechadas todas as barras de confirmação mais recentes. Com a contagem padrão de cinco à direita, o primeiro candidato é o índice 6 e suas barras de comparação mais recentes são os índices 5 a 1. O CopyRates solicita explicitamente dados do H1, independentemente do período do gráfico vinculado.
bool IsSwingHigh(const MqlRates &r[],int i) { //--- Comparar o candidato com as barras anteriores for(int k=1;k<=InpFractalLeft;k++) if(r[i].high<=r[i+k].high) return false; //--- Comparar o candidato com as barras mais recentes for(int k=1;k<=InpFractalRight;k++) if(r[i].high<=r[i-k].high) return false; return true; }
Um candidato é rejeitado quando qualquer alta vizinha selecionada for igual ou superior a ele. IsSwingLow aplica a comparação inversa correspondente às baixas. Essas funções identificam a estrutura de preços confirmada; elas não acionam o indicador iFractals integrado.
double entry=buy?swing+Pct(swing,InpBuyEntryOffsetPct):swing-Pct(swing,InpSellEntryOffsetPct); entry=N(entry); if(SimilarPending(type,entry)) return; //--- Calcular o stop loss e o take profit iniciais double sl=buy?entry-Pct(entry,InpStopLossPct):entry+Pct(entry,InpStopLossPct); double tp=buy?entry+Pct(entry,InpTakeProfitPct):entry-Pct(entry,InpTakeProfitPct); sl=N(sl); tp=N(tp);
Este trecho é proveniente da função PlaceBreakout; os parâmetros buy, swing e type são definidos anteriormente nessa função. Pct calcula uma porcentagem de seu primeiro argumento, e N alinha os preços à grade de ticks do símbolo. Antes da normalização, uma alta de swing de 3.000 com um deslocamento de compra de -0,10% resulta em uma entrada de 2.997; uma baixa de swing de 3.000 com um deslocamento de venda de -0,10% resulta em uma entrada de 3.003. Verificações subsequentes de distância da corretora, volume, sessão e margem ainda podem impedir o envio da ordem.
O modo de lote fixo normaliza o InpFixedLots para o mínimo, o máximo e o passo de volume atuais do símbolo. O modo de porcentagem de risco estima o volume da ordem a partir do patrimônio líquido atual da conta, da porcentagem de risco configurada, da distância entre a entrada e o stop, e do tamanho e valor do tick do símbolo armazenados em cache na inicialização. Ambos os modos limitam o volume ao mínimo e ao máximo do símbolo e arredondam para baixo para o passo de volume, utilizando a precisão decimal derivada do passo. Valores abaixo do mínimo são elevados ao mínimo, o que pode aumentar a exposição acima do tamanho solicitado ou da estimativa de risco. Distâncias inválidas ou propriedades de tick armazenadas em cache fazem com que o sistema recorra a lotes fixos normalizados. Antes do envio, as posições na mesma direção e as ordens pendentes para todo o símbolo são contabilizadas em relação ao SYMBOL_VOLUME_LIMIT, incluindo negociações com outros números mágicos; capacidade restante insuficiente impede uma nova ordem.
O stop loss e o take profit iniciais são calculados como porcentagens do preço de entrada pendente. A cada tick, o movimento favorável é medido a partir do preço de abertura da posição, utilizando o Bid para compras e o Ask para vendas. No gatilho de ponto de equilíbrio, o stop é movido em direção a uma pequena garantia de lucro baseada no preço. As atualizações do trailing aplicam-se apenas enquanto o movimento favorável estiver entre o gatilho do trailing e a porcentagem máxima de trailing.
No limiar de recuperação de perda, o EA move o take profit para uma perda menor em relação ao preço de abertura. Isso busca uma saída caso o preço se recupere posteriormente em direção a essa meta; não fecha a posição imediatamente nem garante a recuperação. Por exemplo, a meta padrão de recuperação para compra é 0,15% abaixo do preço de entrada após um movimento adverso de pelo menos 1,00%. A meta atualizada não é automaticamente restaurada para o take profit original quando a condição de perda termina.
Todas as 25 entradas configuráveis estão listadas abaixo com seus valores padrão de fábrica. Exceto por InpRiskPercent, as configurações percentuais descrevem distâncias de preço ou movimento de preço, e não retornos da conta. InpDuplicatePoints utiliza pontos do símbolo em vez de um tamanho universal de pip. A distância do trailing é baseada na cotação atual; as outras porcentagens de saída descritas aqui são baseadas no preço de entrada ou de abertura.
| Parâmetro | Padrão | Significado e interpretação |
|---|---|---|
| InpMagic | 900009 | Identificador usado em conjunto com o símbolo do gráfico para selecionar as ordens e posições deste EA. |
| InpComment | “Estratégia GoldX9 9” | Texto anexado às ordens enviadas; a filtragem por propriedade utiliza o símbolo e o número mágico. |
| InpLotMode | LOT_FIXED | LOT_FIXED utiliza volume fixo; LOT_RISK_PERCENT utiliza dimensionamento de risco com base no patrimônio líquido. |
| InpFixedLots | 0,01 | Volume solicitado no modo fixo, normalizado em relação ao mínimo/máximo/incremento do símbolo; também serve como valor de fallback normalizado para propriedades inválidas de dimensionamento de risco. |
| InpRiskPercent | 0,50 | Risco estimado sobre o patrimônio líquido por ordem; não é um limite garantido de perda realizada. |
| InpMaxPending | 3 | Ordens pendentes com o mesmo símbolo e número mágico, contadas separadamente para cada direção. |
| InpMaxPositions | 10 | Limite secundário de contagem de posições; qualquer posição no símbolo já bloqueia novas entradas e aciona o cancelamento das ordens pendentes detidas. |
| InpPendingExpiryHours | 15 | Carimbo de data/hora calculado a partir deste valor; os envios ainda utilizam GTC, portanto, a expiração temporizada não está implementada. |
| InpDuplicatePoints | 100 | Uma entrada pendente do mesmo tipo a essa distância ou dentro dela impede o envio. |
| InpRescanMinutes | 15 | Tempo mínimo entre varreduras de entradas; as varreduras exigem a chegada de um tick. |
| InpFractalLeft | 5 | Número de barras vizinhas mais antigas na comparação estrita de oscilações. |
| InpFractalRight | 5 | Número de barras vizinhas mais recentes e fechadas necessárias para confirmar uma oscilação. |
| InpMaxSearchBars | 200 | Índice máximo da série candidata examinada; barras adicionais são carregadas para comparações. |
| InpMinFractalClearancePct | 0,02 | Diferencial de oferta abaixo de uma alta ou diferencial de compra acima de uma baixa, expresso como porcentagem da oscilação. |
| InpBuyEntryOffsetPct | -0,10 | Somado à máxima da oscilação; um valor padrão negativo coloca a entrada abaixo da máxima. |
| InpSellEntryOffsetPct | -0,10 | Subtraído da mínima do swing; um valor padrão negativo posiciona a entrada acima da mínima. |
| InpStopLossPct | 2,00 | Distância inicial do stop em relação ao preço de entrada pendente. |
| InpTakeProfitPct | 1,00 | Distância inicial da meta em relação ao preço de entrada pendente. |
| InpTrailTriggerPct | 0,20 | Movimento favorável mínimo em relação ao preço de abertura para atualizações do trailing. |
| InpTrailDistancePct | 0,20 | Distância do stop calculada como porcentagem do preço de compra ou venda atual. |
| InpMaxTrailPct | 1,00 | Limite superior de movimento favorável para atualizações do trailing; não é um teto para o lucro. |
| InpSalvageTriggerPct | 1,00 | Movimento adverso em relação ao preço de abertura que ativa a meta de recuperação. |
| InpSalvageExitPct | 0,15 | Distância da meta de perda em relação ao preço de abertura; não fecha imediatamente. |
| InpBreakEvenTriggerPct | 0,10 | Variação favorável em relação ao preço de abertura que ativa o bloqueio de lucro. |
| InpBreakEvenLockPct | 0,025 | Lucro garantido em relação ao preço de abertura, antes dos custos. |
A única inclusão é <Trade/Trade.mqh>, a interface de negociação da Biblioteca Padrão do MetaTrader 5. Seu objeto CTrade, trade, envia ordens pendentes, atribui o número mágico do expert, solicita modificações de posição e fornece descrições dos resultados das negociações. Ele não é utilizado para detecção de oscilações nem para cálculo do tamanho do lote. Não há referência a nenhum indicador personalizado, DLL externa, serviço web ou include personalizado adicional.
OnInit armazena em cache o tamanho do ponto do símbolo, os dígitos, o tamanho do tick e o valor do tick, além de verificar quatro entradas de contagem positiva. OnTick cancela as entradas pendentes restantes quando existe uma posição no símbolo, analisa a margem pendente, gerencia posições e limita as varreduras de entrada apenas quando não há posição no símbolo. OnTradeTransaction também aciona o cancelamento de ordens pendentes após uma negociação. Pct e N lidam com distâncias percentuais e normalização decimal; OurOrder e OurPosition filtram a propriedade; CountPositions e CountPending impõem limites de tempo de varredura; FindSwing e os auxiliares de oscilação identificam a estrutura; SimilarPending, LotsForRisk, PlaceBreakout e ManagePositions implementam verificações de duplicatas, dimensionamento, envio e saídas.
As variáveis globais internas são trade (a interface de negociação), g_last_scan (o tempo da última varredura), g_point (tamanho do ponto do símbolo), g_digits (casa decimal do preço), g_tick_size (incremento do tamanho do tick) e g_tick_value (valor do tick reportado). InpFractalTF é uma constante interna fixada em PERIOD_H1. Essas variáveis internas e a constante de intervalo de tempo não são entradas do usuário. O EA utiliza APIs integradas do terminal para preços, histórico, saldo da conta, ordens e posições.
InpPendingExpiryHours é usado para calcular um carimbo de data/hora de vencimento, mas as chamadas de ordem utilizam explicitamente ORDER_TIME_GTC. O código atual, portanto, não implementa o modo de vencimento baseado em horas anunciado. A limpeza orientada pela margem pode excluir as ordens pendentes deste EA quando sua margem de ativação estimada exceder o orçamento de margem livre armazenado em buffer. Isso não é expiração baseada em horas. As entradas pendentes próprias são canceladas quando uma posição aberta é detectada no símbolo. Uma nova oscilação, por si só, não cancela as ordens existentes.
Qualquer posição aberta no símbolo atual agora bloqueia novos envios de ordens pendentes, independentemente do número mágico. Em um evento de negociação e nos ticks subsequentes, o EA tenta cancelar suas ordens pendentes restantes nesse símbolo. Ordens pertencentes a outros EAs não são canceladas. A exclusão pode ser adiada por uma zona de congelamento ou sessão fechada; o cancelamento do lado do cliente não é uma garantia OCO atômica do lado do servidor. O InpMaxPositions permanece como uma verificação de contagem secundária, mas não autoriza entradas adicionais enquanto houver uma posição aberta. A porcentagem de risco é calculada por ordem proposta, e não como um limite agregado da carteira. Os requisitos de volume mínimo da corretora, o volume fixo de fallback, os preços de execução e os custos de negociação podem fazer com que a exposição real difira da estimativa. A fonte não contém filtro de spread ou de risco agregado de stop-loss. Ela verifica as sessões de negociação da corretora antes do envio da ordem e da modificação da posição, estima a margem de ativação independente para todas as ordens pendentes da conta e reserva 20% da margem livre atual como um buffer. Se o volume normalizado solicitado não couber no orçamento de margem restante reservado como reserva, a ordem inteira é ignorada e o motivo é registrado. O volume não é reduzido para se adequar ao orçamento de margem. Ordens opostas não recebem nenhum alívio de margem por compensação presumida.
Os preços são arredondados para a grade de tamanho de tick do símbolo armazenada em cache e, em seguida, normalizados para os dígitos do símbolo. Tanto os volumes fixos quanto os baseados em risco são normalizados de acordo com as especificações de volume do símbolo. As solicitações de modificação de saída verificam as zonas de congelamento de SL/TP existentes e as distâncias propostas de stop/congelamento, além de relatar os resultados rejeitados pelo servidor. As tentativas de modificação são limitadas a uma vez a cada cinco segundos por ciclo de gerenciamento. O EA também verifica previamente as solicitações pendentes usando o OrderCheck antes do envio. O envio verifica tanto o valor de retorno do CTrade quanto o código de resultado do servidor. As falhas registram o volume normalizado solicitado e o mínimo, o máximo, o passo e o limite direcional do símbolo. A inicialização também registra essas especificações.
Na inicialização, o código-fonte verifica as contagens de vizinhos fractais, os limites de ordens pendentes e de posições, o volume fixo finito positivo e a porcentagem de risco finita positiva quando o dimensionamento de risco é selecionado. Vários outros intervalos permanecem sem verificação. Posições opostas independentes são mais fáceis de interpretar em uma conta de hedge; em uma conta de compensação, as ordens no mesmo símbolo afetam uma posição compartilhada. O código-fonte atualizado foi compilado sem erros e sem avisos. O usuário relatou 50 negociações no EURUSD H1 com compensação e 40 negociações no XAUUSD D1 com compensação antes dessas últimas proteções; a execução do XAUUSD também relatou erros de sessão, margem e modificação congelada. As proteções atualizadas ainda não foram testadas novamente nessas condições. Os horários de sessão não garantem disponibilidade durante fechamentos excepcionais, e uma lacuna, uma mudança repentina no patrimônio líquido ou uma ordem pendente congelada ainda podem impedir a limpeza oportuna da margem. Não são alegados resultados de desempenho.
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/78308
Prop Firm Equity Guard - Daily Loss Limit and Max Drawdown Protection
Encerra todas as operações e bloqueia novas operações quando o limite diário de perda, a perda máxima ou a meta de lucro são atingidos. Desenvolvido para os desafios das corretoras de negociação por conta própria. Funciona com negociação manual e com qualquer outro EA.
Session High Low - Asian, London and New York Range Boxes
Desenha as faixas das sessões asiática, de Londres e de Nova York como caixas coloridas com suas máximas e mínimas, além de linhas pontilhadas de extensão para negociações de rompimento. As mesmas faixas são exibidas em todos os intervalos de tempo até H1.
London Breakout EA: simples e transparente/Consultor London Breakout: simples e transparente
EA gratuito de breakout: faixa asiática, breakout de Londres, uma operação por dia, stop loss sempre definido, lote com base na porcentagem de risco. Sem grid, sem martingale. / EA gratuito: rompimento da faixa asiática na sessão de Londres, uma operação por dia, stop loss sempre definido, lote com base na porcentagem de risco. Sem grid e sem martingale.
Accelerator Oscillator (AC)
O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.