Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Visualizaciones:
- 21
- Ranking:
- Publicado:
-
¿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.
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.

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

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.

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

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. |
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 |
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
Muestra de estrategia impulso Oro a favor de la tendencia
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
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)
El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.