Download MetaTrader 5

Quanto dura a tendência?

26 junho 2017, 09:34
Alexander Fedosov
0
2 375

Conteúdo

Introdução

O fundamento da negociação tem a ver com o estado do mercado em momentos diferentes. Uma negociação bem-sucedida depende de quão precisa é a previsão dos movimentos do preço. Já há uma série de artigos sobre este tema, por exemplo, "Diversas maneiras de encontrar uma tendência no MQL5". Nele são descritos métodos para determinar o estado da tendência do mercado, com base nele são escritos indicadores e EAs. Um dos meus artigos, nomeadamente, "Análise comparativa de 10 estratégias de tendência", foi dedicado à tendência, nele foram desenvolvidas e testadas estratégias de negociação. Neste artigo, também selecionamos várias maneiras de identificar a tendência, porém, somente a fim de definir sua duração em relação ao estado de correção do mercado. Em geral, considera-se a proporção de 30% tendência para 70% fase de correção. Isto é o que vamos verificar.


Estabelecimento de objetivos

Para realizar o estudo, definimos os objetivos e suas condições.

  1. Selecionar os métodos para determinar a tendência e a fase de correção, de modo que seja possível quantificá-los e convertê-los para uma percentagem. Para isso, serão só uteis os sistemas que possam mostrar ambos os estados do mercado. Convém que neles sejam construídos indicadores de qualidade que exibam a força da tendência ou definam claramente o estado lateral do mercado.
  2. Poder identificar e estimar a correlação em vários períodos, bem como em diferentes mercados e diferentes tipos (mercados de câmbio, ações ou de futuros).
  3. Desenvolver uma ferramenta que o leitor possa usar em pesquisas independentes de acordo com as condições de seu interesse.
  4. Levar a cabo uma análise comparativa com base nos dados obtidos em condições diferentes, encontrar a correlação.

Implementação

1. Escolha de métodos para determinar a tendência.

1.1. Comecemos a pesquisa com o indicador clássico de tendência ADX. O nível TrendLevel servirá como avaliação para estimar a presença da tendência ou da fase de correção. Assumimos que a tendência existe se a linha principal ultrapassar este nível. Na Fig.1 exibido um exemplo de zona de tendência e zona de correção por este método. A contagem do estado do mercado será feita pelo número de velas em que o valor do ADX seja superior ao TrendLevel da amostra selecionada.

Fig.1 Definição das zonas de tendência/correção através do ADX

1.2. Agora, consideramos o Indicador de força e direção da tendência, mas selecionamos para nosso objetivo apenas um indicador de bandas de Bollinger e reduzimos o número de cores para exibição a dois, nomeadamente, vermelho e verde. Na Fig. 2 pode ser visto claramente onde acontecem os movimentos fortes do mercado: aqui as velas são pintadas nas cores especificadas.

Fig.2 Definição das zonas de tendência/correção através das bandas de Bollinger.

1.3. O terceiro a ser considerado foi o Percentage of Trend, ele também é submetido a modificações, isto é, nele foi removido o segundo período e foi adicionada uma indicação colorida de tendência. O resultado do trabalho obtido pelo indicador é apresentado na Fig.3.

 

Fig.3 Definição das zonas de tendência/correção através do Percentage of Trend.

1.4. O RSIFilter é outra maneira de determinar a tendência/fase de correção. Por conveniência, a contagem do indicador RSI é exibida como histogramas, em que a saída dos valores do indicador para as zonas de sobrevenda/sobrecompra predeterminadas é exibida como uma coluna. Aqui, também, há mudanças no indicador original: o estado da fase de correção não é exibido e o buffer, que mostra o valor da altura do histograma em tais condições de mercado, é igual a zero. Foi feito assim para que fosse mais fácil detectar a presença de uma tendência em que o valor do buffer fosse igual a um. Exemplo do indicador mostrado na Fig.4.

Fig.4 Definição das zonas de tendência/correção através do RSIFilter.

1.5. E, finalmente, consideramos um método do artigo "Diversas maneiras de encontrar uma tendência no MQL5", nomeadamente, a definição do estado da tendência/fase de correção usando o indicador ZigZagTrendDetector. Ele não tem quaisquer alterações. Seu trabalho é apresentado na Fig.5.

Fig.5 Definição das zonas de tendência/correção através do ZigZagTrendDetector.

2. Desenvolvimento e implementação da ferramenta para contagem do estado do mercado e exibição dos resultados.

O resultado de cada método de definição de tendência/fase de correção será apresentado como tabelas segundo vários períodos. Para maior clareza, eu utilizei a biblioteca EasyAndFastGUI com base em Interfaces gráficas do usuário. Desenvolvida classe especial CTrendCountUI para visualizar resultados. Para ter uma ideia mais clara de como ele será apresentado, na Fig. 6 exibido o modelo original em que serão armazenados todos os cálculos.

 

Fig. 6. Modelo para exibição de contagem dos resultados do teste.

Tal como mostrado na imagem, a primeira coluna fornece métodos para a contagem da tendência, enquanto a primeira linha - o cálculo numa variante multi-períodos. Para economizar espaço e preservar a legibilidade, não vou dar a implementação inteira da interface, em vez disso, vou mostrar uma função que ajusta e torna visível o modelo mostrado acima:

//+------------------------------------------------------------------+
//| Saída e configuração do painel de informação                     |
//+------------------------------------------------------------------+
void SetInfoPanel()
  {
//---

   UI.CreateMainPanel("Trend Counter");
   UI.CreateStatusBar(1,25);
   UI.m_status_bar.ValueToItem(0,"Enabled on "+Symbol());
   UI.CreateCanvasTable();
//---

   UI.m_canvas_table.SetValue(0,0,"Valor");
   UI.m_canvas_table.SetValue(0,1,"ADX");
   UI.m_canvas_table.SetValue(0,2,"BB");
   UI.m_canvas_table.SetValue(0,3,"PoT");
   UI.m_canvas_table.SetValue(0,4,"RSI");
   UI.m_canvas_table.SetValue(0,5,"ZZ");
//---

   UI.m_canvas_table.SetValue(1,0,"M1");
   UI.m_canvas_table.SetValue(2,0,"M5");
   UI.m_canvas_table.SetValue(3,0,"M15");
   UI.m_canvas_table.SetValue(4,0,"M30");
   UI.m_canvas_table.SetValue(5,0,"H1");
   UI.m_canvas_table.SetValue(6,0,"H4");
   UI.m_canvas_table.SetValue(7,0,"H6");
   UI.m_canvas_table.SetValue(8,0,"D1");
   UI.m_canvas_table.SetValue(9,0,"W1");

   UI.m_canvas_table.UpdateTable(true);
   UI.CreateLabel("Working...");
  }

O próximo passo é a criação de algoritmos de contagem para os métodos de contagem selecionados acima. A maior parte de suas maneiras de implementação são muito semelhantes, portanto analisamos apenas uma. Consideramos os pontos que implementam contagem.

Analisamos o primeiro método descrito, isto é, o ADX, função GetADXCount().

//+------------------------------------------------------------------+
//| Função de contagem de estados do mercado usando o ADX            |
//+------------------------------------------------------------------+
bool GetADXCount()
  {
//--- Bloco 1
   double adx[],result[],count;
   int to_copy,bars;
   int tf_size=ArraySize(Ind_Timeframe);
   ArrayResize(Ind_Handle,tf_size);
   ArrayResize(result,tf_size);
   ArrayInitialize(adx,0.0);
   ArrayInitialize(result,0.0);
   ArraySetAsSeries(adx,true);
//---

   for(int i=0;i<tf_size;i++)
     {
      count=0;
      Ind_Handle[i]=iADX(Symbol(),Ind_Timeframe[i],InpInd_ADXPeriod);
      if(Ind_Handle[i]==INVALID_HANDLE)
        {
         Print(" Failed to get the indicator handle");
         return(false);
        }
      //--- Bloco 2

      bars=Bars(Symbol(),Ind_Timeframe[i]);
      to_copy=(bars<NumCandles)?bars:NumCandles;
      //---

      if(CopyBuffer(Ind_Handle[i],0,0,to_copy,adx)<=0)
         return(false);
      //--- Bloco 3

      for(int j=0;j<to_copy;j++)
        {
         if(adx[j]>TrendLevel)
            count++;
        }
      result[i]=(count/to_copy)*100;
      IndicatorRelease(Ind_Handle[i]);
     }
//--- Bloco 4

   for(int i=1;i<=tf_size;i++)
      UI.m_canvas_table.SetValue(i,1,DoubleToString(result[i-1],2));
   UI.m_canvas_table.UpdateTable(true);
   return(true);
  }

Consideramos os blocos de código designados na listagem acima.

  • Bloco 1. Inicialização das variáveis e matrizes, conversão de seu tamanho para o número de timeframes em que serão realizados os testes.
  • Bloco 2. Para testar e obter o resultado em percentagem da amostra desejada a partir de um certo número de velas. Deve ser tido em conta que - nos timeframes maiores ou em instrumentos com um histórico muito pequeno - pode não existir o número de barras suficiente para uma determinada amostra, portanto é preciso determinar a profundidade do histórico e ajustar o volume de dados solicitados, se necessário.
  • Bloco 3. Para o indicador ADX, aumentamos o contador quando seu valor - para a barra atual - for superior ao TrendLevel. 
  • Bloco 4. Introduzimos os resultados de teste na tabela preparada antes na função SetInfoPanel().

Em seguida, será alterado apenas o bloco 3, ou seja, as condições de contagem.

Função GetColorBBCount().

for(int j=0;j<to_copy;j++)
        {
         if(bb[j])
            count++;
        }
result[i]=(count/to_copy)*100;

Um valor do buffer de indicador selecionado - diferente de zero - indica que a vela atual na amostra pertence à tendência. Se não for assim, então estamos perante uma fase de correção (plano).

Função GetPoTCount().

Parâmetros do indicador Percentage of Trend имеют вид:

//--- Parâmetros Percentage of Trend

input int                  InpPeriodPoT=20;
input double               UpTrendLevel=0.8;
input double               DnTrendLevel=0.2;

É por isso que, se o valor do indicador ultrapassar os níveis UpTrendLevel e DnTrendLevel, estaremos perante uma tendência. Assim, a contagem será:

 for(int j=0;j<to_copy;j++)
        {
         if(pot[j]>=UpTrendLevel || pot[j]<=DnTrendLevel)
            count++;
        }
 result[i]=(count/to_copy)*100;

Função GetRSICount().

Uma vez que é apresentada como um histograma em que a existência de uma tendência é indicada como 1 e a ausência, como 0, a condição será idêntica a GetColorBBCount():

 for(int j=0;j<to_copy;j++)
        {
         if(rsi[j])
            count++;
        }
 result[i]=(count/to_copy)*100;

Função GetZZCount().

Semelhante à anterior - o mesmo tipo de gráfico de barras do indicador.

 for(int j=0;j<to_copy;j++)
        {
         if(zz[j])
            count++;
        }
 result[i]=(count/to_copy)*100;

Função GetAverage().

Calcula o resultado global de todos os métodos e timeframes.

//+------------------------------------------------------------------+
//| Função de contagem do valor médio de todos os dados              |
//+------------------------------------------------------------------+
string GetAverage(double &arr[])
  {
   double sum=0.0;
   int size=ArraySize(arr);
   for(int i=0;i<size;i++)
      sum+=arr[i];
   sum/=size;
   return(DoubleToString(sum,2));
  }
//+------------------------------------------------------------------+

Como resultado, o cálculo e exibição da informação cálculo aparece de forma compacta:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetInfoPanel();
   if(GetADXCount() && 
      GetColorBBCount() && 
      GetPoTCount() && 
      GetRSICount() && 
      GetZZCount()
      )
      UI.m_label1.LabelText("Done. Result for "+IntegerToString(NumCandles)+" bars. Average Trend Time - "+GetAverage(avr_result)+"%");
   else
     {
      UI.m_label1.LabelText("Error");
     }
//---
   return(INIT_SUCCEEDED);
  }

Teste

Para teste, foi decidido pegar vários tipos de instrumentos, a fim de otimizar as condições de estudo quanto possível:

  • Pares de moedas — EURUSD,USDCHF,USDJPY,GBPUSD;
  • Futuros — GOLD-6.17;
  • Mercado de ações — #MCD;

Em todos os timeframes, o teste será feito numa amostra de 2 000 barras. Abaixo estão as configurações idênticas para todos os instrumentos.

//+------------------------------------------------------------------+
//| Parâmetros de entrada do Expert Advisor                          |
//+------------------------------------------------------------------+

input int                  NumCandles=2000;              //Number of analyzed candles
//---- Parâmetros ADX
input string               com1="";                      //---- Parâmetros ADX
input int                  InpInd_ADXPeriod=14;          //ADX Period
input double               TrendLevel=20.0;
//--- Parâmetros ColorBBCandles
input string               com2="";                      //---- Parâmetros ColorBBCandles
input int                  BandsPeriod=20;               // Período de média BB
input double               BandsDeviation=1.0;           // Desvio
input ENUM_MA_METHOD       MA_Method_=MODE_SMA;          //método de média do indicador
input Applied_price_       IPC=PRICE_CLOSE_;             //constante de preço
//--- Parâmetros Percentage of Trend
input string               com3="";                      //---- Parâmetros Percentage of Trend
input int                  InpPeriodPoT=20;
input double               UpTrendLevel=0.7;
input double               DnTrendLevel=0.3;
//--- Parâmetros RSIFilter
input string               com4="";                      //---- Parâmetros RSIFilter
input uint                 RSIPeriod=10;                 // Indicator period
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;         // Price
input uint                 HighLevel=60;                 // Overbought level
input uint                 LowLevel=40;                  // Oversold level
//--- Parâmetros ZigZagTrendDetector 
input string               com5="";                      //---- Parâmetros ZigZagTrendDetector
input int                  ExtDepth=5;
input int                  ExtDeviation= 5;
input int                  ExtBackstep = 3;

1. Teste de pares de moedas.

Os resultados do teste dos quatro pares de moeda revelaram uma tendência que permanecia 60% do tempo no estado de tendência. Além disso, não se observaram diferenças significativas nos diferentes métodos e timeframes.

Fig. 7 Resultados de teste de quatro pares de moedas.

2. Teste de futuros.

O teste de futuros mostrou valores que se afastavam da tendência geral, nos timeframes maiores. Isto acontece porque inicialmente foi definida uma amostra de 2000 barras, porém, em D1 e W1, não há suficiente histórico para isso, portanto o cálculo é realizado segundo histórico disponível. 

Fig. 7 Resultado de teste do futuro GOLD-6.17.

3. Teste de ações.

Neste caso, também é observada uma tendência geral obtida nos instrumentos acima mencionados.

 

Fig. 8 Resultados de teste da ação #MCD.

Durante o teste, perguntei-me se era justo selecionar um intervalo de 2000 velas. Hesitava se ia ser armazenado o valor médio da tendência para amostras de outras escalas. E, neste ponto, surge um outro momento de verificação interessante, isto é, como é que muda a correlação tendência/fase de correção do ponto de vista do histórico? Por conseguinte, após estudar a dinâmica de mudança nesta correlação, é possível tirar conclusões sobre a alteração na natureza dos movimentos de tendência, duração, frequência, etc. Foi por isso que se decidiu investigar a dependência do valor de amostra do valor médio de tendência para cada um dos métodos para determinar a tendência. Isto dará as respostas para as perguntas acima. Buscamos correlações usando o cálculo do Coeficiente de correlação de postos de Spearman. 

Estamos interessados na correlação de duas magnitudes: número de barras para o teste (X) e o tempo médio da tendência em percentagem (Y). Para cada X e Y são atribuídos postos. Com base nos postos obtidos, é calculada sua diferença d, e é calculado o coeficiente pela fórmula:

Onde n é o número de pares medidos X e Y. O coeficiente por variar entre -1 e 1. Um valor positivo indica que as variáveis têm uma correlação positiva ou direta, enquanto o negativo, uma correlação negativa ou inversa. Um valor negativo indica a ausência de quaisquer correlações.

Como exemplo consideraremos em detalhe um dos métodos de definição da tendência do ADX no par de moedas EURUSD. O resto será calculado da mesma forma, e seus resultados serão resumidos na tabela por razões de clareza. Neste caso, as medições dos valores médios do tempo da tendência serão n=7 e o número pré-selecionado de barras para o teste será: é 100, 200, 300, 500, 1 000, 1 500, 2 000. A tabela seguinte mostra os resultados de medição dos valores, classificação, diferença e seu quadrado para calcular o coeficiente:

Rx X Y Ry D(Rx-Ry) D2
1  100 75.78 1 0 0
2  200 77.72 2 0 0
3  300 79.04 3 0 0
4  500 79.77 5 -1 1
5  1000 79.49 4 -1 1
6  1500 81.32 6 0 0
 2000 81.44 7 0 0

Substituídos os valores obtidos na fórmula, obtemos o coeficiente ρ=1-(6*2)/(7*(49-1)=0,96. 

Em seguida, verificamos o valor obtido a partir da tabela de coeficientes mostrada na Fig. 8 para n=7 e concluímos que, no que diz respeito ao presente teste, o valor médio temporal da tendência depende proporcional e diretamente do valor da amostra selecionada do teste em barras (isto é, tem uma correlação positiva).

Fig. 8 Valores críticos do coeficiente de correlação de postos de Spearman.

Agora calculamos o coeficiente de Spearman - para todos os métodos determinando a tendência - para o par de moedas EURUSD e colocamos estes valores na tabela.

Método de determinação da tendência Valor do coeficiente de Spearman.
 ADX 0.96
 ColorBBCount 0.89
 Percentage of Trend 0.68
 RSI Filter -0.68
 ZigZagTrendDetector -0.07 

O que nos dizem os resultado que obtivemos? Os primeiros três métodos para determinar a tendência deram uma correlação positiva entre o valor médio da tendência e a profundidade do histórico, o RSI Filter, pelo contrário, deu uma correlação negativa, enquanto a determinação usando indicador ZigZag mostrou que o resultado final não dependia do tamanho da amostra. Calculamos os coeficientes para os outros instrumentos envolvidos no teste e também tabulamos os resultados. 

Método de determinação da tendência EURUSD USDCHF USDJPY GBPUSD GOLD-6.17 #MCD
 ADX 0.96 -0.61 -0.75 0.96 -0.86 0.93
 ColorBBCount 0.89 0.46 -0.11 -0.14 -0.64 0.79
 Percentage of Trend 0.68 0.93 0.11 0.29 0.89 1
 RSI Filter -0.68 1 0.04 0.79 -1 0.89
 ZigZagTrendDetector -0.07 0 0.96 0.96 0.36 0.32

Com base nesses resultados é possível tirar as seguintes conclusões para cada um dos instrumentos de negociação.

  • EURUSD. Em três dos cinco métodos de definição da tendência, observada uma forte correlação, isto é, quanto mais profundo o histórico, maior a participação do estado de tendência.
  • USDCHF. Assim como no instrumento anterior, a participação do estado de tendência foi maior no passado do que é agora.
  • USDJPY. Neste caso, não existe uma correlação entre as alterações no tamanho da amostra e o valor final. A natureza do movimento e a dinâmica deste mercado não mudou muito.
  • GPBUSD. Em quatro dos cinco métodos, a participação da tendência depende proporcional e diretamente do tamanho da amostra. Também concluímos que, neste par, a participação do estado de tendência no passado foi maior do que agora.
  • GOLD-6.17. Não foi observada nenhuma correlação da alteração do tamanho da amostra.
  • #MCD. Há dependência em todos os cinco casos, e, além disso, em quatro casos é elevada. Isto também indica que no passado houve as tendências fortes e longas. Quanto mais perto o histórico do presente, cada vez menos o mercado selecionado entra num estado de fortes movimentos.

Para verificar a fiabilidade dos resultados, consideraremos os gráficos dos instrumentos estudados num timeframe grande e num período grande na histórico. Isto dará uma compreensão de se a natureza dos movimentos de tendência está realmente mudando. Para a consideração, tomamos o timeframe semanal e identificamos as áreas específicas do estado de tendência e de correção.

1. EURUSD

Consideremos a imagem apresentada a seguir. Ela mostra o par EURUSD de 1995 até ao presente. 

Fig. 9 Gráfico semanal EURUSD 1995-2017

Na figura as principais características do mercado são marcadas por três áreas:

  • A primeira área mostra uma tendência geral de queda de longo prazo com pequenos recuos. Preste atenção à duração e à força da tendência.
  • A segunda área é quase oposta da primeira, além disso sua força e duração não é menor do que a primeira. Como pode ser visto, os dois movimentos ocorreram no período de 1995 a meados de 2007.
  • Como visto na terceira e quarta área marcadas, a força e duração do movimento de tendência entra em sério declínio. Na escala das tendências anteriores, as atuais são mais parecidas com as laterais.

Além disso, a partir dessas observações pode-es concluir que o cálculo dos coeficientes de correlação de Spearman - para os métodos selecionados determinando a tendência - mostra de forma confiável a natureza atual da mudança na correlação tendência/fase de correção.

2. USDJPY

Lembre que, ao calcular os coeficientes de correlação para este instrumento, não foi revelada nenhuma dependência da natureza da alteração ou correlação da tendência ao longo do tempo. Na Fig. 10 pode se apreciar que, desde o início de 1995, é acompanhado um forte movimento ascendente, após o qual, o escopo e a duração da tendência são reduzidos significativamente por um tempo muito longo. Na segunda parte da imagem, onde se mostra primeiro uma tendência descendente e, em seguida, uma ascendente, há movimentos laterais frequentes por vários meses. 

Fig.10 Gráfico semanal USDJPY 1995-2017.

Por conseguinte, neste caso, o cálculo dos coeficientes de correlação de Spearman também carateriza fielmente a ausência de qualquer dependência entre o tempo e a correlação tendência/fase de correção.

3. #MCD.

No final de contas, foi decidido considerar o caso de ações cuja, lembro a você, correlação foi observada em todos os cinco métodos de determinar a tendência. Na Fig.11 vemos que, no passado, a ação se movia para cima sem recuos significativos ou estados de correção prolongados. Também é evidente quais o movimento e relação da tendência/fase de correção são observados no passado recente de acordo com o tempo presente.

Fig.11 Ação #MCD 2003-2017.

Por isso, aqui o cálculo dos coeficientes de correlação de Spearman é muito justo e nos apresenta uma imagem que caracteriza uma forte mudança na correlação da tendência/fase de correção na direção da segunda. A tendência geral - dos mercados estudados - resume que os mercados mudam em termos tanto de movimento quanto de natureza desse movimento. Eles se tornam mais dinâmicos, menos previsíveis e rapidamente mutáveis. Os resultados confirmam isto, quer dizer, a correlação da tendência/fase de correção mudou no sentido dos movimentos laterais, além disso, antes a tendência tinha sido mais pronunciada e óbvia do que para o dia de hoje.

Conclusões

Para uma comparação mais clara de todos os testes, os valores totais de todos os instrumentos testados foram tabulados.

Instrumentos Testados Valor médio temporal da tendência, %
 EURUSD  62.54
 USDCHF  62.27
 USDJPY  63.05
 GBPUSD  60.68
 GOLD-6.17  59.55
 #MCD  59.71

Como apresentado na tabela de resumo, segundo os resultados do teste, pode-se tirar a seguinte conclusão: para as condições de teste definidas, o valor médio do mercado - no estado da tendência - é de cerca de 60%, além disso, do ponto de vista do histórico, do passado ao presente, a correlação tendência/fase de correção aumenta na direção da fase de correção, aproximando-se gradualmente da proporção inicial 30:70.

O que nos dizem os resultado que obtivemos?

  • Os mercados se tornam mais dinâmicos, a mudança entre as fases de tendência e de correção acontece com mais frequência.
  • As tendências prolongadas começaram a virar tendências de menor duração, e a natureza de seu movimento não foi tão pronunciada quanto antes.
  • A dinâmica, os movimentos e as fases do mercado se tornam mais complexos.

Fim do artigo

No final do artigo, anexado um arquivo com todos os ficheiros listados classificados em pastas. Portanto, para trabalhar corretamente, basta colocar a pasta MQL5 na raiz do terminal. 

Programas utilizados no artigo:

#
 Nome
Tipo
Descrição
1
TrendCount.mq5 Expert Advisor
 Ferramenta para realizar o teste 
2
TrendCountUI.mqh Biblioteca  Classe da Interface do usuário
3 ColorBBCandles.mq5 Indicador  Indicador de força e direção da tendência com base nas bandas de Bollinger
4 percentageoftrend.mq5 Indicador  Indicador de cálculo do estado de tendência/ fase de correção.
5 rsifilter.mq5 Indicador  Indicador RSI na forma de histograma com níveis definidos de sobrevenda/sobrecompra.
6 ZigZagTrendDetector.mq5  Indicador   Indicador que define o esteado do mercado através do ZigZag padrão.


Traduzido do russo por MetaQuotes Software Corp.
Artigo original: https://www.mql5.com/ru/articles/3188

Arquivos anexados |
MQL5.zip (1693.17 KB)
Criação de indicadores personalizados usando a classe CCanvas Criação de indicadores personalizados usando a classe CCanvas

O artigo descreve um exemplo de criação de indicadores personalizados usando as primitivas gráficas da classe CCanvas.

Sistema de negociação DiNapoli Sistema de negociação DiNapoli

No artigo, é examinado o sistema de negociação com níveis de Fibonacci desenvolvido e descrito por Joe DiNapoli. Além disso, são explicados os conceitos básicos e a essência do sistema, e é fornecido um exemplo de um indicador simples.

Interfaces gráficas X: Seleção de texto na caixa de texto multilinha (build 13) Interfaces gráficas X: Seleção de texto na caixa de texto multilinha (build 13)

Este artigo implementará a possibilidade de selecionar o texto usando várias combinações de teclas e excluir o texto selecionado, da mesma maneira que é feito em outros editores de texto. Além disso, vamos continuar com a otimização do código e prepararemos as classes para avançar para o processo final do segundo estágio da evolução da biblioteca, onde todos os controles serão renderizados como imagens separadas (telas).

Exemplo de indicador que constrói uma linha de suporte e resistência Exemplo de indicador que constrói uma linha de suporte e resistência

O artigo mostra a implementação de um indicador para construção de linhas de suporte e de resistência com base em condições formais. Você não só poderá aplicar o indicador, mas também entenderá quão fácil é realizá-lo. Agora você será capaz de formular as condições para desenhar linhas alterando o código do indicador ligeiramente para atender às suas necessidades.