Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 5): Volatility Navigator EA
Introducción
Navegar por las complejidades del trading implica mucho más que simplemente identificar las posibles direcciones del mercado; también exige una ejecución precisa. Muchos operadores sufren reveses no por una mala ejecución de las operaciones, sino por imprecisiones en sus puntos de entrada, colocación de stop loss u objetivos de take profit.
Para hacer frente a este reto, he desarrollado una nueva herramienta llamada Volatility Navigator utilizando el lenguaje de programación MQL5, diseñada específicamente para optimizar estos aspectos críticos del trading. A diferencia de mis herramientas anteriores, que se centraban principalmente en predecir las tendencias del mercado, Volatility Navigator identifica de forma independiente los puntos de entrada óptimos, los niveles de stop loss y los objetivos de take profit.
Al incorporar indicadores técnicos avanzados en nuestro análisis de la evolución de los precios, nuestro objetivo es mejorar la experiencia de negociación y perfeccionar la formulación de estrategias.
Consulte las siguientes secciones a continuación.
- Introducción
- Indicadores técnicos
- Descripción general de la estructura del EA
- La lógica principal del EA
- Implementación de alertas y notificaciones
- Pruebas
- Conclusión
Indicadores técnicos
Los indicadores técnicos se pueden clasificar en varios tipos, incluidos indicadores de tendencia, indicadores de impulso, indicadores de volatilidad e indicadores de volumen, cada uno de los cuales cumple distintas funciones en el análisis del mercado financiero. Algunos ejemplos ampliamente utilizados incluyen la media móvil, el índice de fuerza relativa (RSI), las Bandas de Bollinger y la convergencia-divergencia de la media móvil (Moving Average Convergence Divergence, MACD).
Analicemos con más detalle los tres indicadores que utilizaremos junto con la acción del precio para lograr nuestros objetivos: las Bandas de Bollinger, el índice de fuerza relativa (Relative Strength Index, RSI) y el rango verdadero promedio (Average True Range, ATR).
- Bandas de Bollinger
Las Bandas de Bollinger fueron desarrolladas por John Bollinger a principios de la década de 1980 como una herramienta de análisis técnico para ayudar a los operadores a identificar tendencias del mercado y posibles reversiones de precios. El concepto surgió del deseo de Bollinger de proporcionar una forma más dinámica de medir la volatilidad de los precios en comparación con los indicadores técnicos tradicionales. John Bollinger buscó crear una herramienta comercial que pudiera adaptarse a las condiciones cambiantes del mercado.
Quería un indicador que se ajustara en función de la volatilidad del mercado, lo que lo llevó a la idea de utilizar promedios móviles junto con una medida de variación de precios. Las Bandas de Bollinger constan de tres líneas:
- La banda media suele ser una media móvil simple (Simple Moving Average, SMA) de los precios de cierre durante un período determinado (normalmente 20 días).
- La banda superior es la banda media más un número específico de desviaciones estándar (generalmente dos).
- La banda inferior es la banda media menos el mismo número de desviaciones estándar.

Figura 1. Bandas de Bollinger
El uso de desviaciones estándar es clave para las Bandas de Bollinger, ya que proporciona una medida estadística de volatilidad. Al incorporar esta medida, las Bandas de Bollinger pueden encapsular eficazmente los movimientos de precios dentro de un rango, ayudando a los operadores a reconocer posibles rupturas o reversiones.
Los traders suelen utilizar las Bandas de Bollinger para identificar condiciones de sobrecompra o sobreventa, posibles reversiones de tendencias y para medir la fuerza de los movimientos de precios. Por ejemplo, los precios que tocan la banda superior pueden indicar una condición de sobrecompra, mientras que los precios que tocan la banda inferior pueden sugerir una condición de sobreventa.
- Índice de fuerza relativa (Relative Strength Index, RSI)
El índice de fuerza relativa (Relative Strength Index, RSI) fue desarrollado por J. Welles Wilder Jr. Presentado en su libro de 1978 "New Concepts in Technical Trading Systems" (Nuevos conceptos en sistemas técnicos de negociación), Wilder se propuso crear un oscilador de momentum que ayudara a los operadores a identificar condiciones de sobrecompra y sobreventa en los mercados financieros. A continuación se muestra la fórmula para calcular el RSI.
Figura 2. Fórmula RSI
El RSI mide la velocidad y el cambio de los movimientos de precios, lo que ayuda a identificar condiciones de sobrecompra o sobreventa en un mercado durante un período específico, generalmente 14 días. Con un rango de 0 a 100, un RSI por encima de 70 generalmente indica que un activo puede estar sobrecomprado, mientras que un RSI por debajo de 30 sugiere que puede estar sobrevendido.
Los traders utilizan el RSI para señalar posibles reversiones o confirmar tendencias. Además, la divergencia entre el RSI y la acción del precio puede indicar un debilitamiento del impulso, presentando más oportunidades comerciales.

Figura 3. Gráfico RSI
- Rango verdadero promedio (Average True Range, ATR)
El indicador Average True Range (Average True Range, ATR) fue desarrollado por J. Welles Wilder Jr. Se presentó en su libro de 1978, «New Concepts in Technical Trading Systems» (Nuevos conceptos en sistemas técnicos de trading). Wilder creó el ATR para medir la volatilidad del mercado calculando el rango verdadero (True Range, TR), que tiene en cuenta el mayor rango de movimiento de los precios durante un periodo determinado.
Desde entonces, el ATR se ha convertido en una herramienta muy utilizada en el análisis técnico, que ayuda a los operadores a evaluar la volatilidad y gestionar el riesgo en diversos mercados financieros. El rango verdadero promedio (Average True Range, ATR) es un indicador de volatilidad que mide el grado de movimiento de los precios durante un período determinado, lo que proporciona información sobre la volatilidad del mercado sin indicar la dirección del movimiento de los precios.
Un valor ATR más alto indica una mayor volatilidad, mientras que un valor ATR más bajo indica una menor volatilidad. Los operadores utilizan el ATR para diseñar estrategias de gestión de riesgos, como establecer niveles de stop-loss y el tamaño de las posiciones en función de las condiciones del mercado. Esto ayuda a adaptar las estrategias de trading a la volatilidad variable del mercado, lo que permite operar de forma más eficaz en diferentes escenarios. Veamos a continuación la fórmula para calcular el ATR.
Figura 4. Cálculo del ATR
El objetivo de utilizar el rango medio verdadero (Average True Range, ATR) en la estrategia de trading es ajustar dinámicamente los niveles de stop loss y take profit en función de la volatilidad actual del mercado. El ATR sirve como medida del movimiento de los precios, lo que permite al Asesor Experto establecer niveles más amplios durante los periodos de alta volatilidad y niveles más ajustados cuando el mercado está más tranquilo. Este enfoque mejora la gestión del riesgo al garantizar que las operaciones no se cierren prematuramente en condiciones volátiles, al tiempo que aprovecha los beneficios potenciales cuando el movimiento del mercado es más moderado. Al incorporar ATR, el EA puede adaptarse a las condiciones cambiantes del mercado, lo que conduce a una ejecución más eficaz de las operaciones y a mayores posibilidades de éxito.
Descripción general de la estructura del EA
El Asesor Experto (Expert Advisor, EA) Volatility Navigator está diseñado con un diseño estructurado que cumple con los estándares de programación MQL5 . Comprender este diseño es fundamental para configurar el EA de manera efectiva y realizar ajustes a medida que cambian las condiciones del mercado. En MQL5, los identificadores de indicadores son herramientas fundamentales que agilizan el proceso de uso de indicadores técnicos dentro del EA. En lugar de recalcular los indicadores cada vez que cambia el precio, el EA puede consultar rápidamente estos identificadores para obtener los valores más recientes.
Por ejemplo, cada vez que se ejecuta la función OnTick(), el EA puede acceder de manera eficiente a los valores relevantes del indicador, lo que resulta especialmente beneficioso en condiciones de mercado que cambian rápidamente. Este acceso inmediato permite tomar mejores medidas basadas en la dinámica actual del mercado.
Funciones principales del EA
Los componentes principales de un Asesor Experto MQL5 consisten en tres funciones clave: OnInit(), OnTick() y OnDeinit().
- Función OnInit():
int OnInit() { // Initialize RSI rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); // Initialize Bollinger Bands bbHandle = iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE); // Initialize ATR atrHandle = iATR(NULL, 0, atrPeriod); return INIT_SUCCEEDED; }
En el fragmento de código anterior, estamos creando identificadores para los indicadores RSI, Bandas de Bollinger y rango verdadero promedio (ATR), los cuales ayudarán al EA a tomar decisiones comerciales.
- Función OnTick():
La función OnTick() es fundamental, ya que se activa cada vez que se produce una fluctuación de precios en el mercado. Aquí es donde el EA evalúa los valores actuales de los indicadores y determina las acciones comerciales adecuadas.
void OnTick() { double rsiValue = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); double upperBand, middleBand, lowerBand; iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE, upperBand, middleBand, lowerBand); double atrValue = iATR(NULL, 0, atrPeriod); // Trading logic if (rsiValue > 70 && Close[0] > upperBand) { // Logic to place a sell order } else if (rsiValue < 30 && Close[0] < lowerBand) { // Logic to place a buy order } }
Aquí, el EA comprueba el valor del RSI, las Bandas de Bollinger y el ATR para tomar decisiones de trading informadas. Por ejemplo, vende cuando el RSI indica condiciones de sobrecompra y el precio supera la Banda de Bollinger superior.
- Función OnDeinit():
La función OnDeinit() se llama cuando se elimina el EA del gráfico. Esta función desempeña un papel fundamental en la limpieza de recursos al liberar los identificadores de indicadores.
void OnDeinit(const int reason) { // Release resources for indicators IndicatorRelease(rsiHandle); IndicatorRelease(bbHandle); IndicatorRelease(atrHandle); }
Parámetros de entrada
Una de las características más destacadas del Volatility Navigator EA es su flexibilidad gracias a los parámetros de entrada personalizables. Estos parámetros permiten a los operadores adaptar el comportamiento del EA para alinearlo con sus estrategias únicas. Algunos parámetros de entrada esenciales incluyen:
- Período RSI:
input int rsiPeriod = 14; // Standard period for RSI calculation
- Periodo de las Bandas de Bollinger:
input int bbPeriod = 20; // Standard period for Bollinger Bands
- Período ATR:
input int atrPeriod = 14; // Period for ATR
La lógica principal del EA
Comencemos por examinar el siguiente diagrama, que ilustra cómo se genera la señal para una orden de compra, siendo el proceso para una orden de venta el inverso.
Figura 5. Condiciones de generación de señales
- Proceso de cálculo de señales
La función principal de Volatility Navigator EA es analizar las condiciones del mercado para generar señales comerciales. Como parte de este proceso, el EA recupera los valores actuales de los indicadores relevantes en la función OnTick. A continuación se muestra un fragmento que ilustra cómo calcular el RSI, las Bandas de Bollinger y el ATR dentro del EA.
// Declare indicator handles int rsiHandle; int bbHandle; int atrHandle; // OnInit function int OnInit() { // Create indicator handles rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); bbHandle = iBands(NULL, 0, bbPeriod, bbDevUp, bbDevDown, PRICE_CLOSE); atrHandle = iATR(NULL, 0, atrPeriod); return(INIT_SUCCEEDED); }
En esta configuración, la función OnInit inicializa los controladores para el RSI, las Bandas de Bollinger y el ATR, lo que permite que el EA acceda a sus valores para los cálculos en curso.
- Evaluación de las condiciones de RSI
El indicador RSI ayuda a identificar puntos potenciales de entrada y salida al indicar condiciones de sobrecompra y sobreventa. El análisis del valor RSI permite al EA tomar decisiones comerciales estratégicas. El siguiente fragmento muestra cómo comprobar los valores RSI.
double rsiValue = iCustom(NULL, 0, "RSI", rsiPeriod, 0); if (rsiValue > 70) { // Market is overbought - potentially signal to sell } else if (rsiValue < 30) { // Market is oversold - potentially signal to buy }
En este código, el EA recupera el valor RSI actual y lo compara con los umbrales predefinidos de 70 y 30 para determinar posibles señales comerciales.
- Análisis de las Bandas de Bollinger
double upperBand = iBands(NULL, 0, bbPeriod, bbDevUp, 0, PRICE_CLOSE); double lowerBand = iBands(NULL, 0, bbPeriod, -bbDevDown, 0, PRICE_CLOSE); double price = Close[0]; if (price < lowerBand) { // Price is touching the lower band - potential buy signal } else if (price > upperBand) { // Price is touching the upper band - potential sell signal }
Este fragmento muestra la lógica que emplea el EA para comprobar si el precio actual se encuentra cerca de las Bandas de Bollinger superiores o inferiores, lo que puede activar señales de compra o venta.
- Incorporación del rango verdadero promedio (ATR)
ATR proporciona información sobre la volatilidad del mercado y ayuda a gestionar el riesgo mediante la configuración de stop-loss y take-profit. El siguiente código recupera el valor ATR:
double atrValue = iATR(NULL, 0, atrPeriod); if (atrValue > atrThreshold) { // High volatility - consider entering trades } else { // Low volatility - potentially stay out of the market }
En este ejemplo, el EA comprueba el ATR para determinar si la volatilidad es suficiente para justificar la entrada en una operación. Los operadores suelen preferir valores altos de ATR, ya que indican que se prevén movimientos significativos en los precios.
- Generación de señales comerciales
Al combinar la información del RSI, las Bandas de Bollinger y el ATR, el EA genera señales de trading más fiables. El siguiente fragmento ilustra cómo el EA formularía estas señales:
if (rsiValue < 30 && price < lowerBand && atrValue > atrThreshold) { // Generate buy signal } else if (rsiValue > 70 && price > upperBand && atrValue > atrThreshold) { // Generate sell signal }En este análisis compuesto, se produce una señal de compra cuando el mercado está sobrevendido, tal y como indica el RSI, el precio toca la banda de Bollinger inferior y el ATR sugiere una volatilidad adecuada. Por el contrario, se genera una señal de venta en condiciones opuestas.
- Retroalimentación visual en el gráfico
Para mejorar la experiencia del usuario, el EA proporciona retroalimentación visual cuando genera señales. El siguiente código demuestra cómo se implementa esto con marcas de gráfico claras:
void DrawTradeSignals() { if (buySignal) { // Draw buy signal on the chart ObjectCreate(0, "BuySignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } else if (sellSignal) { // Draw sell signal on the chart ObjectCreate(0, "SellSignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } }
En resumen, la lógica principal de Volatility Navigator EA gira en torno a la evaluación sistemática de los datos actuales del mercado a través de múltiples indicadores. Al combinar información del RSI, las Bandas de Bollinger y el ATR, el EA puede generar señales comerciales sólidas y, al mismo tiempo, brindar información visual valiosa en el gráfico. Este enfoque multifacético mejora las evaluaciones de los comerciantes y, en última instancia, ayuda a navegar de manera efectiva en mercados volátiles.
Implementación de alertas y notificaciones en Volatility Navigator EA
El asesor experto (EA) Volatility Navigator está equipado con un sistema integrado de alerta y notificación que mejora la capacidad del operador para responder a las condiciones del mercado de manera efectiva. Este sistema es esencial para proporcionar información y alertas oportunas basadas en señales comerciales específicas generadas por los indicadores principales del EA: el índice de fuerza relativa (RSI), las Bandas de Bollinger y el rango verdadero promedio (ATR).
- Tipos de alertas en el EA
Alertas de audio: El EA está programado para emitir notificaciones de audio cada vez que se activa una señal de trading significativa. Por ejemplo, cuando el RSI cruza por encima de 70, lo que indica una condición de sobrecompra, o cae por debajo de 30, lo que indica una condición de sobreventa, sonará una alerta de audio. Estas alertas permiten a los comerciantes reaccionar inmediatamente, lo que facilita una rápida toma de decisiones basada en las oportunidades de mercado identificadas.
Alertas visuales: Además de las señales de audio, el EA incorpora alertas visuales directamente en el gráfico de operaciones. Por ejemplo, cuando se genera una señal comercial, el EA puede cambiar el color de la línea de precio o mostrar un mensaje en pantalla resaltando la naturaleza de la señal (compra o venta). Esta función permite a los traders echar un vistazo rápido a sus gráficos y evaluar las condiciones actuales del mercado sin depender únicamente de las notificaciones de audio.
- Integración de alertas en la lógica de EA
Las alertas y notificaciones dentro del Volatility Navigator EA están perfectamente integradas en su lógica comercial principal:
Durante cada ejecución de OnTick, el EA monitorea continuamente los indicadores en busca de posibles señales comerciales. Cuando el EA detecta que se han alcanzado umbrales específicos, por ejemplo, el RSI cruza un nivel predefinido, se activa una secuencia de alerta. Una vez que se confirma una señal comercial, el EA activa las alertas correspondientes.
Este proceso de activación puede incluir reproducir un sonido o generar un marcador visual en el gráfico. Las alertas proporcionan información inmediata sobre las condiciones del mercado, lo que ayuda a los operadores a tomar decisiones rápidas e informadas. Este compromiso promueve la participación activa en el proceso comercial, aumentando la probabilidad de capturar movimientos rentables del mercado.
// Example of defining thresholds double rsiValue = iRSI(NULL, 0, 14, PRICE_CLOSE); // Check for overbought and oversold conditions if (rsiValue > 70) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OverboughtAlert", OBJ_TEXT, 0, Time[0], High[0]); ObjectSetText("OverboughtAlert", "Overbought Signal!", 12, "Arial", clrRed); // Additional actions like placing an order can be added here } else if (rsiValue < 30) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OversoldAlert", OBJ_TEXT, 0, Time[0], Low[0]); ObjectSetText("OversoldAlert", "Oversold Signal!", 12, "Arial", clrGreen); // Additional actions like placing an order can be added here }
El fragmento de código proporcionado está diseñado para implementar alertas audiovisuales dentro del Asesor Experto (EA) Volatility Navigator basándose en el comportamiento del Índice de Fuerza Relativa (RSI). En primer lugar, el código calcula el valor RSI actual utilizando la función iRSI, que toma como entradas el símbolo del gráfico actual, el marco de tiempo, el período (14) y el precio de cierre. Luego verifica si el valor RSI supera el umbral de 70, lo que significa condiciones de sobrecompra. Si se cumple esta condición, se invoca la función PlaySound para reproducir una alerta de audio, solicitando la atención inmediata del comerciante.

Figura 6. Alertas visuales
Además, se crea una alerta visual en el gráfico comercial colocando un objeto de texto en el nivel de precio alto actual, lo que indica esta señal de sobrecompra en texto rojo para garantizar que se destaque. Por el contrario, si el valor RSI cae por debajo del umbral de 30, lo que indica condiciones de sobreventa, se sigue el mismo procedimiento: se reproduce una alerta de audio y se genera un objeto de texto en el nivel de precio bajo actual, esta vez mostrando la señal en verde.
Este sistema de alerta dual, que incluye elementos tanto auditivos como visuales, mejora la capacidad del trader de mantenerse informado y reaccionar rápidamente a movimientos significativos del mercado, mejorando así la eficiencia general del trading.
El sistema de alerta auditiva y visual del Volatility Navigator EA está diseñado para facilitar respuestas oportunas a las condiciones cambiantes del mercado. Al implementar estas alertas, el EA permite a los traders mantenerse informados y listos para actuar, mejorando en última instancia su eficiencia y éxito comerciales generales.
A continuación se muestra el código completo del Asesor Experto (EA). Este código contiene todas las instrucciones y la lógica necesarias que rigen sus operaciones comerciales.
//+------------------------------------------------------------------+ //| Volatility Navigator.mq5 | //| Copyright 2024, Christian Benjamin | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/en/users/lynnchris" #property description "The EA analyzes market conditions using the Bollinger Bands, RSI and ATR indicators" #property version "1.1" #property strict // Input parameters for trading strategy input int rsiPeriod = 14; // Period for RSI calculation input double overboughtLevel = 70.0; // RSI level for overbought condition input double oversoldLevel = 30.0; // RSI level for oversold condition input int bbPeriod = 20; // Period for Bollinger Bands input double bbDeviation = 2.0; // Deviation for Bollinger Bands input int atrPeriod = 14; // ATR period for stop loss and take profit calculations input double atrMultiplier = 1.5; // Multiplier for ATR in calculating stop loss and take profit input string signalSound = "alert.wav"; // Sound file for alert notifications // Indicator handles for Bollinger Bands and ATR int bbHandle = 0; int atrHandle = 0; // Function to clear previous drawings from the chart void ClearPreviousDrawings() { // Delete any previously created trade lines and signal text if (ObjectFind(0, "EntryPoint") != -1) ObjectDelete(0, "EntryPoint"); if (ObjectFind(0, "StopLoss") != -1) ObjectDelete(0, "StopLoss"); if (ObjectFind(0, "TakeProfit") != -1) ObjectDelete(0, "TakeProfit"); if (ObjectFind(0, "SignalText") != -1) ObjectDelete(0, "SignalText"); if (ObjectFind(0, "BuyArrow") != -1) ObjectDelete(0, "BuyArrow"); if (ObjectFind(0, "SellArrow") != -1) ObjectDelete(0, "SellArrow"); } // Function to draw entry points, stop loss, and take profit on the chart void DrawTradeLines(double entryPoint, double stopLoss, double takeProfit, string signalText) { // Clear previous drawings before drawing new ones ClearPreviousDrawings(); // Draw the entry point line if (!ObjectCreate(0, "EntryPoint", OBJ_HLINE, 0, TimeCurrent(), entryPoint)) Print("Failed to create EntryPoint line. Error: ", GetLastError()); ObjectSetInteger(0, "EntryPoint", OBJPROP_COLOR, clrGreen); ObjectSetInteger(0, "EntryPoint", OBJPROP_WIDTH, 2); // Draw the stop loss line if (!ObjectCreate(0, "StopLoss", OBJ_HLINE, 0, TimeCurrent(), stopLoss)) Print("Failed to create StopLoss line. Error: ", GetLastError()); ObjectSetInteger(0, "StopLoss", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "StopLoss", OBJPROP_WIDTH, 2); // Draw the take profit line if (!ObjectCreate(0, "TakeProfit", OBJ_HLINE, 0, TimeCurrent(), takeProfit)) Print("Failed to create TakeProfit line. Error: ", GetLastError()); ObjectSetInteger(0, "TakeProfit", OBJPROP_COLOR, clrBlue); ObjectSetInteger(0, "TakeProfit", OBJPROP_WIDTH, 2); // Draw a label with the signal text to provide information at a glance if (!ObjectCreate(0, "SignalText", OBJ_LABEL, 0, TimeCurrent(), entryPoint + 10)) Print("Failed to create SignalText label. Error: ", GetLastError()); ObjectSetInteger(0, "SignalText", OBJPROP_XDISTANCE, 10); ObjectSetInteger(0, "SignalText", OBJPROP_YDISTANCE, 30); ObjectSetInteger(0, "SignalText", OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, "SignalText", OBJPROP_FONTSIZE, 12); ObjectSetString(0, "SignalText", OBJPROP_TEXT, signalText); } // Function to draw arrows on the chart at entry points void DrawEntryArrow(double price, string label, color arrowColor) { if (!ObjectCreate(0, label, OBJ_ARROW, 0, TimeCurrent(), price)) { Print("Failed to create arrow object. Error: ", GetLastError()); return; } ObjectSetInteger(0, label, OBJPROP_ARROWCODE, 233); // Arrow code for upward direction ObjectSetInteger(0, label, OBJPROP_COLOR, arrowColor); ObjectSetInteger(0, label, OBJPROP_WIDTH, 2); // Set the width of the arrow } // Function to manage open positions for efficient trade execution void ManageOpenPositions(string symbol) { // Loop through all open positions for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if (PositionSelectByTicket(ticket)) { // Check if the position is for the current symbol if (PositionGetString(POSITION_SYMBOL) == symbol) { double currentProfit = PositionGetDouble(POSITION_PROFIT); Print("Current Profit for position: ", currentProfit); // Additional management logic can be added here (e.g., close position, update SL/TP) } } } } // Function to calculate trade parameters such as entry point, stop loss, and take profit void CalculateTradeParameters() { // Get the current RSI value double rsiValue = iRSI(Symbol(), PERIOD_CURRENT, rsiPeriod, PRICE_CLOSE); Print("RSI Value: ", rsiValue); double bbUpper = 0.0; double bbLower = 0.0; double atrValue = 0.0; // Get the latest closing prices double closePrices[]; if (CopyClose(NULL, 0, 0, 1, closePrices) <= 0) { Print("Error copying close prices: ", GetLastError()); return; // Exit if there's an error } // Initialize and get values for Bollinger Bands if (bbHandle == 0) { bbHandle = iBands(NULL, 0, bbPeriod, 0, bbDeviation, PRICE_CLOSE); } if (bbHandle != INVALID_HANDLE) { double bbBuffer[]; // Get the upper and lower Bollinger Bands if (CopyBuffer(bbHandle, 1, 0, 1, bbBuffer) > 0) { bbUpper = bbBuffer[0]; // Upper band value Print("Bollinger Band Upper: ", bbUpper); } if (CopyBuffer(bbHandle, 2, 0, 1, bbBuffer) > 0) { bbLower = bbBuffer[0]; // Lower band value Print("Bollinger Band Lower: ", bbLower); } // Initialize and get the ATR value if (atrHandle == 0) { atrHandle = iATR(NULL, 0, atrPeriod); } if (atrHandle != INVALID_HANDLE) { double atrBuffer[]; if (CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) { atrValue = atrBuffer[0]; // Current ATR value Print("ATR Value: ", atrValue); } } double entryPoint, stopLoss, takeProfit; // Generate buy or sell signals based on Bollinger Bands and RSI values if (closePrices[0] < bbLower && rsiValue < oversoldLevel) // Buy Condition { entryPoint = closePrices[0]; stopLoss = entryPoint - (atrValue * atrMultiplier); takeProfit = entryPoint + (atrValue * atrMultiplier * 2); DrawTradeLines(entryPoint, stopLoss, takeProfit, "Buy Signal"); DrawEntryArrow(entryPoint, "BuyArrow", clrGreen); // Draw Buy Arrow PlaySound(signalSound); // Notify with sound for new entry } else if (closePrices[0] > bbUpper && rsiValue > overboughtLevel) // Sell Condition { entryPoint = closePrices[0]; stopLoss = entryPoint + (atrValue * atrMultiplier); // Above entry for short position takeProfit = entryPoint - (atrValue * atrMultiplier * 2); // Below entry for short position DrawTradeLines(entryPoint, stopLoss, takeProfit, "Sell Signal"); DrawEntryArrow(entryPoint, "SellArrow", clrRed); // Draw Sell Arrow PlaySound(signalSound); // Notify with sound for new entry } } } // Expert initialization function int OnInit() { // Initialization tasks can be done here return INIT_SUCCEEDED; } // Expert deinitialization function void OnDeinit(const int reason) { // Release the indicator handles when the EA is removed if (bbHandle != 0) IndicatorRelease(bbHandle); if (atrHandle != 0) IndicatorRelease(atrHandle); ClearPreviousDrawings(); // Clear drawings on removal } // Expert tick function void OnTick() { ManageOpenPositions(Symbol()); // Manage open positions before calculating new parameters CalculateTradeParameters(); // Calculate trade parameters based on market data } //+------------------------------------------------------------------+
Pruebas
Para agregar el Asesor Experto (EA) Volatility Navigator a un gráfico en MetaTrader 5 para realizar pruebas, primero asegúrese de que su archivo EA esté instalado correctamente en la plataforma MetaTrader 5. Vaya al panel "Navegador" en el lado izquierdo y, en la sección "Asesores Expertos", busque el EA. Si no es visible, es posible que tenga que actualizar la lista haciendo clic con el botón derecho del ratón y seleccionando «Actualizar», o asegurándose de que los archivos EA se encuentran en el directorio correcto (concretamente, en la carpeta MQL5 > Experts dentro de la instalación de MetaTrader).
Una vez ubicado, simplemente arrastre el EA al gráfico deseado o haga doble clic en él para abrir una ventana de configuración. Allí podrás configurar parámetros como el tamaño del lote y los indicadores en función de tu estrategia. Después de configurar los ajustes, asegúrese de habilitar el comercio automático haciendo clic en el botón "Trading algorítmico" en la barra de herramientas. Por último, haga clic en «Aceptar» para aplicar el EA y este comenzará a ejecutar operaciones basadas en la estrategia predefinida. Comprueba siempre la pestaña «Operaciones» para supervisar su actividad durante las pruebas. En este proyecto que he desarrollado, he probado el Asesor Experto (EA) en una cuenta demo. Sin embargo, también puede realizar pruebas retrospectivas utilizando datos históricos antes de arriesgar dinero real.
Después de arrastrar el EA al gráfico, es esencial esperar pacientemente a que se generen las señales una vez que los indicadores cumplan ciertas condiciones, tal y como se ha explicado anteriormente. Cuando se cumplen estas condiciones, el EA mostrará tres líneas en el gráfico: el stop loss, el take profit y el punto de entrada. Además, se emitirá una alerta sonora para avisar al operador, y esta alerta persistirá hasta que se alcance el punto de entrada más preciso.
A continuación, hemos ilustrado los resultados de nuestras pruebas para su revisión.

Figura 7. Resultados de la prueba
En el diagrama de arriba, podemos observar las órdenes que ejecuté después de recibir las señales, todas ellas actualmente en ganancias. El diagrama también muestra los niveles indicados por las señales como líneas horizontales: el nivel de toma de ganancias se muestra en azul, el punto de entrada en verde y el stop loss en rojo. Veamos también el GIF a continuación para una visión más amplia.

Figura 8. Resultado de la prueba
Conclusión
Esta herramienta se centra principalmente en proporcionar puntos de entrada prometedores y rentables, niveles de toma de ganancias y ubicaciones de stop loss. Se puede aplicar a diferentes gráficos y admite todos los marcos de tiempo. Para las entradas de scalping, es recomendable utilizar marcos temporales más cortos, mientras que las operaciones más largas pueden beneficiarse de marcos temporales más largos. Además, es beneficioso utilizar esta herramienta junto con sus propias estrategias para mejorar los resultados.
Asegúrate de probar y experimentar con la herramienta antes de utilizar dinero real. Tenga en cuenta que esta herramienta no abre operaciones; mi objetivo en esta serie es únicamente desarrollar herramientas para el análisis del mercado.
| Fecha | Nombre de la herramienta | Descripción | Versión | Actualizaciones | Notas |
|---|---|---|---|---|---|
| 01/10/24 | Chart Projector | Script para superponer la acción del precio del día anterior con efecto fantasma. | 1.0 | Lanzamiento inicial. | Primera herramienta en Lynnchris Tool Chest. |
| 18/11/24 | Analytical Comment | Proporciona información del día anterior en formato tabular y anticipa la dirección futura del mercado. | 1.0 | Lanzamiento inicial. | Segunda herramienta en el cofre de herramientas de Lynnchris. |
| 27/11/24 | Analytics Master | Actualización periódica de las métricas del mercado cada dos horas. | 1.01 | Segundo lanzamiento. | Tercera herramienta en el cofre de herramientas de Lynnchris. |
| 02/12/2024 | Analytics Forecaster | Actualización periódica de las métricas del mercado cada dos horas con integración de Telegram. | 1.1 | Tercera edición. | Herramienta número 5. |
| 09/12/24 | Volatility Navigator | El EA analiza las condiciones del mercado utilizando los indicadores Bandas de Bollinger, RSI y ATR. | 1.0 | Lanzamiento inicial. | Herramienta número 6. |
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16560
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Indicador de previsión de volatilidad con Python
Desarrollamos un asesor experto para controlar los puntos de entrada en las operaciones swing
Creación de un modelo de restricción de tendencia de velas (Parte 9): Asesor Experto de múltiples estrategias (III)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Simplemente vaya al perfil del autor y luego haga clic en "Publicaciones" ... Christian Benjamin (Publicaciones)
¿podría el Sr. Benjamin o alguien que lea esto decirme dónde puedo encontrar las partes 1-3 de este artículo?
Hola Señor, por favor siga los enlaces que se proporcionan a continuación.
https://www.mql5.com/es/articles/16434
https://www.mql5.com/es/articles/15927
https://www.mql5.com/es/articles/16014
Sólo tiene que ir al perfil del autor y hacer clic en "Publicaciones" ... Christian Benjamin (Publicaciones)
Gracias
¿Puedo preguntar qué está operando este EA? No lo veo.
(C.Benjamin) El autor dice en el encabezado "PRUEBAS" :
"Después de arrastrar el EA al gráfico, es esencial esperar pacientemente a que se generen las señales una vez que se cumplan ciertas condiciones por parte de los indicadores, como se explicó anteriormente. Cuando se cumplan estas condiciones, el EA mostrará tres líneas en el gráfico: el stop loss, el take profit y el punto de entrada. Además, sonará una alerta sonora que avisará al operador, y esta alerta persistirá hasta que se alcance el punto de entrada más preciso."
El código del EA muestra gráficamente SÓLO LA OPERACIÓN SUGERIDA y también la Alerta