English Русский 中文 Español Deutsch 日本語
Desenhando níveis de ultrapassagem horizontal utilizando fractais

Desenhando níveis de ultrapassagem horizontal utilizando fractais

MetaTrader 4Exemplos | 4 fevereiro 2016, 09:56
1 167 0
Victor Chebotariov
Victor Chebotariov

Fractais

Fractais são somente um de cinco indicadores da estratégia de negociação de Bill William que permite que você encontre um topo ou um fundo. A definição técnica de um fractal para cima é uma série de cinco barras sequenciais mínimas, com duas barras com duas máximas menores localizadas diretamente antes da maior máxima e após ela. A configuração oposta (uma série de cinco barras, com duas barras com mínimas maiores localizadas diretamente antes da menor mínima e após ela) corresponde aos fractais para baixo. Os fractais possuem valores de Alto e Baixo e são marcados com as setas na tabela.



Se você olhar a tabela atentamente, entenderá que ao ultrapassar o nível de fractal muitas vezes há a tendência de continuar o movimento na direção do fractal. Em um mercado em ascensão, esse tipo de ultrapassagem serve para se manter em uma posição longa, o nível baixo de um fractal é a ultrapassagem do nível de suporte que será um sinal para fechar a posição longa. Tudo funciona da mesma maneira, mas ao contrário, em uma tendência de baixa. Usar essa estratégia em um mercado estável não produzirá resultados.

Indicador de níveis de fractal


Para podermos determinar o nível do último fractal superior ou inferior de modo mais simples, podemos escrever um indicador simples que desenhará estes níveis com as linhas horizontais.

Usando o "Assistente do Expert Advisor" criaremos o corpo principal do indicador. Para fazer isso, precisamos executar a sequência de comandos "Arquivo -> Criar" ou pressionar o botão na barra de ferramentas. O "Assistente do Expert Advisor" será aberto na tela.

  • Na primeira etapa você deve escolher "Indicador Personalizado".
  • Na segunda etapa você deve especificar o nome, autor, link e parâmetros, já que usaremos o indicador de Fractais para nosso indicador não teremos parâmetros ajustáveis, então somente especificamos o nome, autor e link.
  • Na terceira etapa o assistente oferecerá para especificar os parâmetros para exibir o indicador personalizado. Como nosso indicador deve ser exibido na tabela principal, não marcaremos o campo "Indicador em janela separada". Adicionalmente, teremos a escolha para determinar os índices. Precisaremos de dois índices: um para o nível do fractal superior e outro para o nível do fractal inferior. Ambos índices terão o tipo "Linha", então escolhemos a cor azul para o primeiro índice e a cor vermelha para o segundo índice e então pressionamos o botão "Finalizar".

A criação do corpo do programa está terminada, ela deve ser como a seguir:


//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----

   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Agora somente resta adicionar um pouco de código e nosso indicador estará pronto.



Precisaremos:
1. Calcular o valor do indicador para cada barra na tabela atual, para fazê-lo precisamos do ciclo:

int i=Bars-counted_bars-1;
 
while(i>=0)
  {
   // Here we calculate the value of the indicator for each bar (i)
   i--;
  }

2. Para obter os valores dos fractais superiores e inferiores:

double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);

3. O mais importante - memorizar o valor do último fractal, para fazê-lo teremos que recorrer às variáveis globais:

if(upfrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
  }
else if(lofrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
  }


4. Resta assim ler os dados das variáveis globais e passá-los para nossos índices:

ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");

O estado pronto do nosso indicador tem a seguinte aparência:

//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int i=Bars-counted_bars-1;
 
   while(i>=0)
     {
      double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
      double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);
      if(upfrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
        }
      else if(lofrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
        }
      ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
      ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Resta somente compilar, executando o comando do menu "Arquivo -> Compilar" ou pressionando o botão na barra de ferramentas.

Indicadores feitos recentemente podem ser anexados a uma tabela.


Aplicação prática

Em um primeiro momento os níveis de fractais podem ser úteis ao mover o nível de StopLoss abaixo da linha vermelha em um mercado em ascensão. Você deve manter o StopLoss acima da linha azul em um mercado em recessão. De tal modo, uma distância inteligente e segura entre o StopLoss e o mercado será garantida.

Por exemplo, entramos no mercado (consulte a tabela, marca 1) com a parada acima da linha azul (marca 2), se a linha vermelha for ultrapassada (marca 3) movemos o StopLoss (marca 4), se uma nova ultrapassagem ocorrer (marca 5), movemos o StopLoss de analogamente (marca 6). Se a linha azul for ultrapassada (marca 7), liquidamos a posição.

Para poder usar o FractalsLine como uma Parada Móvel devemos adicionar dois pequenos códigos no EA:

Obtendo os dados do indicador FractalsLine:

double FLU = iCustom(NULL,0,"FractalsLine",0,0); // Blue fractal line
double FLL = iCustom(NULL,0,"FractalsLine",1,0); // Red fractal line

Parada Móvel com base no indicador FractalsLine:
if(Close[0]>FLU) //Trailing-stop for the long positions
  {
   if(OrderStopLoss()<FLL-3*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL-3*Point,OrderTakeProfit(),0,Green);
      return(0);
     }
  }

A implantação da parada móvel com base no indicador FractalsLine no expert advisor de exemplo MACD trouxe um resultado positivo. Isso pode ser visto a partir dos testes comparativos.
if(Close[0]<FLL) //Trailing-stop for the short positions
  {
   if(OrderStopLoss()>FLL+(Ask-Bid+3)*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL+(Ask-Bid+3)*Point,OrderTakeProfit(),0,Red);
      return(0);
     }
  }


Os testes do exemplo padrão MACD

Símbolo EURUSD (Euro vs. Dólar americano)
Período 1 Час (H1) 02.01.2008 12:00 - 30.06.2008 23:00 (01.01.2008 - 01.07.2008)
Modelo Cada tick (o método mais preciso com base em todos os períodos de tempo disponíveis)
Parâmetros TakeProfit=50; Lots=0.1; TrailingStop=30; MACDOpenLevel=3; MACDCloseLevel=2; MATrendPeriod=26;

Barras em teste
4059 Ticks modelados
1224016 Qualidade da modelagem
90,00%
Erros de tabelas sem correspondência 1




Depósito inicial
10000,00



Liquidez total
182,00 Lucro bruto
1339,00 Perda bruta
-1157,00
Fator de rentabilidade 1,16 Retorno esperado
3,79

Perda absoluta
697,00 Perda máxima
827,00 (8.16%) Perda relativa
8.16% (827,00)

Negócios totais
48 Posições curtas (% ganho) 28 (82.14%) Posições longas (% ganho) 20 (85.00%)

Negociações com lucro (% do total) 40 (83.33%) Negociações com perda (% do total) 8 (16.67%)
Maior Negociação com lucro 50,00 Negociação com perda -492,00
Média Negociação com lucro 33,48 Negociação com perda -144,63
Máximo ganhos consecutivos (lucro em dinheiro) 14 (546.00) perdas consecutivas (perda em dinheiro) 3 (-350.00)
Máximo lucro consecutivo (contagem de ganhos) 546,00 (14) perda consecutiva (contagem de perdas) -492,00 (1)
Média ganhos consecutivos 7 perdas consecutivas 1


Teste da amostra MACD com o Perdas Móvel (Trailing Stop) com base no indicador FractalsLine

Símbolo EURUSD (Euro vs. Dólar americano)
Período 1 Hora (H1) 02.01.2008 12:00 - 30.06.2008 23:00 (01.01.2008 - 01.07.2008)
Modelo Cada tick (o método mais preciso com base em todos os períodos de tempo disponíveis)
Barras em teste
4059 Ticks modelados
1224016 Qualidade da modelagem
90,00%
Erros de tabelas sem correspondência 1




Depósito inicial
10000,00



Liquidez total
334,00 Lucro bruto
1211,00 Perda bruta
-877,00
Fator de rentabilidade
1,38 Retorno esperado
5,14

Perda absoluta
211,00 Perda máxima
277,00 (2.75%) Perda relativa
2.75% (277,00)

Negócios totais
65 Posições curtas (% ganho) 41 (41.46%) Posições longas (% ganho) 24 (62.50%)

Negociações com lucro (% do total) 32 (49.23%) Negociações com perda (% do total) 33 (50.77%)
Maior Negociação com lucro
50,00 Negociação com perda -102,00
Média Negociação com lucro 37,84 Negociação com perda -26,58
Máximo ganhos consecutivos (lucro em dinheiro) 3 (150.00) perdas consecutivas (perda em dinheiro) 4 (-168.00)
Máximo
lucro consecutivo (contagem de ganhos) 150,00 (3) perda consecutiva (contagem de perdas) -168,00 (4)
Média ganhos consecutivos 2 perdas consecutivas 2


Conclusão

Os testes mencionados mostram que a rentabilidade cresceu e as perdas também diminuíram, usando o FractalsLine.

Traduzido do Russo por MetaQuotes Software Corp.
Artigo original: http://articles.mql4.com/ru/articles/1435

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

Mapeamento de equivolumes revisitado Mapeamento de equivolumes revisitado
O artigo trata do método de construir tabelas, onde cada barra consiste de um número igual de ticks.
Testando Expert Advisors em períodos de tempo fora do padrão Testando Expert Advisors em períodos de tempo fora do padrão
Não é somente simples; é super simples. Testar os Expert Advisors em períodos de tempo fora do padrão é possível! Tudo que precisamos é substituir os dados de período de tempo padrão com dados de período de tempo fora do padrão. Adicionalmente, podemos até mesmo testar os Expert Advisors que usam dados de vários períodos de tempo fora do padrão.
Prevendo séries temporais financeiras Prevendo séries temporais financeiras
A previsão de séries temporais financeiras é um elemento necessário de qualquer atividade investigativa. O conceito de investigação por si - investir dinheiro agora para ganhar lucros no futuro - é baseado no conceito de prever o futuro. Portanto, prever séries temporais financeiras delineiam as atividades de toda a indústria de investimento - todas as trocas organizadas e outros sistemas de negociação de segurança.
Gerenciamento de dinheiro revisitado Gerenciamento de dinheiro revisitado
O artigo lida com algumas questões que surgem quando investidores aplicam vários sistemas de gerenciamento de dinheiro nas negociações Forex. Dados experimentais obtidos de realizações de negócios usando diferentes métodos de gerenciamento de dinheiro (MM) são também descritos.