English Русский 中文 Español Deutsch 日本語
Métodos Simples de Previsão das Direções das Velas Japonesas (Candles)

Métodos Simples de Previsão das Direções das Velas Japonesas (Candles)

MetaTrader 4Negociação | 2 outubro 2015, 09:50
9 404 0
Evgeniy Logunov
Evgeniy Logunov

Introdução

Velas japoneses representam uma das maneiras de exibir as informações sobre os preços ao longo de um determinado período de tempo, mostrando a correspondência entre abertura, fechamento, mínima e máxima dos preços (Open, Close, High e Low), são usadas principalmente na análise técnica e interpretadas de acordo com os modelos bem conhecidos.

Depois de escrever vários indicadores para prever a direção do movimento do mercado, eu vim com uma idéia de analisar a possibilidade de fazer uma previsão básica da direção da velas japonesas (candles), com base nos dados disponíveis sobre a das velas anteriores.

O artigo trata de alguns métodos de previsão simples e introduz várias EAs para testar as idéias e avaliar a eficácia.

Atenção! Os Expert Advisors anexados ao artigo são destinados para uso apenas no Testador de Estratégia.

O primeiro método baseia-se no pressuposto de que a direção da próxima vela coincide com a direção do antecedente. O segundo método assume que a direção próxima será o contrário da anterior. A vantagem destes métodos residem na sua simplicidade. Vamos analisá-los na seção "Métodos ingênuos".

O terceiro método é uma combinação dos dois primeiros. Em primeiro lugar, nós escolhemos o primeiro ou o segundo método e é então utilizado, a menos que a previsão parece ser diferente da realidade (no caso de um erro ter sido detectado). Neste caso, o método que está em utilização é substituído pelo outro. Este método é mais complexo do que os dois primeiros, uma vez que leva em consideração erros que ocorreram nas fases anteriores. Vamos, portanto, avaliar esse método na seção "Método Adaptativo".


Dados Básicos para Previsão

Todos os métodos em apreço repousam sobre a direção da vela anterior, portanto devemos primeiro pensar numa maneira de obter a informação sobre a direção de qualquer vela.

O termo "direção do candle" será usado para se referir ao valor que caracteriza o sinal da diferença entre a abertura e fechamento de determinado preço da vela. Em vista disso a direção de qualquer vela pode assumir um dos três valores - "direção para cima", "direção para baixo" e "sem direção".

Informações sobre as aberturas e fechamentos dos preços das velas (candles) podem ser acessadas usando os arrays Open e Close, respectivamente. Estes arrays usam deslocamentos como índices, um deslocamento é o número de uma vela contado a partir do lado direito do gráfico, começando com zero, isso significa que o deslocamento da vela é zero, enquanto que o deslocamento da vela anterior anterior é um.

// Obtendo a direção do candle
double GetCandleDirection(int shift) {
   double diff=Close[shift]-Open[shift];
   if (diff>0.0) {
      return (DIRECTION_UP);
   }
   else if (diff<0.0) {
      return (DIRECTION_DOWN);
   }
   else /*if (diff==0.0)*/ {
      return (DIRECTION_NONE);
   }
}

A função recebe o deslocamento da vela e calcula a diferença de sua abertura e as cotações de fechamento. Dependendo, sobre o sinal do valor da figura resultante, a função devolve o valor de uma das três constantes, DIRECTION_UP, DIRECTION_DOWN ou DIRECTION_NONE. Essas constantes correspondem a "direção para cima", "direção para baixo" e "sem direção", respectivamente.

Observe que todos os métodos de previsão sob consideração podem originar uma situação especial: se a direção da vela anterior não pode ser determinada (a GetCandleDirection (1) chamada retorna o valor da DIRECTION_NONE), a direção da próxima vela também será indeterminada como resultado da previsão, nestes casos os Expert Advisors escritos para testar os métodos não entram no mercado.

Note que os valores das constantes utilizadas para indicar as diferentes direções, devem ser definidas de modo a não causar dificuldades ao calcular a direção oposta. A mudança de sinal pode servir como um dos meios de cálculo da direção oposta. Estas constantes podem então ser definidas da seguinte forma:

// Determinar as possíveis direções da vela
#define DIRECTION_NONE 0
#define DIRECTION_UP 1
#define DIRECTION_DOWN -1

Vamos providenciar uma saída separada das instruções da vela no gráfico, usando o indicador CandleColor.mq4 anexado ao artigo. O indicador mostra as direções dos candles (os histogramas azul e vermelho), bem como uma média móvel simples com base nos dados sobre as direções, permitindo ter uma idéia geral das velas prevalecendo ao longo de um determinado período de tempo.


Direções dos Candles: comportamento ao longo do tempo.

Como mostrado pelo indicador, as direções dos candles muitas vezes mudam, alternando ou permanecendo as mesmas por algumas velas numa linha. Claramente, a previsão da direção, mesmo uma única vela, é uma tarefa desafiadora.

Vamos agora avançar para a consideração e análise detalhada dos métodos propostos.


Métodos Ingênuos

Vamos começar com os dois primeiros métodos:

  1. A direção da próxima vela irá coincidir com a direção da anterior.
  2. A direção da próxima vela será oposta a anterior.

Para testar a eficácia de ambos os métodos, um Expert Advisor (o arquivo CandlePredTest_naive.mq4 anexado ao artigo) foi desenvolvido e testado.

O Expert Advisor usado na abertura de preços, a cada nova barra, ele fecha todas as posições que foram abertas mais cedo (Take Profit ou Stop Loss) e abre uma posição de acordo com a direção hipotética da próxima vela (agora aberta). A previsão da próxima vela é realizada pela função ModelPredict:

// Previsão com base no modelo atual
int ModelPredict() {
   if (modelState==STATE_NORMAL) {
      return (GetCandleDirection(1));
   }
   else /*if (modelState==STATE_REVERSE)*/ {
      return (-GetCandleDirection(1));
   }
}

A função implementa dois métodos de previsão, A escolha do método depende do valor da variável ModelState.

Se a variável ModelState assume o valor STATE_NORMAL, a previsão vai seguir o primeiro método, chamando a função GetCandleDirection(1) para a direção da vela anterior e retornando o valor obtido, como a direção da vela posterior.

O segundo método de previsão, a variável ModelState assume o valor STATE_REVERSE, onde o cálculo da direção oposta é feito através da mudança de sinal, ou seja, a função ModelPredict devolve o valor da GetCandleDirection (1).

A função ModelPredict não utiliza a comparação expressa com a constante STATE_REVERSE referente ao segundo método. No código do Expert Advisor, presume-se que os dados inseridos pelo usuário são sempre corretos e a variável ModelState assume sempre um dos dois valores: STATE_NORMAL ou STATE_REVERSE. A comparação expressa pode ser ativada através da remoção dos suportes de comentário "/*" e "*/", a partir do corpo da função, adicionando assim um outro operador de condicional if para o código.

Apesar da variável ModelState está ausente na lista de parâmetros do Expert Advisor, o seu valor é copiado da variável externa initialModelState ao anexar o Expert Advisor:

// estado do modelo
extern int initialModelState=STATE_NORMAL;

Esta complicação adicional do código ocorre porque o número de estados pode aumentar ainda mais, embora nem todos esses estados sejão autorizados no início da operação. Você pode usar quaisquer valores como indicações de estados. Por exemplo, no Expert Advisor analisado, eles são definidos da seguinte forma:

// Definindo os estados do modelos
#define STATE_NORMAL 0
#define STATE_REVERSE 1

O código restante do Expert Advisor é fornecido com observações muito detalhadas e não deve ter qualquer dificuldade ao leitor.

As condições para testar o Expert Advisor são mostradas abaixo:

  • Volume da posição - 0.1 lot.
  • Depósito inicial - $10,000.
  • Timeframes - todos os intervalos de tempo disponível.
  • Operation modes - STATE_NORMAL, STATE_REVERSE.
  • Período testado - toda a história disponível.
  • Instrumentos:

    1. USDCHF
    2. GBPUSD
    3. EURUSD
    4. USDJPY
    5. AUDUSD
    6. USDCAD
    7. EURGBP
    8. EURCHF
    9. EURJPY
    10. GBPJPY
    11. GBPCHF
    12. EURAUD

Os critérios nos quais os resultados foram comparados são: lucro líquido e percentual de negócios rentáveis.

As duas tabelas a seguir demonstram os resultados do teste no modo STATE_NORMAL (primeiro método).

Lucro líquido:


M1 M5 M15 M30 H1 H4 D1
USDCHF -9902 -9900 -9903 -9907 -9901 -9900 -9927
GBPUSD -9868 -9864 -9869 -9887 -9873 -9868 -9924
EURUSD -9921 -9957 -9949 -9941 -9934 -9910 -9879
USDJPY -9900 -9905 -9900 -9905 -9935 -9926 -9904
AUDUSD -9952 -9957 -9966 -9962 -9961 -9956 -10000
USDCAD -9901 -9903 -9901 -9900 -9902 -9904 -8272
EURGBP -9862 -9861 -9864 -9869 -9875 -9871 -5747
EURCHF -9862 -9865 -9865 -9874 -9869 -9862 -5750
EURJPY -9866 -9877 -9964 -9877 -9869 -9867 -10000
GBPJPY -9848 -9841 -9840 -9845 -9848 -9870 -9849
GBPCHF -9891 -9885 -9850 -9844 -9857 -9856 -9891
EURAUD -9865 -9863 -9868 -9874 -9861 -9891 -10000


Percentagem dos negócios rentáveis:


M1 M5 M15 M30 H1 H4 D1
USDCHF 19.55 27.82 31.50 38.18 39.86 43.29 43.95
GBPUSD 21.18 27.81 30.29 33.81 35.20 41.39 46.71
EURUSD 26.06 33.20 34.59 37.55 41.64 43.73 44.37
USDJPY 19.28 31.68 34.13 35.48 39.04 42.99 46.85
AUDUSD 19.71 21.30 26.25 27.20 33.15 39.96 44.69
USDCAD 21.88 25.13 27.59 31.79 33.07 39.48 46.40
EURGBP 21.78 28.90 31.49 34.55 35.24 42.11 47.04
EURCHF 28.70 27.86 27.85 31.13 32.90 39.08 47.65
EURJPY 23.69 30.62 35.81 38.89 39.06 44.04 48.16
GBPJPY 10.11 19.47 33.48 37.39 37.75 43.09 47.42
GBPCHF 23.17 23.95 30.84 33.50 36.03 42.43 47.90
EURAUD 1.65 7.35 16.55 22.24 27.65 36.11 44.64

O teste do primeiro método mostrou resultados pobres. Independentemente do período, vemos perda do depósito em todos os instrumentos. O número de negócios rentáveis aumenta em intervalos de tempo maiores, mas nunca superior a 50%.

As duas tabelas a seguir demonstram os resultados do teste do Expert Advisor no modo STATE_REVERSE (segundo método).

Lucro líquido:


M1 M5 M15 M30 H1 H4 D1
USDCHF -9900 -9912 -9902 -9917 -9915 -9901 +83
GBPUSD -9864 -9866 -9869 -9874 -9870 -9911 -5565
EURUSD -9920 -9917 -9923 -9947 -9922 -9886 +4249
USDJPY -9906 -9901 -9906 -9900 -9900 -9928 +2003
AUDUSD -9955 -9956 -9957 -9956 -9969 -9947 +1203
USDCAD -9900 -9900 -9900 -9900 -9901 -9906 -3129
EURGBP -9868 -9862 -9862 -9863 -9867 -9902 -9867
EURCHF -9863 -9861 -9863 -9862 -9869 -9869 -6556
EURJPY -9861 -9864 -9866 -9868 -9897 -9886 -10000
GBPJPY -9850 -9887 -9905 -9857 -9969 -9848 -9964
GBPCHF -9846 -9841 -9842 -9842 -9886 -9914 -9850
EURAUD -9870 -9866 -9874 -9910 -9872 -9872 -2411


Percentagem dos negócios rentáveis:


M1 M5 M15 M30 H1 H4 D1
USDCHF 18.38 27.41 33.76 37.46 42.28 46.71 52.15
GBPUSD 18.59 27.71 34.07 39.01 43.79 47.33 49.39
EURUSD 23.37 33.88 41.05 43.80 43.56 48.16 52.56
USDJPY 16.88 30.39 38.13 40.29 43.94 46.62 49.34
AUDUSD 18.84 22.52 25.39 29.83 36.36 43.51 49.84
USDCAD 22.44 24.04 27.07 31.06 35.69 43.51 49.84
EURGBP 20.52 28.89 35.18 38.82 42.41 45.82 45.55
EURCHF 27.43 31.82 32.80 35.05 36.74 43.89 46.04
EURJPY 18.79 28.15 37.09 39.80 43.05 44.15 46.92
GBPJPY 10.02 19.76 31.92 38.06 41.84 44.32 47.53
GBPCHF 19.87 27.24 33.72 35.70 39.74 47.59 46.11
EURAUD 1.43 7.66 17.24 26.95 34.46 41.29 47.07


Temos resultados mistos ao testar o segundo método. Os resultados em todos os intervalos de tempo, com exceção do D1, foram aproximadamente iguais aos obtidos no primeiro método. A negociação no timeframe D1, teve lucro em quatro instrumentos dos doze. A porcentagem de negociações rentáveis ficou perto de 50%, chegando a 52% em dois casos.

Em geral, os resultados dos testes de Expert Advisor deixam muito a desejar. Vamos tentar usar uma combinação dos métodos ingênuos para cancelar as suas desvantagens.


Método Adaptativo

A essência do terceiro método de previsão é a utilização dos dois métodos ingênuos de previsão, substituindo um pelo outro caso de um erro. Desta forma, este método adapta-se ao comportamento das séries de previsão.

O método foi verificado no Expert Advisor correspondente, arquivo CandlePredTest_adaptive.mq4 anexado ao artigo.

Este Expert Advisor representa uma versão melhorada do Expert Advisor CandlePredTest_naive. Sua principal diferença está que cada previsão anterior é analisada pelos erros em cada nova barra.

// Função de trabalho do Expert Advisor
int start() {
   // posições são abertas uma vez em cada barra
   if (!IsNewBar()) {
      return (0);
   }
   // fechar todas as posições
   TradeClosePositions(DIRECTION_UP);
   TradeClosePositions(DIRECTION_DOWN);
   // atualização do estado de modelo
   if (prediction!=DIRECTION_NONE) {
      ModelUpdate(prediction==GetCandleDirection(1));
   }
   // prever a próxima cor da vela
   prediction=ModelPredict();
   if (prediction==DIRECTION_NONE) {
      return (0);
   }
   // abrir uma posição na posição certa
   TradeOpenPosition(prediction,"");
   return (0);
}

Os erros são analisados somente se o Expert Advisor abriu posições na barra anterior, ou seja, se a previsão não retornou a constante DIRECTION_NONE. Os erros são todos os casos de discrepância entre a previsão e a direção atual da vela fechada, cuja deslocamento torna-se igual abertura da nova barra.

Um método de previsão ingênuo é substituído por um outro que usou a função ModelUpdate e recebe a flag de correção da previsão (prediction == GetCandleDirection (1)) como um parâmetro.

// Atualizar o estado do modelo
void ModelUpdate(bool correct) {
   //Se a previsão estava errada, alterar o estado do modelo
   if (!correct) {
      if (modelState==STATE_NORMAL) {
         modelState=STATE_REVERSE;
      }
      else /*if (modelState==STATE_REVERSE)*/ {
         modelState=STATE_NORMAL;
      }
   }
}

A função analisa a flag de correção da previsão (correct), no caso de um erro substituir o método ingênuo selecionado de previsão, alterando o valor da variável ModelState. O valor inicial da variável ModelState é copiado da variável initialModelState, na inicialização. Não é relevante como o Expert Advisor pode alterar o método de previsão durante o curso da sua operação.

A previsão é de responsabilidade da função ModelPredict, semelhante ao utilizado no Expert Advisor CandlePredTest_naive. Como resultado das mudanças no valor da variável ModelState, a previsão é executada com base nos primeiro e segundo métodos, alternando entre si.

O Expert Advisor foi testado sob as mesmas condições, com uma única exceção, o valor da variável initialModelState que foi fixada como (STATE_NORMAL).

Lucro líquido:


M1 M5 M15 M30 H1 H4 D1
USDCHF -9903 -9905 -9902 -9915 -9902 -9907 -3738
GBPUSD -9866 -9875 -9876 -9864 -9867 -9933 -6404
EURUSD -9924 -9924 -9931 -9920 -9920 -9903 -3779
USDJPY -9904 -9900 -9900 -9904 -9920 -9902 -6493
AUDUSD -9955 -9954 -9955 -9995 -9955 -9965 -8649
USDCAD -9903 -9902 -9901 -9911 -9900 -9904 -1525
EURGBP -9861 -9867 -9865 -9862 -9881 -9877 -9913
EURCHF -9861 -9862 -9872 -9881 -9870 -9875 -9258
EURJPY -9861 -9865 -9866 -9868 -9876 -9905 -9880
GBPJPY -9842 -9844 -9867 -9840 -9919 -10000 -9933
GBPCHF -9841 -9843 -9917 -9840 -9893 -9848 -9895
EURAUD -9866 -9869 -9863 -9872 -9867 -9904 -7656


Percentagem dos negócios rentáveis:


M1 M5 M15 M30 H1 H4 D1
USDCHF 19.22 26.82 32.29 35.71 40.29 44.15 47.93
GBPUSD 20.12 28.16 32.01 34.87 40.05 41.97 49.39
EURUSD 25.24 32.65 38.32 39.48 41.50 45.81 48.88
USDJPY 19.16 29.48 35.02 37.03 40.19 44.45 47.34
AUDUSD 19.63 21.67 25.76 28.16 32.11 41.11 46.76
USDCAD 22.84 24.46 27.39 29.79 34.44 42.26 48.46
EURGBP 21.44 29.45 33.05 36.55 38.19 41.86 46.23
EURCHF 27.51 29.98 30.92 34.44 34.09 40.87 44.27
EURJPY 21.24 28.56 35.58 38.78 40.50 44.23 47.12
GBPJPY 11.30 19.90 31.91 37.15 36.76 41.11 46.24
GBPCHF 22.00 26.81 32.13 34.38 36.99 43.11 47.16
EURAUD 1.50 6.56 15.14 22.25 31.63 37.96 47.70

O teste não apresentou resultados significativamente melhores, comparando o primeiro e o segundo método. O lucro foi negativo para todos os instrumentos em todos os prazos, enquanto o percentual de negócios rentáveis não ultrapassou a 50%.


Conclusão

Os resultados dos testes fornecidos no artigo demonstraram a fraca eficácia dos métodos de avaliação.

  • O primeiro método acabou por ser extremamente ineficaz, provavelmente a suposição de que a direção da próxima vela coincide com a direção da anterior necessita de mais verificação na previsão.
  • O segundo método apresentou os melhores resultados de todos os outros métodos em questão, no entanto requer uma análise mais detalhada. Por exemplo, os dados sobre o número de negócios, o lucro que não foi tomado pode ser interessante.
  • O terceiro método demonstrou resultados médios em relação ao primeiro e segundo método e carece de aperfeiçoamento, a ideia principal era a melhoria das características, em comparação com as características usadas nos métodos ingênuos. No entanto, não trouxe qualquer melhoria, aparentemente este método muitas vezes intercambia os métodos de previsão que leva a erros adicionais.

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

Arquivos anexados |
Lite_EXPERT2.mqh: Exemplos da implementação do Expert Advisor Lite_EXPERT2.mqh: Exemplos da implementação do Expert Advisor
Neste artigo, o autor continua a familiarizar os leitores com as funções do Lite_EXPERT2.mqh, usando exemplos reais da aplicação do Expert Advisor. O artigo lida com a idéia de usar ordens pendentes flutuantes e ordens pendentes que variam dinamicamente de negócio para negócio, determinados com base nos valores do indicador Average True Range (ATR).
O Quanto é Confiável Negociar à Noite? O Quanto é Confiável Negociar à Noite?
O artigo aborda as peculiaridades da negociação em lateralidade de preço à noite nos pares de moedas cruzadas, explica onde você pode ter expectativa de lucros e porque grandes perdas não são improváveis. O artigo também apresenta um exemplo do Expert Advisor desenvolvido para negociação à noite e fala sobre a aplicação prática desta estratégia.
Teste e Otimização de Expert Advisors Teste e Otimização de Expert Advisors
O artigo fornece uma descrição detalhada do processo de teste e otimização de Expert Advisors no Testador de Estratégia MetaTrader 4, a importância de tais informações e a necessidade desta publicação não pode ser subestimada. Um monte de usuários que iniciam com a plataforma de negociação MetaTrader 4 tem apenas uma idéia muito vaga do como e o que precisa ser feito quando se trabalha com os Expert Advisors. O artigo proposto dá respostas simples e claras para todas essas perguntas e fornece uma abordagem mais profissional para lidar com esses problemas usando um exemplo específico.
Alert e Comment para Indicadores Externos (Parte II) Alert e Comment para Indicadores Externos (Parte II)
Desde que publiquei o artigo "Alert e Comment para indicadores externos", tenho recebido pedidos e perguntas a respeito da possibilidade de desenvolver uma operação baseada em informação externa com linhas de indicador, tendo analisado as perguntas, eu decidi continuar com o assunto. Os dados armazenados em buffers de indicador acabaram despertando outra área de interesse dos usuários.