English Русский 中文 Español Deutsch 日本語
preview
Analisando exemplos de estratégias de trading no terminal do cliente

Analisando exemplos de estratégias de trading no terminal do cliente

MetaTrader 5Exemplos |
149 15
Artyom Trishkin
Artyom Trishkin

Conteúdo


Introdução

No início da década de 1990, nos mercados financeiros ocidentais, foi apresentado o gráfico de velas japonesas e os padrões de velas, introduzidos pelo analista técnico Steve Nison. Desde então, o conhecimento sobre padrões de velas tornou-se tão essencial para os traders quanto a capacidade de aplicar a análise técnica clássica.

Recentemente, no terminal do cliente, foi adicionada uma nova pasta de EAs no diretório:


Na pasta Free Robots, estão disponíveis 28 EAs – exemplos de estratégias de trading para estudo e aplicação independente dos princípios embutidos nas estratégias para desenvolvimento próprio. As estratégias de trading apresentadas na pasta Free Robots são EAs que operam com padrões de velas, apoiados por sinais de indicadores.

Para confirmar os sinais dos padrões de velas, utilizam-se valores de um dos quatro indicadores osciladores: CCI, MFI, RSI и Stochastic Oscillator. Assim, são apresentados sete EAs que operam com padrões de velas (cada um com dois padrões, um para posições longas e outro para posições curtas), sendo que cada um desses EAs possui quatro versões, de acordo com o número de indicadores confirmadores.


Visão geral das estratégias de trading

Cada estratégia de trading utiliza dois padrões similares, mas com direções e nomes diferentes:

1. BlackCrows WhiteSoldiers


3 White Soldiers: Padrão de compra "Três Soldados Brancos" – 3 velas brancas consecutivas com corpo de tamanho suficiente. São sinais de uma possível reversão de uma tendência de baixa (bearish).

3 Black Crows: Padrão de venda "Três Corvos Negros" – 3 velas negras consecutivas com corpo de tamanho suficiente. São sinais de uma possível reversão de uma tendência de alta (bullish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • BlackCrows WhiteSoldiers CCI.mq5 – EA que opera com os padrões 3 White Soldiers e 3 Black Crows, com confirmação dos sinais pelo indicador CCI.
  • BlackCrows WhiteSoldiers MFI.mq5 – EA que opera com os padrões 3 White Soldiers e 3 Black Crows, com confirmação dos sinais pelo indicador MFI.
  • BlackCrows WhiteSoldiers RSI.mq5 – EA que opera com os padrões 3 White Soldiers e 3 Black Crows, com confirmação dos sinais pelo indicador RSI.
  • BlackCrows WhiteSoldiers Stoch.mq5 – EA que opera com os padrões 3 White Soldiers e 3 Black Crows, com confirmação dos sinais pelo indicador Stochastic Oscillator.

2. BullishBearish Engulfing


Bullish Engulfing: Padrão de compra "Engolfo de Alta" ocorre quando, em uma tendência de baixa, após uma vela de baixa, surge uma vela de alta cujo corpo engolfa completamente o corpo da vela de baixa. É um sinal de uma possível reversão da tendência de baixa (bearish).

Bearish Engulfing: Padrão de venda "Engolfo de Baixa" ocorre quando, em uma tendência de alta, após uma vela de alta, surge uma vela de baixa cujo corpo engolfa completamente o corpo da vela de alta. É um sinal de uma possível reversão da tendência de alta (bullish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • BullishBearish Engulfing CCI.mq5 – EA que opera com os padrões Bullish Engulfing e Bearish Engulfing, com confirmação dos sinais pelo indicador CCI.
  • BullishBearish Engulfing MFI.mq5 – EA que opera com os padrões Bullish Engulfing e Bearish Engulfing, com confirmação dos sinais pelo indicador MFI.
  • BullishBearish Engulfing RSI.mq5 – EA que opera com os padrões Bullish Engulfing e Bearish Engulfing, com confirmação dos sinais pelo indicador RSI.
  • BullishBearish Engulfing Stoch.mq5 – EA que opera com os padrões Bullish Engulfing e Bearish Engulfing, com confirmação dos sinais pelo indicador Stochastic Oscillator.


3. BullishBearish Harami


Bullish Harami: Padrão de compra "Harami de Alta" ocorre quando, em uma tendência de baixa, após uma longa vela de baixa, surge uma vela de alta com o corpo completamente dentro do corpo da vela de baixa. É um sinal de uma possível reversão da tendência de baixa (bearish). É um sinal de uma possível reversão da tendência de baixa (bearish).

Bearish Harami: Padrão de venda "Harami de Baixa" ocorre quando, em uma tendência de alta, após uma longa vela de alta, surge uma vela de baixa com o corpo completamente dentro do corpo da vela de alta. É um sinal de uma possível reversão da tendência de alta (bullish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • BullishBearish Harami CCI.mq5 – EA que opera com os padrões Bullish Harami e Bearish Harami, com confirmação dos sinais pelo indicador CCI.
  • BullishBearish Harami MFI.mq5 – EA que opera com os padrões Bullish Harami e Bearish Harami, com confirmação dos sinais pelo indicador MFI.
  • BullishBearish Harami RSI.mq5 – EA que opera com os padrões Bullish Harami e Bearish Harami, com confirmação dos sinais pelo indicador RSI.
  • BullishBearish Harami Stoch.mq5 – EA que opera com os padrões Bullish Harami e Bearish Harami, com confirmação dos sinais pelo indicador Stochastic Oscillator.


4. BullishBearish MeetingLines


Bullish Meeting Lines: Padrão de compra "Linhas de Encontro de Alta" consiste em uma combinação de uma vela de baixa e uma de alta, cujos preços de fechamento coincidem (ou estão muito próximos). O comprimento dos corpos de ambas as velas é maior que a média.  É um sinal de uma possível reversão da tendência de baixa (bearish).

Bearish Meeting Lines: Padrão de venda "Linhas de Encontro de Baixa" consiste em uma combinação de uma vela de alta e uma de baixa, cujos preços de fechamento coincidem (ou estão muito próximos). O comprimento dos corpos de ambas as velas é maior que a média. É um sinal de uma possível reversão da tendência de alta (bullish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • BullishBearish MeetingLines CCI.mq5 – EA que opera com os padrões Bullish Meeting Lines e Bearish Meeting Lines, com confirmação dos sinais pelo indicador CCI.
  • BullishBearish MeetingLines MFI.mq5 – EA que opera com os padrões Bullish Meeting Lines e Bearish Meeting Lines, com confirmação dos sinais pelo indicador MFI.
  • BullishBearish MeetingLines RSI.mq5 – EA que opera com os padrões Bullish Meeting Lines e Bearish Meeting Lines, com confirmação dos sinais pelo indicador RSI.
  • BullishBearish MeetingLines Stoch.mq5 – EA que opera com os padrões Bullish Meeting Lines e Bearish Meeting Lines, com confirmação dos sinais pelo indicador Stochastic Oscillator.


5. DarkCloud PiercingLine


Piercing Line: Padrão de compra "Clareira nas Nuvens" é uma combinação de uma vela de baixa e uma de alta. É o oposto do padrão Dark Cloud Cover (Cobertura de Nuvens Negras).  Primeiro, aparece uma vela preta grande; a vela seguinte tem uma abertura baixa (abaixo do mínimo da anterior) e um fechamento acima da metade da primeira vela.  É um sinal de uma possível reversão da tendência de baixa (bearish).

Dark Cloud Cover: Padrão de venda "Cobertura de Nuvens Negras" é uma combinação de uma vela de alta e uma de baixa. Primeiro, aparece uma vela branca grande; a vela seguinte tem uma abertura alta (acima do máximo da anterior) e um fechamento abaixo da metade da primeira vela. Este é um dos poucos casos em que se consideram máximos e mínimos. É um sinal de uma possível reversão da tendência de alta (bullish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • DarkCloud PiercingLine CCI.mq5 – EA que opera com os padrões Piercing Line e Dark Cloud Cover, com confirmação dos sinais pelo indicador CCI.
  • DarkCloud PiercingLine MFI.mq5 – EA que opera com os padrões Piercing Line e Dark Cloud Cover, com confirmação dos sinais pelo indicador MFI.
  • DarkCloud PiercingLine RSI.mq5 – EA que opera com os padrões Piercing Line e Dark Cloud Cover, com confirmação dos sinais pelo indicador RSI.
  • DarkCloud PiercingLine Stoch.mq5 – EA que opera com os padrões Piercing Line e Dark Cloud Cover, com confirmação dos sinais pelo indicador Stochastic Oscillator.


6. HangingMan Hammer


Hammer: Padrão de compra "Martelo" é representado por uma vela com corpo pequeno e uma longa sombra inferior, que aparece após uma tendência de baixa. O surgimento do "Martelo" é um forte sinal de que o domínio do mercado de baixa está chegando ao fim.

Hanging Man: Padrão de venda "Enforcado" é representado por uma vela com corpo pequeno e uma longa sombra inferior, que aparece após uma tendência de alta. O surgimento do "Enforcado" sinaliza o fim de uma tendência de alta.

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • HangingMan Hammer CCI.mq5 – EA que opera com os padrões Hammer e Hanging Man, com confirmação dos sinais pelo indicador CCI.
  • HangingMan Hammer MFI.mq5 – EA que opera com os padrões Hammer e Hanging Man, com confirmação dos sinais pelo indicador MFI.
  • HangingMan Hammer RSI.mq5 – EA que opera com os padrões Hammer e Hanging Man, com confirmação dos sinais pelo indicador RSI.
  • HangingMan Hammer Stoch.mq5 – EA que opera com os padrões Hammer e Hanging Man, com confirmação dos sinais pelo indicador Stochastic Oscillator.


7. MorningEvening StarDoji


Morning Star: Padrão de compra "Estrela da Manhã" é composto por três velas e ocorre em uma tendência de baixa:
1. Após uma longa vela preta, vem uma vela com corpo pequeno (a cor não importa), que não se sobrepõe ao corpo da vela preta.
2. O corpo pequeno da segunda vela indica que o mercado passou de uma tendência de baixa para um equilíbrio de forças entre touros e ursos.
3. A terceira vela deste padrão é uma vela de alta, cujo corpo geralmente não se sobrepõe ao corpo da segunda vela, e o nível de fechamento está dentro do corpo da primeira (de baixa).
O padrão é um sinal de uma possível reversão da tendência de baixa (bearish).

Morning Doji Star: Padrão de compra "Estrela da Manhã Doji" é uma variação específica do padrão "Estrela da Manhã" (Morning Star). Nesse caso, a segunda vela do padrão possui os mesmos preços de abertura e fechamento — ou seja, a segunda vela não possui corpo. O padrão é um sinal de uma possível reversão da tendência de baixa (bearish).

Evening Star: Padrão de venda "Estrela da Noite" também é composto por três velas e ocorre em uma tendência de alta:
1. Após uma longa vela branca, vem uma vela com corpo pequeno (a cor não importa), que não se sobrepõe ao corpo da vela branca.
2. 2. O corpo pequeno da segunda vela indica que o mercado passou de uma tendência de alta para um equilíbrio de forças entre touros e ursos.
3. A terceira vela deste padrão é uma vela de baixa, cujo corpo geralmente não se sobrepõe ao corpo da segunda vela, e o nível de fechamento está dentro do corpo da primeira (de alta).
O padrão é um sinal de uma possível reversão da tendência de alta (bullish).

Evening Doji Star: Padrão de venda "Estrela da Noite Doji" é uma variação específica do padrão "Estrela da Noite" (Evening Star). Nesse caso, a segunda vela do padrão possui os mesmos preços de abertura e fechamento — ou seja, a segunda vela não possui corpo. O padrão é um sinal de uma possível reversão da tendência de baixa (bearish).

Com base nos padrões de velas descritos acima, o terminal apresenta quatro EAs educacionais:

  • MorningEvening StarDoji CCI.mq5 – EA que opera com os padrões Morning Star (Morning Doji Star) e Evening Star (Evening Doji Star), com confirmação dos sinais pelo indicador CCI.
  • MorningEvening StarDoji MFI.mq5 – EA que opera com os padrões Morning Star (Morning Doji Star) e Evening Star (Evening Doji Star), com confirmação dos sinais pelo indicador MFI.
  • MorningEvening StarDoji RSI.mq5 – EA que opera com os padrões Morning Star (Morning Doji Star) e Evening Star (Evening Doji Star), com confirmação dos sinais pelo indicador RSI.
  • MorningEvening StarDoji Stoch.mq5 – EA que opera com os padrões Morning Star (Morning Doji Star) e Evening Star (Evening Doji Star), com confirmação dos sinais pelo indicador Stochastic Oscillator.


Todos os indicadores utilizados nos EAs servem para confirmar as entradas em posições longas ou curtas (quando há sinais correspondentes dos padrões de velas) e para encerrar posições abertas com base nos sinais dos indicadores.

As tabelas abaixo apresentam os valores dos indicadores utilizados para confirmar entradas em posições e para encerrar posições abertas:

Indicador
Compra
Venda
 CCI
CCI(1)<-50 — o valor do indicador CCI na última barra fechada é menor que -50
CCI(1)>50 — o valor do indicador CCI na última barra fechada é maior que 50
 IFM
MFI(1)<40 — o valor do indicador MFI na última barra fechada é menor que 40
MFI(1)>60 — o valor do indicador MFI na última barra fechada é maior que 60 RSI
 RSI
RSI(1)<40 — o valor da linha do indicador RSI na última barra fechada é menor que 40
RSI(1)>60 — o valor do indicador RSI na última barra fechada é maior que 60
 Stochastic
Stochastic Signal(1)<30 — o valor da linha de sinal do indicador Stochastic na última barra fechada é menor que 30
Stochastic Signal(1)>70 — o valor da linha de sinal do indicador Stochastic na última barra fechada é maior que 70

Os sinais dos indicadores técnicos para o fechamento de posições surgem quando o valor do indicador cruza o limite da zona extrema, ou seja, entra ou sai da zona de sobrecompra ou sobrevenda.

Indicador
Fechamento de posição longa
 Fechamento de posição curta
 CCI
Cruzamento do indicador CCI de cima para baixo do nível 80 ou do nível -80
Cruzamento do indicador CCI de baixo para cima do nível -80 ou do nível 80
 IFM
Cruzamento do indicador MFI de cima para baixo do nível 70 ou do nível 30
Cruzamento do indicador MFI de baixo para cima do nível 30 ou do nível 70
 RSI
Cruzamento do indicador RSI de cima para baixo do nível 70 ou do nível 30
Cruzamento do indicador RSI de baixo para cima do nível 30 ou do nível 70
 Stochastic
Cruzamento da linha de sinal do indicador Stochastic de cima para baixo do nível 80 ou do nível 20
Cruzamento da linha de sinal do indicador Stochastic de baixo para cima do nível 20 ou do nível 80

Cada EA opera com um par de padrões de velas de direção oposta e é apresentado em quatro versões, baseadas nos indicadores confirmadores.

Ao todo, temos 7 * 4 = 28 EAs distintos, organizados segundo um único esquema idêntico para todos. Vamos analisar a lógica unificada de todos os EAs utilizando diagramas de blocos.


Destrinchando a lógica geral

Se abrirmos o código de qualquer um dos EAs no editor, examinando o código, veremos um esquema simples:


A lógica dos EAs é baseada em flags e variáveis, declaradas no nível global:

  • ExtSignalOpen — sinal para abrir posição. 1 — Buy, -1 — Sell, 0 — sem sinal,
  • ExtSignalClose — sinal para fechar posição. 2 — long, -2 — short, 0 — sem sinal,
  • ExtPatternInfo — descrição textual do padrão detectado,
  • ExtDirection — direção da posição a ser aberta. Descrição textual,
  • ExtPatternDetected — flag de padrão detectado (true/false),
  • ExtConfirmed — flag de sinal de padrão confirmado pelo indicador (true/false),
  • ExtCloseByTime — flag indicando necessidade de fechamento por tempo de retenção da posição (true/false),
  • ExtCheckPassed — flag de sucesso na obtenção dos dados (true/false).
    Os flags definidos globalmente funcionam como semáforos para determinar a lógica de comportamento do EA. Os valores são registrados em variáveis textuais para exibição no log.
    A lógica do EA é sequencial e consiste em um bloco de inicialização de flags no manipulador OnInit() e quatro etapas de operação no manipulador OnTick().
    • Etapa 1 — verificação de um novo candle e atualização do ambiente e estado dos flags,
    • Etapa 2 — abertura de posição,
    • Etapa 3 — fechamento de posição,
    • Etapa 4 — fechamento de posição por expiração do tempo de retenção.

    Analisemos a lógica do EA.

    Diagrama de bloco da lógica de operação do EA


    O diagrama de blocos apresenta as quatro etapas de operação do EA:

    Etapa 1:

    • Verifica-se o surgimento de um novo candle.
      Se houver um novo candle, verifica-se o estado atual:
      • Checa-se as formações de velas para identificar a presença de um padrão.
      • Se um padrão for encontrado, verifica-se a confirmação do sinal do padrão pelo indicador.
      • Se o sinal do padrão for confirmado, imprime-se a informação sobre o padrão detectado no log e configuram-se os flags para abertura de posição.

    Etapa 2:

    • Se houver um sinal para abrir posição e essa posição não existir, imprime-se no log uma mensagem sobre o sinal para abertura de posição e abre-se a posição.
    • Se a posição for aberta, o flag de abertura de posição é resetado.

    Etapa 3:

    • Se houver um sinal para fechar posição e essa posição existir, imprime-se no log uma mensagem sobre o sinal para fechamento de posição e fecha-se a posição.
    • Se a posição não existir, o flag de fechamento de posição é resetado.

    Etapa 4:

    • Se houver um sinal para fechar posição por expiração do tempo de retenção e essa posição existir, fecha-se a posição cujo tempo de retenção expirou.
    • Se a posição não existir, o flag de fechamento por tempo de retenção é resetado.


    Lista de funções

    A seguir, o conjunto de funções do EA e suas descrições breves:

    CheckState() — verificação do estado do ambiente:

    • Se nenhum padrão for encontrado, retorna false.
    • Se houver um erro ao confirmar o padrão pelo indicador, retorna false.
    • Se o padrão não for confirmado pelo sinal do indicador, o flag de abertura de posição é resetado.
    • Se o fechamento por tempo de retenção da posição for especificado, o flag correspondente é configurado.

    PositionOpen() — abertura de posição:

    • Atualizam-se os dados do ambiente de negociação.
    • Dependendo do sinal e, consequentemente, do tipo de posição, os preços de StopLoss e TakeProfit são ajustados para valores aceitáveis em relação ao preço de abertura e às restrições do servidor.
    • Abre-se a posição.
    • Se a posição não for aberta, o erro é registrado no log e retorna-se false.
    • Em caso de abertura bem-sucedida, retorna-se true.

    CloseBySignal() — fechamento de posição por sinal:

    • Se não houver sinal para fechamento, a função retorna.
    • Determina-se o tipo de posição a ser fechada com base na direção do sinal.
    • Fecham-se todas as posições abertas pelo EA, cujo tipo corresponda à direção do sinal.

    CloseByTime() — fechamento de posições com tempo de retenção expirado:

    • Se não houver posições abertas pelo EA, a função retorna.
    • Fecham-se todas as posições abertas pelo EA, cujo tempo de retenção tenha expirado.

    PositionExist() — retorna o flag de existência de posição na direção do sinal:

    • Determina-se o tipo de posição correspondente à direção do sinal.
    • Retorna-se o flag de existência de posição aberta pelo EA com o tipo correspondente à direção do sinal.

    PositionExpiredByTimeExist() — retorna o flag de existência de posição com tempo de retenção expirado:

    • Determina-se a quantidade de candles que a posição esteve aberta.
    • Retorna-se o flag de existência de posição, se o tempo de retenção for maior que a quantidade de candles especificada nas configurações.

    BarsHold() — retorna o número de candles de retenção da posição:

    • Determina-se e retorna-se o número de candles entre o momento de abertura da posição e o horário atual do servidor.

    Open(), Close(), Low(), High() — retornam o preço correspondente do candle pelo índice:

    • Solicitam-se os preços correspondentes do candle especificado.
    • Se os preços não forem obtidos, o flag de erro é definido.
    • Retornam-se os preços obtidos.

    MidPoint(), MidOpenClose(), AvgBody() — retornam preços médios calculados.

    CheckPattern() — verificação da existência de padrão:

    • Executa-se o algoritmo de busca de padrão na direção Short.
    • Se um padrão for encontrado, o flag de padrão detectado é configurado, e retorna-se true.
    • Executa-se o algoritmo de busca de padrão na direção Long.
    • Se um padrão for encontrado, o flag de padrão detectado é configurado, e retorna-se true.
    • Se nenhum padrão for encontrado, o flag de erro é retornado, que pode ser definido como false nas funções de obtenção de preços.

    CheckConfirmation() — verifica e configura o flag de confirmação do sinal do padrão com base no sinal do indicador.

    CheckCloseSignal() — verifica as condições para o sinal de fechamento de posições com base nos valores do indicador; se houver sinal, configura o flag de fechamento da posição.


    Considerações finais

    Todos os 28 EAs apresentados na pasta Experts\Free Robots operam com base na mesma lógica. A diferença entre eles está apenas nos algoritmos de identificação dos padrões de velas e na utilização de dados de quatro indicadores diferentes para confirmação dos sinais dos padrões. Assim, qualquer um desses EAs pode ser usado como modelo para criar outros EAs que trabalhem com diferentes formações de velas e utilizem a confirmação dos padrões a partir de outros indicadores. Para isso, é necessário modificar a lógica de busca dos padrões nas direções Long e Short na função CheckPattern(), que é chamada a partir da função CheckState(), utilizada no primeiro passo da operação do EA:

    //+------------------------------------------------------------------+
    //| Returns true in case of successful pattern check                 |
    //+------------------------------------------------------------------+
    bool CheckPattern()
      {
       ExtPatternDetected=false;
    //--- check if there is a pattern
       ExtSignalOpen=SIGNAL_NOT;
       ExtPatternInfo="\r\nPattern not detected";
       ExtDirection="";
    
    //--- check 3 Black Crows
       if((Open(3)-Close(3)>AvgBody(1)) && // long black
          (Open(2)-Close(2)>AvgBody(1)) &&
          (Open(1)-Close(1)>AvgBody(1)) &&
          (MidPoint(2)<MidPoint(3))     && // lower midpoints
          (MidPoint(1)<MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_SELL;
          ExtPatternInfo="\r\n3 Black Crows detected";
          ExtDirection="Sell";
          return(true);
         }
    
    //--- check 3 White Soldiers
       if((Close(3)-Open(3)>AvgBody(1)) && // long white
          (Close(2)-Open(2)>AvgBody(1)) &&
          (Close(1)-Open(1)>AvgBody(1)) &&
          (MidPoint(2)>MidPoint(3))     && // higher midpoints
          (MidPoint(1)>MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_BUY;
          ExtPatternInfo="\r\n3 White Soldiers detected";
          ExtDirection="Buy";
          return(true);
         }
    
    //--- result of checking
       return(ExtCheckPassed);
      }

    Para substituir o indicador confirmador, é necessário ajustar os parâmetros de entrada, especificando as propriedades do indicador desejado em vez das definidas, por exemplo, para o CCI:

    //--- Input parameters
    input int  InpAverBodyPeriod=12;    // period for calculating average candlestick size
    input int  InpPeriodCCI     =37;    // CCI period
    input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type

    No manipulador OnInit(), substitua o bloco de criação do indicador CCI por outro indicador:

    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
       Print("InpSL=", InpSL);
       Print("InpTP=", InpTP);
    //--- set parameters for trading operations
       ExtTrade.SetDeviationInPoints(InpSlippage);    // slippage
       ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID
       ExtTrade.LogLevel(LOG_LEVEL_ERRORS);           // logging level
    
       ExtAvgBodyPeriod=InpAverBodyPeriod;
    //--- indicator initialization
       ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice);
       if(ExtIndicatorHandle==INVALID_HANDLE)
         {
          Print("Error creating CCI indicator");
          return(INIT_FAILED);
         }
    //--- OK
       return(INIT_SUCCEEDED);
      }

    Além disso, no EA, nas funções de confirmação dos sinais dos padrões (CheckConfirmation()) e nas funções de fechamento de posições com base nos sinais dos indicadores (CheckCloseSignal()), utilize os dados do novo indicador com os valores exigidos para confirmar os padrões nas direções Long e Short.

    //+------------------------------------------------------------------+
    //| Returns true in case of successful confirmation check            |
    //+------------------------------------------------------------------+
    bool CheckConfirmation()
      {
       ExtConfirmed=false;
    //--- if there is no pattern, do not search for confirmation
       if(!ExtPatternDetected)
          return(true);
    
    //--- get the value of the stochastic indicator to confirm the signal
       double signal=CCI(1);
       if(signal==EMPTY_VALUE)
         {
          //--- failed to get indicator value, check failed
          return(false);
         }
    
    //--- check the Buy signal
       if(ExtSignalOpen==SIGNAL_BUY && (signal<-50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI<-50";
         }
    
    //--- check the Sell signal
       if(ExtSignalOpen==SIGNAL_SELL && (signal>50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI>50";
         }
    
    //--- successful completion of the check
       return(true);
      }
    


    //+------------------------------------------------------------------+
    //| Check if there is a signal to close                              |
    //+------------------------------------------------------------------+
    bool CheckCloseSignal()
      {
       ExtSignalClose=false;
    //--- if there is a signal to enter the market, do not check the signal to close
       if(ExtSignalOpen!=SIGNAL_NOT)
          return(true);
    
    //--- check if there is a signal to close a long position
       if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
         {
          //--- there is a signal to close a long position
          ExtSignalClose=CLOSE_LONG;
          ExtDirection="Long";
         }
    
    //--- check if there is a signal to close a short position
       if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80)))
         {
          //--- there is a signal to close a short position
          ExtSignalClose=CLOSE_SHORT;
          ExtDirection="Short";
         }
    
    //--- successful completion of the check
       return(true);
      }

    Dessa forma, percebemos que esses EAs oferecem uma base útil para criar e testar algoritmos personalizados, capazes de verificar diversas formações de velas com confirmação de praticamente qualquer indicador adequado.

    Traduzido do russo pela MetaQuotes Ltd.
    Artigo original: https://www.mql5.com/ru/articles/15479

    Últimos Comentários | Ir para discussão (15)
    Artyom Trishkin
    Artyom Trishkin | 21 ago. 2024 em 14:14
    Ivan Titov #:

    Comparado, daí a pergunta:

    Eu não criei esses códigos. É por isso que escrevi: Se você notar uma discrepância, basta adicioná-la em seu código.
    Ivan Titov
    Ivan Titov | 21 ago. 2024 em 14:17
    Artyom Trishkin #:
    Eu não criei esses códigos. É por isso que escrevi: Se você notar alguma inconsistência, basta adicioná-la ao seu código.

    Entendo que isso faz parte da atualização do MT5. Vou adicioná-lo ao meu código - ele será apagado durante a próxima atualização do terminal.

    Artyom Trishkin
    Artyom Trishkin | 21 ago. 2024 em 14:21
    Ivan Titov #:

    Entendo que isso faz parte da atualização do MT5. Vou adicioná-lo para mim - ele será apagado durante a próxima atualização do terminal.

    O que o impede de copiar o Expert Advisor em uma pasta separada e alterar tudo o que for necessário?

    Eles são de treinamento, apenas exemplos.

    Ivan Titov
    Ivan Titov | 21 ago. 2024 em 14:24
    Artyom Trishkin #:
    Eles são tutoriais, apenas exemplos.

    Aprendemos com os erros... a cometer erros ;)

    Rashid Umarov
    Rashid Umarov | 16 set. 2024 em 11:43
    Ivan Titov #:
    verificar Piercing Line

    Você tem razão: as condições não estão escritas simetricamente. Verifiquei a fonte original (o livro "Strategies of the World's Best Traders") e ela diz a mesma coisa.

    Portanto, o erro não é nosso, mas é necessário fazer as correções. Vou procurar em outras fontes, pois está escrito lá. Parece que o autor esqueceu de acrescentar uma condição


    Redes neurais em trading: Modelos de espaço de estados Redes neurais em trading: Modelos de espaço de estados
    A base de muitos dos modelos que examinamos anteriormente é a arquitetura Transformer. No entanto, eles podem ser ineficientes ao lidar com sequências longas. Neste artigo, proponho uma abordagem alternativa de previsão de séries temporais com base em modelos de espaço de estados.
    Redes neurais em trading: Injeção de informação global em canais independentes (InjectTST) Redes neurais em trading: Injeção de informação global em canais independentes (InjectTST)
    A maioria dos métodos modernos de previsão de séries temporais multimodais utiliza a abordagem de canais independentes, ignorando a dependência natural entre os diferentes canais de uma série temporal. Para melhorar a eficiência dos modelos, é fundamental utilizar equilibradamente duas abordagens: canais independentes e mistos.
    Algoritmo de otimização de migração animal (AMO) Algoritmo de otimização de migração animal (AMO)
    O artigo é dedicado ao algoritmo AMO, que modela o processo de migração sazonal dos animais em busca de condições ideais para sobrevivência e reprodução. As principais características do AMO incluem o uso da vizinhança topológica e um mecanismo probabilístico de atualização, tornando-o simples de implementar e flexível para diversas tarefas de otimização.
    Colmeia artificial de abelhas (ABHA): Testes e resultados Colmeia artificial de abelhas (ABHA): Testes e resultados
    Neste artigo, continuaremos o estudo do algoritmo de colmeia de abelhas ABHA, aprofundando-nos na escrita de código e analisando os métodos restantes. Lembremos que cada abelha no modelo é apresentada como um agente individual, cujo comportamento depende de informações internas e externas, bem como de seu estado motivacional. Realizaremos testes do algoritmo em diferentes funções e apresentaremos os resultados em uma tabela de classificação.