El Indicador Theil-Sen es una herramienta fantástica para estimar la trayectoria general de una línea a partir de un conjunto de puntos de datos. Este indicador se basa en la regresión de los valores que elijas y calcula la pendiente de la línea de regresión resultante. Puedes utilizar diferentes conjuntos de datos, como medias móviles simples, medias móviles exponenciales, precios de cierre o precios máximos/mínimos, y se recopilan automáticamente desde el gráfico de MetaTrader. Solo necesitas seleccionar el tipo de dato que deseas analizar. Además, ¡es compatible con múltiples divisas!
iTSlope(asymbol,timeframe,regperiod,adataset,rmp,rtc,slope,line_nickname,enable_text,ashift); // Esta es la función principal para usar en tu EA. Solo ingresa tus propios parámetros. // Los traders manuales pueden usar esto o utilizar el indicador directamente.

Como es habitual, este indicador soporta múltiples divisas al mismo tiempo. Aquí incluyo la herramienta "BreakPoint", aunque no es necesaria para el funcionamiento del indicador.
Así es como se ve la línea de tendencia en un mercado lateral:


Ahora, así es como se ve la línea de tendencia en un mercado en tendencia:

A continuación, te muestro un ejemplo de un Asesor Experto:
//+------------------------------------------------------------------+ //| 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>//<--- no requerido //+------------------------------------------------------------------+ //| Función de inicialización del Asesor Experto | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Función de desinicialización del Asesor Experto | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Función de tick del Asesor Experto | //+------------------------------------------------------------------+ void OnTick() { //--------- estas variables se crean vacías pero contendrán datos después de usar iTSlop() a continuación. ------// double slope=0;// la pendiente de la línea de regresión. ENUM_TIMEFRAMES timeframe=0;// este es el marco de tiempo para el símbolo. 0 significa el marco de tiempo actual del gráfico. int regperiod=20,// el período de regresión. ¿Cuántas barras quieres utilizar para la regresión? ashift=1;// el desplazamiento de la barra donde deseas que se dibuje la línea de regresión. string asymbol="",// este es el símbolo/par de divisas sobre el que deseas realizar los cálculos. "" significa símbolo actual. adataset="ema_close",// el tipo de dato que deseas utilizar para la regresión. line_nickname="cualquier_cosa_aquí", rmp,// la "fase de mercado" calculada, que es una descripción específica del mercado rtc;// la "tendencia de mercado" calculada, que es una descripción general del mercado. bool enable_text=true;// cuando se establece en true, se muestra información textual en el gráfico actual. iTSlope(asymbol,timeframe,regperiod,adataset,rmp,rtc,slope,line_nickname,enable_text,ashift);// divisa única //if(rmp == "trending")BreakPoint("","","",true,"rmp",rmp,"rtc",rtc,"asymbol",asymbol); } //+------------------------------------------------------------------+
Agradecimientos especiales a whroeder y a otros que ayudaron a aclarar el concepto.