Se você está em busca de uma ferramenta que possa te ajudar a entender melhor a trajetória de uma linha desenhada a partir de um conjunto de pontos de dados, o Indicador Theil-Sen é uma excelente opção. Esse indicador basicamente faz a estimativa da linha de tendência, utilizando a regressão sobre uma série de valores, e calcula a inclinação dessa linha resultante.
A seleção do conjunto de dados pode ser feita a partir de médias móveis simples, médias móveis exponenciais, preços de fechamento, ou preços máximos/mínimos, que são coletados automaticamente do gráfico do MetaTrader. Você só precisa escolher um tipo de dado para coletar, e o melhor: ele suporta múltiplas moedas simultaneamente.
iTSlope(asymbol,timeframe,regperiod,adataset,rmp,rtc,slope,line_nickname,enable_text,ashift); // Esta é a função principal para usar no seu EA. Apenas insira seus próprios parâmetros.// Traders manuais podem usar isso ou utilizar o indicador diretamente.

Como de costume, esse indicador suporta múltiplas moedas ao mesmo tempo. Estou incluindo a ferramenta "BreakPoint" aqui, mas vale ressaltar que ela não é necessária para o funcionamento do indicador.
Veja como a linha de tendência se comporta em um mercado lateral:


Agora, veja como a linha de tendência aparece em um mercado em tendência:

Para aqueles que estão curiosos, aqui está um exemplo de um Expert Advisor para usar com o Indicador Theil-Sen:
//+------------------------------------------------------------------+//| demo.mq4 |//| Copyright 2020, Everybody Software Corp. |//| https://anywhere.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, Everybody Software Corp."#property link "https://anywhere.com"#property version "1.00"#property strict#include <TheilSen_Indicator.mqh> #include <BreakPoint.mqh>//<--- não requerido//+------------------------------------------------------------------+//| Função de inicialização do Expert |//+------------------------------------------------------------------+intOnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+//| Função de desinicialização do Expert |//+------------------------------------------------------------------+voidOnDeinit(constint reason) { } //+------------------------------------------------------------------+//| Função Tick do Expert |//+------------------------------------------------------------------+voidOnTick() { //--------- essas variáveis são criadas vazias, mas elas conterão dados após o uso do iTSlop() abaixo. ------// double slope=0;// a inclinação da linha de regressão. ENUM_TIMEFRAMES timeframe=0;// este é o timeframe para o símbolo. 0 significa timeframe do gráfico atual. int regperiod=20,// o período de regressão. quantas barras você quer usar para a regressão. ashift=1;// o deslocamento da barra onde você deseja que a linha de regressão seja desenhada. string asymbol="",// este é o símbolo/par de moedas que você deseja usar para os cálculos. "" significa símbolo atual. adataset="ema_close",// o tipo de dado que você deseja usar para a regressão. line_nickname="qualquer_coisa_aqui", rmp,// a "fase do mercado" calculada, que é uma descrição específica do mercado rtc;// a "tendência do mercado" calculada, que é uma descrição geral do mercado. bool enable_text=true;// quando definido como true, os dados textuais são exibidos no gráfico atual. iTSlope(asymbol,timeframe,regperiod,adataset,rmp,rtc,slope,line_nickname,enable_text,ashift);// moeda única // if(rmp == "trending")BreakPoint("","",true,"rmp",rmp,"rtc",rtc,"asymbol",asymbol); } //+------------------------------------------------------------------+
Agradeço especialmente ao whroeder e aos demais que ajudaram a esclarecer o conceito.

Comentário 0