English Русский 中文 Deutsch 日本語 Português
preview
Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 5): Volatility Navigator EA

Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 5): Volatility Navigator EA

MetaTrader 5Ejemplos |
305 6
Christian Benjamin
Christian Benjamin

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.



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:

  1. 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).
  2. La banda superior es la banda media más un número específico de desviaciones estándar (generalmente dos).
  3. La banda inferior es la banda media menos el mismo número de desviaciones estándar. 

Bandas de Bollinger

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.

Cálculos del 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.

RSI

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.

Cálculos 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():

Esta función se ejecuta una vez cuando el EA se adjunta a un gráfico. Su función principal es inicializar el EA, incluyendo la configuración de los indicadores necesarios.
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.

GENERACIÓN DE SEÑALES

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

Las Bandas de Bollinger representan la volatilidad del mercado mediante la visualización de las desviaciones del precio con respecto a una media móvil. El ancho de las bandas puede indicar posibles picos de volatilidad o períodos de calma.. El siguiente código ilustra cómo el EA evalúa 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.

Alertas visuales

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.

RESULTADO DE LA PRUEBA

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.

Resultado de la prueba

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.

FechaNombre de la herramienta DescripciónVersión Actualizaciones Notas
01/10/24Chart ProjectorScript para superponer la acción del precio del día anterior con efecto fantasma.1.0Lanzamiento inicial.Primera herramienta en Lynnchris Tool Chest.
18/11/24Analytical CommentProporciona información del día anterior en formato tabular y anticipa la dirección futura del mercado.1.0Lanzamiento inicial.Segunda herramienta en el cofre de herramientas de Lynnchris.
27/11/24Analytics MasterActualización periódica de las métricas del mercado cada dos horas. 1.01Segundo lanzamiento.Tercera herramienta en el cofre de herramientas de Lynnchris.
02/12/2024Analytics Forecaster Actualización periódica de las métricas del mercado cada dos horas con integración de Telegram.1.1Tercera edición.Herramienta número 5.
 09/12/24Volatility NavigatorEl EA analiza las condiciones del mercado utilizando los indicadores Bandas de Bollinger, RSI y ATR.1.0Lanzamiento inicial.Herramienta número 6.

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

Archivos adjuntos |
Fernando Carreiro
Fernando Carreiro | 31 ene 2025 en 14:59
@Qhumanani #: ¿podría el Sr. Benjamin o alguien que lea esto decirme dónde puedo encontrar las partes 1-3 de este artículo?

Simplemente vaya al perfil del autor y luego haga clic en "Publicaciones" ... Christian Benjamin (Publicaciones)

Christian Benjamin
Christian Benjamin | 31 ene 2025 en 14:59
Qhumanani #:
¿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

Christian Benjamin
Christian Benjamin | 31 ene 2025 en 15:00
Fernando Carreiro #:

Sólo tiene que ir al perfil del autor y hacer clic en "Publicaciones" ... Christian Benjamin (Publicaciones)

Gracias

13691228031
13691228031 | 10 sept 2025 en 05:57
¿Puedo preguntar qué es este comercio EA? No lo he visto.
Mustafa Nail Sertoglu
Mustafa Nail Sertoglu | 15 oct 2025 en 08:30
13691228031 #:
¿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

Indicador de previsión de volatilidad con Python Indicador de previsión de volatilidad con Python
Hoy pronosticaremos la volatilidad extrema futura utilizando una clasificación binaria. Asimismo, crearemos un indicador de previsión de volatilidad extrema usando el aprendizaje automático.
Desarrollamos un asesor experto para controlar los puntos de entrada en las operaciones swing Desarrollamos un asesor experto para controlar los puntos de entrada en las operaciones swing
A medida que el año se acerca a su fin, los tráders a largo plazo suelen hacer balance del año, analizando la historia, el comportamiento y las tendencias del mercado para evaluar el potencial de los movimientos futuros. En este artículo, analizaremos el desarrollo de un asesor experto para el seguimiento de operaciones a largo plazo utilizando MQL5. El objetivo será hacer frente a problemas como la pérdida de oportunidades comerciales debido al trading manual y a la falta de sistemas de supervisión automatizados. Como ejemplo de definición eficaz de una estrategia para nuestra solución y también para desarrollar la misma, utilizaremos uno de los pares comerciales más destacados.
Creación de un modelo de restricción de tendencia de velas (Parte 9): Asesor Experto de múltiples estrategias (III) Creación de un modelo de restricción de tendencia de velas (Parte 9): Asesor Experto de múltiples estrategias (III)
¡Bienvenidos a la tercera entrega de nuestra serie sobre tendencias! Hoy profundizaremos en el uso de la divergencia como estrategia para identificar puntos de entrada óptimos dentro de la tendencia diaria predominante. También presentaremos un mecanismo de bloqueo de ganancias personalizado, similar a un stop-loss dinámico, pero con mejoras únicas. Además, actualizaremos el asesor experto Trend Constraint a una versión más avanzada, incorporando una nueva condición de ejecución comercial para complementar las existentes. A medida que avanzamos, continuaremos explorando la aplicación práctica de MQL5 en el desarrollo algorítmico, brindándole información más detallada y técnicas prácticas.
Integración de Discord con MetaTrader 5: Creación de un robot comercial con notificaciones en tiempo real Integración de Discord con MetaTrader 5: Creación de un robot comercial con notificaciones en tiempo real
En este artículo veremos cómo integrar MetaTrader 5 y el servidor Discord para recibir notificaciones de transacciones en tiempo real desde cualquier parte del mundo. Además, aprenderemos a configurar la plataforma y Discord para asegurarnos de que las alertas se envían a Discord, y hablaremos de los problemas de seguridad que surgen al utilizar WebRequest y webhooks para estos métodos de notificación.