![Quanto dura a tendência?](https://c.mql5.com/i/articles/overlay.png)
Quanto dura a tendência?
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.
- 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.
- 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).
- Desenvolver uma ferramenta que o leitor possa usar em pesquisas independentes de acordo com as condições de seu interesse.
- 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 |
7 | 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 pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/3188
![Interfaces gráficas X: Seleção de texto na caixa de texto multilinha (build 13)](https://c.mql5.com/2/27/MQL5-avatar-XRedHighlight-001__1.png)
![Ângulos em negociação e a necessidade de estudá-los](https://c.mql5.com/2/27/MQL5-avatar-corner-003.png)
![Exemplo de indicador que constrói uma linha de suporte e resistência](https://c.mql5.com/2/28/MQL5-avatar-SupportLines-001.png)
![Criação de indicadores personalizados usando a classe CCanvas](https://c.mql5.com/2/28/MQL5-avatar-CCanvasIndicator-001.png)
![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
O que não consegui encontrar foi o código do indicador ADX modificado!
Se puder publicar eu agradeceria muito!