Métodos Simples de Previsão das Direções das Velas Japonesas (Candles)
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.
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.
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:
- A direção da próxima vela irá coincidir com a direção da anterior.
- 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).
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:
- USDCHF
- GBPUSD
- EURUSD
- USDJPY
- AUDUSD
- USDCAD
- EURGBP
- EURCHF
- EURJPY
- GBPJPY
- GBPCHF
- 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
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso