![Desenhando níveis de ultrapassagem horizontal utilizando fractais](https://c.mql5.com/i/articles/overlay.png)
Desenhando níveis de ultrapassagem horizontal utilizando fractais
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.
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
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); } }
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 |
![](https://c.mql5.com/2/16/strategytester2.gif)
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 |
![](https://c.mql5.com/2/16/strategytester.gif)
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](https://c.mql5.com/2/15/537_33.gif)
![Testando Expert Advisors em períodos de tempo fora do padrão](https://c.mql5.com/2/13/1099_8.gif)
![Prevendo séries temporais financeiras](https://c.mql5.com/2/15/542_57.png)
![Gerenciamento de dinheiro revisitado](https://c.mql5.com/2/17/801_12.gif)
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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