Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Indicadores

Relative Moving Average Indicator - indicador para MetaTrader 5

Visualizaciones:
21
Ranking:
(2)
Publicado:
RMA_Engine.mq5 (20.93 KB) ver
RMA_Panel.mq5 (9.35 KB) ver
\MQL5\Include\RMA\
RegimeDetector.mqh (16.47 KB) ver
RmaCore.mqh (13.34 KB) ver
RmaDisplay.mqh (13.66 KB) ver
RmaTypes.mqh (5.87 KB) ver
SignalEngine.mqh (30.95 KB) ver
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Descripción general

Se trata de una adaptación fiel para MetaTrader 5 del marco de la media móvil relativa (RMA) presentado por el Dr. Daniel Alexandre Bloch en el curso «A Course on Systematic Trading with RMA». Una media móvil clásica reduce una ventana de precios a una única cifra suavizada, que indica el nivel pero no la rareza: un cierre alto puede estar muy alejado de todos los demás valores circundantes, o ser alto y, sin embargo, perfectamente habitual dentro de la ventana. La RMA responde a la segunda pregunta. Trata la ventana de seguimiento como una pequeña distribución, clasifica el precio actual dentro de ella e indica esa clasificación en una escala [0, 1] que tiene el mismo significado en todos los instrumentos y en todos los regímenes de volatilidad.

Nota: no se trata del «RMA» que muestran algunas plataformas de gráficos (el suavizado de Wilder, una variante de la EMA). A pesar de compartir las mismas siglas, es un concepto totalmente distinto. Aquí, RMA se refiere a la construcción de Bloch: estadísticas de precios medidas en relación con una media móvil y proyectadas sobre una distribución de rendimientos normalizados.

El marco consta de tres capas, y el código las refleja exactamente:

  • La media móvil simple (SMA) de la ventana deslizante de W cierres, considerada como el equilibrio local y fijada en cero.
  • La familia RMA, esdecir, la desviación de cada punto de referencia de la ventana respecto a ese equilibrio, expresada como la relación pura sma / x - 1, evaluada en el último cierre, el primer cierre, el cierre intermedio y los valores mínimo y máximo de la ventana. Al tratarse de relaciones, carecen de escala y son comparables entre distintos valores.
  • Los fractiles, que reexpresan la ventana como rendimientos normalizados (cierre / SMA - 1) y clasifican los valores actual, mínimo y máximo dentro de esa distribución. Se trata de la CDF empírica simple, tomada textualmente de la definición del apéndice del artículo, y f_w es la serie sobre la que, en realidad, se negocia todo lo que viene a continuación.

Construcción de la RMA: intervalo de precios → SMA → distribución normalizada → fractil

La construcción: una ventana deslizante de cierres se convierte en una media móvil simple (SMA); los cierres se reexpresan como una distribución de rendimientos normalizados en torno a esa SMA; y la posición del precio actual dentro de esa distribución se convierte en su fractil en la escala [0, 1].

Además de estos, el motor incluye dos lecturas derivadas. Un detector de regímenes clasifica la dispersión de los rendimientos normalizados como en expansión, en contracción o en transición, utilizando los «Relative Extremum Ratios» del artículo, corroborados por una pendiente de mínimos cuadrados, una puntuación z y un coeficiente de variación. Un monitor de movimientos adversos publica d_med_w, el fractil recentrado en la mediana, y D_k, la proporción de movimientos recientes de barra a barra que fueron al alza, lo que constituye una lectura de consistencia direccional que hace que la afirmación «este movimiento va en la dirección contraria» sea precisa, en lugar de una mera cuestión de opinión.

Se incluyen dos programas. RMA_Engine calcula todas las series y las muestra las diecinueve como búferes, de modo que un Asesor Experto u otro indicador pueda leer las cifras exactas en el gráfico en lugar de tener que volver a implementar los cálculos matemáticos y desincronizarse. RMA_Panel no calcula nada en absoluto: localiza el motor ya asociado al gráfico y refleja un grupo de sus búferes en una subventana propia, ya que la familia RMA se mide en fracciones de un por ciento y d_med_w está centrado en cero, por lo que ninguno de los dos es legible en el eje de 0 a 1 del motor.


Lo que dibuja el motor

El motor abre una ventana independiente con su eje vertical fijado en [0, 1] y dibuja seis gráficos:

Gráfico
Apariencia
Lo que indica
Régimen
Banda de color que ocupa toda la altura detrás de todo
Verde para la expansión, rojo para la contracción, ámbar para la expansión en proceso de cambio, azul para la contracción que se está iniciando. No se dibuja nada mientras el régimen aún esté indeciso, por lo que un calentamiento no comienza con una capa de color que signifique «aún no hay respuesta».
f_w
Línea azul gruesa
El fractil del cierre actual: la posición que ocupa la última rentabilidad normalizada dentro de su propia ventana. Esta es la serie principal.
f_min / f_max
Líneas punteadas rojas y verdes
Los fractiles del mínimo y el máximo de la ventana, el límite inferior y el límite superior de la envolvente que atraviesa f_w.
alpha_lo_mean / alpha_hi_mean
Líneas moradas y naranjas
Niveles de cuantiles suavizados: una media móvil exponencial (EMA) de f_w y de su complemento, lo que proporciona un fondo más lento frente al cual un pico en f_w se interpreta como tal.

Se trazan tres guías horizontales en los dos umbrales de entrada y en la mediana. Se construyen a partir de los mismos datos de entrada que recibe el asesor experto asociado, en lugar de estar codificadas de forma fija, por lo que reajustar los umbrales desplaza las guías con ellos, en lugar de dejar que el gráfico muestre discretamente un desacuerdo con las reglas.

Cómo interpretarlo. Un f_wque se apoya en la guía superior significaque el cierre actual se encuentra en el máximo de todo lo que ha registrado su ventana, que es donde se activa un movimiento bajista; un f_w en la guía inferior es el caso inverso. La mediana es el nivel por encima del cual un movimiento debe mantenerse, y cruzarla supone la salida natural. La banda de color proporciona contexto a esa lectura, ya que la estrategia del artículo consiste en abrir posiciones al inicio de una fase de expansión y cerrarlas durante la contracción.


Configuración recomendada

Configuración
Valor recomendado
Notas
Símbolo
Cualquiera
La escala de percentiles se normaliza automáticamente, por lo que no es necesaria una calibración por símbolo para que la lectura sea significativa. En el desarrollo y en las capturas de pantalla que aparecen a continuación se ha utilizado el par EURUSD.
Marco temporal
De M30 a H4
Funciona en cualquier marco temporal. La ventana se mide en barras, por lo que un marco temporal más corto con el mismo valor de W simplemente describe un tramo más corto del mercado.
Tamaño de la ventana (W)
106 barras
Valor por defecto. El artículo pretende que la ventana se calibre por activo, por lo que se trata de un punto de partida más que de una recomendación.
Historial necesario
W + barras de retrospectiva del régimen
126 barras con los valores por defecto. Cada gráfico comienza donde su propio módulo puede responder por primera vez, en lugar de en el periodo de calentamiento más largo del conjunto, por lo que los fractiles aparecen antes que la banda de régimen.


Características principales

Fiel al artículo

  • El fractil se define según el apéndice del artículo, f_i = (1 / |W_i|) * sum_j I( W_ij <= v_i ), y se ha implementado tal y como se describe. Cuando el texto del artículo y su apéndice discrepan, prevalece el apéndice y la discrepancia se documenta en el código fuente, en lugar de corregirse de forma silenciosa.
  • La clasificación de regímenes sigue las «Relative Extremum Ratios» (Ratios de Extremos Relativos), comprobando primero la contracción porque es la interpretación más estricta y requiere corroboración, mientras que la expansión es deliberadamente más fácil de alcanzar.
  • No se han añadido suavizaciones, umbrales ni filtros que no estén previstos en el código fuente.

Diseñado para ser leído por otros programas

  • Las diecinueve series se exponen como búferes de indicadores, seis representadas gráficamente y trece solo para cálculo, de modo que un EA puede leer los mismos números que muestra el gráfico y ambos nunca pueden discrepar.
  • El mapa de búferes reside en un único encabezado compartido, por lo que el motor, los paneles y cualquier usuario hablan un mismo lenguaje, en lugar de ir cada uno por su lado sin que ningún error de compilación avise a nadie.
  • Las fórmulas matemáticas residen íntegramente en clases «solo de encabezado», sin dependencia alguna de gráficos u órdenes, por lo que el mismo código puede ejecutar un script o un entorno de pruebas sin necesidad de utilizar stubs.

Recálculo incremental correcto

  • Cada pasada vuelve a calcular a partir de prev_calculated-1, no de prev_calculated. La barra en ese índice aún se estaba formando en la llamada anterior y su cierre solo se ha hecho definitivo ahora; dejarla tal cual congelaría un valor a medio formar en todas las series que dependen de ella, y la diferencia de fractil de barra a barra se convertiría en una diferencia entre dos números incompletos.
  • Las barras de calentamiento contienen EMPTY_VALUE en lugar de cero, por lo que un consumidor que llegue a mitad del calentamiento verá «ausente» en lugar de un número plausible.
  • La clasificación del régimen depende de la trayectoria dentro de su banda de transición, por lo que se mantiene un historial por barra en lugar de un campo acumulado, lo que permite que una pasada incremental retome la cadena desde la barra anterior.

Paneles que utilizan un segundo eje

  • El motor abre automáticamente los paneles que se le solicitan, comprobando primero el gráfico para que una plantilla que ya los contenga, o una reinicialización tras un cambio en la entrada, no apile una segunda copia detrás de la primera. Los paneles se eliminan con el motor, pero solo en el momento de la eliminación efectiva, por lo que al cambiar de marco temporal se vuelve a la disposición en la que se quedó.
  • El panel localiza el motor cotejando su nombre abreviado en el gráfico, en lugar de crear su propio identificador, por lo que nunca puede bifurcarse en un segundo cálculo con parámetros diferentes que se dibuje junto al real.


Capturas de pantalla

Ventana del oscilador RMA_Engine con fractiles, banda alfa y fondo de régimen en el EURUSD M30

La ventana del motor en el EURUSD, M30: f_w con su envolvente y las medias cuantílicas suavizadas, sobre el fondo de colores que indica el régimen.

Gráfico de tendencias bajistas con D_k y d_med_w en el EURUSD M30

El panel adverso: d_med_w centrado en cero con D_k por encima, la lectura de consistencia direccional.

Panel de paso de la familia RMA con rma_w, min y max en el EURUSD M30

El panel de la familia RMA: rma_w con el mínimo y el máximo de la ventana en su propia escala, la envolvente por la que transita el precio actual.


Instalación y estructura de archivos

Dos indicadores y cuatro archivos de cabecera. La estructura es importante: el motor carga el panel mediante la ruta relativa RMA\RMA_Panel, y los archivos de cabecera se incluyen como <RMA\...>, por lo que ambos deben encontrarse en sus respectivas subcarpetas RMA.

Archivo
Función
Descripción
Indicadores\RMA\RMA_Engine.mq5
Indicador principal
Ejecuta los tres módulos en las barras en tiempo real, vincula los diecinueve búferes, traza los seis gráficos y la banda de régimen, y abre los paneles. No contiene cálculos matemáticos propios.
Indicadores\RMA\RMA_Panel.mq5
Panel de paso
Sitúa el motor en el gráfico y refleja un grupo de sus búferes en una subventana con su propia escala. Dos modos: movimiento adverso (D_k, d_med_w) y la familia RMA (rma_w, rma_min, rma_max).
Include\RMA\RmaTypes.mqh
Vocabulario compartido
Las enumeraciones de régimen y de estados cruzados, el mapa de búferes y los recuentos de gráficos y paletas. El único punto en el que coinciden el motor, los paneles y cualquier consumidor.
Include\RMA\RmaCore.mqh
Núcleo numérico
El SMA, la familia RMA de cinco miembros, la distribución de rendimientos normalizada, la función de fractiles, el rango de la ventana y los límites alfa suavizados.
Include\RMA\RegimeDetector.mqh
Clasificación de regímenes
Expansión, contracción y los dos estados de transición, a partir de la envolvente de la relación de extremos corroborada por la pendiente, la puntuación z y el coeficiente de variación.
Incluir\RMA\AdverseMonitor.mqh
Consistencia direccional
d_med_w, el fractil centrado en la mediana, y D_k, la proporción al alza de sus recientes pasos de barra a barra.


Lectura de los búferes desde tu propio código

Obtén un identificador con iCustom en RMA\RMA_Engine y lee cualquier índice de los siguientes con CopyBuffer. Los índices del 0 al 6 corresponden a las series representadas gráficamente y del 7 al 18 son solo de cálculo, pero se pueden leer los diecinueve.

Índice
Serie
Significado
0, 1
Banda de régimen, índice de color
La altura del fondo y su ranura de paleta. No lleva ninguna medida, solo un color.
2
f_w
Fractil del último retorno normalizado de la ventana, en [0, 1]. La serie principal.
3, 4
f_min, f_max
Fractiles del mínimo y del máximo de la ventana.
5, 6
alpha_lo_mean, alpha_hi_mean
Media exponencial (EMA) de los límites inferior y superior de alfa.
7
sma
Media móvil simple de la ventana, en unidades de precio.
8 a 12
rma_w, rma_1, rma_mid, rma_min, rma_max
La familia RMA: sma dividido entre el último, el primer, el medio, el mínimo y el máximo de cierre, menos uno.
13
rango
Dispersión de los rendimientos normalizados de la ventana; el valor que lee el detector de régimen.
14, 15
alpha_lo, alpha_hi
El nivel de cuantíl bruto que ocupa f_w y su complemento.
16
regime
La enumeración del régimen como un valor de tipo doble: 0 expansión, 1 contracción, 2 estabilización, 3 ruptura, 4 desconocido.
17, 18
D_k, d_med_w
Consistencia direccional y el fractil centrado en la mediana.
Atención: cada grupo de entradas del indicador ocupa una ranura de parámetro en la llamada a iCustom, aunque no contenga ningún valor. Si se omite uno, los parámetros restantes se desplazan una posición hacia arriba, lo que carga un indicador de trabajo configurado con los números incorrectos y falla de forma silenciosa. Pasa las entradas exactamente en el orden en que están declaradas, grupos incluidos.


Parámetros de entrada

Grupo
Parámetros
Valores predeterminados
Ventana
InpWindowSize, InpSmoothingPeriod
106 barras, 10
Detección de regímenes
InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback
0,15; 3,0; 0,0001; 20; 0,1; 1,0; 100
Movimiento adverso
InpAdverseLookback
10 barras
Líneas de referencia
InpEntryUpperThreshold, InpEntryLowerThreshold
0,9; 0,1
Paneles
InpAutoAttachPanels, InpPanelAdverse, InpPanelRmaValues, InpAdverseThresholdDown, InpAdverseThresholdUp
verdadero, verdadero, falso, 0,3, 0,7
Fondo del régimen
InpShowRegimeBand más un color por régimen
verdadero, verde oscuro / rojo / ámbar / azul
Nota: los paneles se omiten automáticamente en una ejecución no visual del Strategy Tester, por lo que no se dibuja nada donde no hay un gráfico sobre el que dibujarlo.


Base de investigación

La implementación se basa en:

  • Daniel Alexandre Bloch, «A Course on Systematic Trading with RMA», disponible en SSRN.

Hay una salvedad que conviene señalar claramente, ya que proviene de la propia fuente: la sección «Resultados» del artículo se deja como trabajo futuro. Ofrece un marco y su mecánica, no un historial empírico. Lo que este indicador te ofrece es una descripción del estado del mercado en una escala que tiene el mismo significado en todas partes, lo cual constituye una base para tus propias pruebas, más que una ventaja validada heredada de la fuente.

Un artículo complementario explica las matemáticas y la implementación de cada módulo, y crea el Asesor Experto que opera con estos buffers: «Implementación del marco de la media móvil relativa (RMA) de Bloch en MQL5».

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/75472

Impulse Gold Impulse Gold

Muestra de estrategia impulso Oro a favor de la tendencia

SpreadAudit: el spread real del bróker a partir del historial M1 SpreadAudit: el spread real del bróker a partir del historial M1

El script recoge el spread real de tu bróker a partir del campo «spread» de los gráficos de 1 minuto y muestra la mediana, el percentil 90 y el 99 en unidades de precio, en puntos y en fracciones de ATR, y además exporta a un archivo CSV el spread medio y máximo de cada hora del día. Es necesario para probar estrategias con los costes reales de tu cuenta, y no con un spread «típico» calculado de memoria.

Trading Panel EA Trading Panel EA

Pro Manager es un asistente de trading «todo en uno» para MT5 diseñado para empresas de trading por cuenta propia y operadores profesionales. Ejecuta operaciones más rápido, gestiona las posiciones de forma más inteligente, controla el riesgo de manera eficiente y automatiza las tareas diarias de trading con potentes herramientas como «Break-even», «Average TP», gestión de «Magic Number» y «Auto Grid».

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.