English Русский 中文 Español Deutsch 日本語
preview
Desenvolvimento do Kit de Ferramentas de Análise de Price Action (Parte 5): Volatility Navigator EA

Desenvolvimento do Kit de Ferramentas de Análise de Price Action (Parte 5): Volatility Navigator EA

MetaTrader 5Exemplos |
101 6
Christian Benjamin
Christian Benjamin

Introdução

Navegar pelas complexidades do trading envolve mais do que simplesmente identificar possíveis direções de mercado; também exige execução precisa. Muitos traders enfrentam dificuldades não por uma má execução, mas devido a imprecisões nos pontos de entrada, configurações de stop loss ou alvos de take profit..

Para enfrentar esse desafio, desenvolvi uma nova ferramenta chamada Volatility Navigator usando a linguagem de programação MQL5, projetada especificamente para otimizar esses aspectos críticos do trading. Diferente das minhas ferramentas anteriores que focavam principalmente em prever tendências de mercado, o Volatility Navigator identifica de forma independente os pontos de entrada ideais, níveis de stop loss e alvos de take profit.

Ao incorporar indicadores técnicos avançados à nossa análise de price action, buscamos aprimorar a experiência de trading e melhorar a formulação de estratégias.

Por favor, consulte as seções a seguir.



Indicadores Técnicos

Os indicadores técnicos podem ser categorizados em vários tipos, incluindo indicadores de tendência, indicadores de momentum, indicadores de volatilidade e indicadores de volume, cada um servindo a propósitos distintos na análise do mercado financeiro. Alguns exemplos amplamente utilizados incluem a Média Móvel, Índice de Força Relativa (RSI), Bandas de Bollinger e o MACD (Moving Average Convergence Divergence).

Vamos analisar mais de perto os três indicadores que utilizaremos junto com price action para alcançar nossos objetivos: Bandas de Bollinger, Índice de Força Relativa (RSI) e Average True Range (ATR).

  • Bandas de Bollinger

As Bandas de Bollinger foram desenvolvidas por John Bollinger no início da década de 1980 como uma ferramenta de análise técnica para ajudar traders a identificar tendências de mercado e potenciais reversões de preço. O conceito surgiu do desejo de Bollinger de oferecer uma forma mais dinâmica de medir a volatilidade de preços em comparação aos indicadores técnicos tradicionais. John Bollinger buscou criar uma ferramenta de trading que pudesse se adaptar às condições de mercado em constante mudança.

Ele queria um indicador que se ajustasse com base na volatilidade do mercado, o que o levou à ideia de usar médias móveis junto com uma medida de variação dos preços. As Bandas de Bollinger consistem em três linhas:

  1. A banda do meio é tipicamente uma média móvel simples (SMA) dos preços de fechamento ao longo de um período especificado (comumente 20 dias).
  2. A banda superior é a banda do meio mais um determinado número de desvios padrão (geralmente dois).
  3. A banda inferior é a banda do meio menos o mesmo número de desvios padrão. 

Bandas de Bollinger

Fig 1. Bandas de Bollinger

O uso de desvios padrão é fundamental nas Bandas de Bollinger, pois fornece uma medida estatística de volatilidade. Ao incorporar essa medida, as Bandas de Bollinger conseguem encapsular efetivamente os movimentos de preço dentro de um intervalo, ajudando traders a reconhecer possíveis rompimentos ou reversões. 

Traders frequentemente usam Bandas de Bollinger para identificar condições de sobrecompra ou sobrevenda, possíveis reversões de tendência e para avaliar a força dos movimentos de preço. Por exemplo, preços tocando a banda superior podem indicar uma condição de sobrecompra, enquanto preços tocando a banda inferior podem sugerir uma condição de sobrevenda.

  • Índice de Força Relativa (RSI)

O Índice de Força Relativa (RSI) foi desenvolvido por J. Welles Wilder Jr. e introduzido em seu livro de 1978, "New Concepts in Technical Trading Systems." Wilder tinha como objetivo criar um oscilador de momentum que pudesse ajudar os traders a identificar condições de sobrecompra e sobrevenda nos mercados financeiros. Abaixo está a fórmula para calcular o RSI.

Cálculos do RSI

Fig 2. Fórmula do RSI

O RSI mede a velocidade e a variação dos movimentos de preço, ajudando a identificar condições de sobrecompra ou sobrevenda em um mercado durante um período especificado, tipicamente 14 dias. Variando de 0 a 100, um RSI acima de 70 geralmente indica que um ativo pode estar sobrecomprado, enquanto um RSI abaixo de 30 sugere que ele pode estar sobrevendido.

Os traders usam o RSI para sinalizar potenciais reversões ou confirmar tendências. Além disso, divergências entre o RSI e a ação do preço podem indicar enfraquecimento do momentum, apresentando outras oportunidades de negociação.

RSI

Fig 3. Gráfico RSI

  • Average True Range (ATR)

O indicador Average True Range (ATR) foi desenvolvido por J. Welles Wilder Jr. e introduzido em seu livro de 1978, "New Concepts in Technical Trading Systems." Wilder criou o ATR para medir a volatilidade do mercado calculando o True Range (TR), que considera a maior faixa de movimento de preço em um período determinado.

Desde então, o ATR se tornou uma ferramenta amplamente utilizada na análise técnica, ajudando traders a avaliar a volatilidade e gerenciar o risco em diversos mercados financeiros. O Average True Range (ATR) é um indicador de volatilidade que mede o grau de movimento dos preços em um período especificado, fornecendo insights sobre a volatilidade do mercado sem indicar a direção do movimento do preço.

Um valor de ATR mais alto indica maior volatilidade, enquanto um ATR mais baixo sinaliza menor volatilidade. Os traders utilizam o ATR para informar estratégias de gerenciamento de risco, como definir níveis de stop-loss e dimensionamento de posição com base nas condições de mercado. Isso ajuda a adaptar as estratégias de negociação à volatilidade do mercado, permitindo operações mais eficazes em diferentes cenários. Vamos ver abaixo a fórmula para calcular o ATR.

Cálculos do ATR

Fig 4. Cálculo do ATR

O objetivo de usar o Average True Range (ATR) na estratégia de negociação é ajustar dinamicamente os níveis de stop loss e take profit com base na volatilidade atual do mercado. O ATR serve como uma medida de movimentação de preço, permitindo que o Expert Advisor defina níveis mais amplos durante períodos de alta volatilidade e níveis mais estreitos quando o mercado estiver mais calmo. Essa abordagem melhora o gerenciamento de risco, garantindo que operações não sejam interrompidas prematuramente em condições voláteis, ao mesmo tempo que possibilita aproveitar potenciais lucros quando o movimento do mercado está mais contido. Ao incorporar o ATR, o EA pode se adaptar às mudanças das condições de mercado, resultando em execuções de trades mais eficazes e maior chance de sucesso.



Visão Geral da Estrutura do EA

O Expert Advisor (EA) Volatility Navigator foi projetado com uma estrutura organizada que segue os padrões de programação MQL5. Compreender essa estrutura é crucial para configurar o EA de forma eficaz e realizar ajustes conforme as condições de mercado mudam. Em MQL5, os handles dos indicadores são ferramentas fundamentais que simplificam o uso dos indicadores técnicos dentro do EA. Em vez de recalcular os indicadores a cada variação de preço, o EA pode rapidamente referenciar esses handles para obter os valores mais recentes. 

Por exemplo, sempre que a função OnTick() é executada, o EA pode acessar de forma eficiente os valores relevantes dos indicadores, o que é especialmente útil em condições de mercado que mudam rapidamente. Esse acesso imediato permite melhores ações com base na dinâmica atual do mercado.

Funções Centrais do EA

Os principais componentes de um Expert Advisor MQL5 consistem em três funções principais: OnInit(), OnTick() e OnDeinit().

  • Função OnInit()

Esta função é executada uma vez quando o EA é anexado ao gráfico. Sua principal função é inicializar o EA, incluindo a configuração dos indicadores necessários.
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;
}

No trecho de código acima, estamos criando handles para os indicadores RSI, Bandas de Bollinger e Average True Range (ATR), todos os quais ajudarão o EA na tomada de decisões de negociação.

  • Função OnTick():

A função OnTick() é crítica, pois é chamada toda vez que há uma variação de preço no mercado. É aqui que o EA avalia os valores atuais dos indicadores e determina as ações de negociação apropriadas.

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
    }
}

Aqui, o EA verifica o valor do RSI, das Bandas de Bollinger e do ATR para tomar decisões de negociação informadas. Por exemplo, ele vende quando o RSI indica condições de sobrecompra e o preço excede a banda superior das Bandas de Bollinger. 

  • Função OnDeinit():

A função OnDeinit() é chamada quando o EA é removido do gráfico. Esta função desempenha um papel vital na liberação de recursos, liberando os handles dos indicadores.

void OnDeinit(const int reason) {
    // Release resources for indicators
    IndicatorRelease(rsiHandle);
    IndicatorRelease(bbHandle);
    IndicatorRelease(atrHandle);
}

Parâmetros de Entrada

Um dos destaques do EA Volatility Navigator é sua flexibilidade por meio de parâmetros de entrada personalizáveis. Esses parâmetros permitem que os traders ajustem o comportamento do EA para alinhar com suas estratégias individuais. Alguns parâmetros de entrada essenciais incluem:

  • Período do RSI:

input int rsiPeriod = 14; // Standard period for RSI calculation

  • Período das Bandas de Bollinger:

input int bbPeriod = 20; // Standard period for Bollinger Bands

  • Período do ATR:

input int atrPeriod = 14; // Period for ATR



A Lógica Principal do EA

Vamos começar examinando o diagrama abaixo, que ilustra como o sinal é gerado para uma ordem de compra, sendo o processo para uma ordem de venda o inverso.

GERAÇÃO DE SINAL

Fig 5. Condições de Geração de Sinal

  • Condições de Geração de Sinal

A principal função do EA Volatility Navigator é analisar as condições de mercado para gerar sinais de negociação. Como parte desse processo, o EA recupera os valores atuais dos indicadores relevantes na função OnTick. Abaixo está um trecho que ilustra como calcular o RSI, as Bandas de Bollinger e o ATR dentro do 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);
}

Nesta configuração, a função OnInit inicializa os handles para o RSI, Bandas de Bollinger e ATR, permitindo que o EA acesse seus valores para cálculos contínuos.

  • Avaliando Condições do RSI

O indicador RSI ajuda a identificar possíveis pontos de entrada e saída ao indicar condições de sobrecompra e sobrevenda. Analisar o valor do RSI permite que o EA faça escolhas estratégicas de negociação. O trecho a seguir mostra como verificar os valores do 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
}

Neste código, o EA obtém o valor atual do RSI e o compara com os limites pré-definidos de 70 e 30 para determinar possíveis sinais de negociação.

  • Analisando as Bandas de Bollinger

As Bandas de Bollinger representam a volatilidade do mercado ao visualizar desvios de preço em relação a uma média móvel. A largura das bandas pode indicar possíveis picos de volatilidade ou períodos de calma. O código a seguir ilustra como o EA avalia as 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 trecho mostra a lógica que o EA emprega para verificar se o preço atual está próximo à banda superior ou inferior das Bandas de Bollinger, o que pode acionar sinais de compra ou venda.

  • Incorporando o Average True Range (ATR)

O ATR fornece insights sobre a volatilidade do mercado e auxilia no gerenciamento de risco por meio das configurações de stop-loss e take-profit. O código a seguir recupera o valor do ATR:

double atrValue = iATR(NULL, 0, atrPeriod);

if (atrValue > atrThreshold) {
    // High volatility - consider entering trades
} else {
    // Low volatility - potentially stay out of the market
}

Neste exemplo, o EA verifica o ATR para determinar se a volatilidade é suficiente para justificar a entrada em uma negociação. Os traders geralmente preferem valores altos de ATR, pois indicam que movimentos significativos de preço são esperados.

  • Geração de Sinais de Negociação

Ao combinar os insights do RSI, Bandas de Bollinger e ATR, o EA gera sinais de negociação mais confiáveis. O trecho a seguir ilustra como o EA formularia esses sinais:

if (rsiValue < 30 && price < lowerBand && atrValue > atrThreshold) {
    // Generate buy signal
} else if (rsiValue > 70 && price > upperBand && atrValue > atrThreshold) {
    // Generate sell signal
}
Nesta análise composta, um sinal de compra ocorre quando o mercado está sobrevendido conforme indicado pelo RSI, o preço está tocando a banda inferior das Bandas de Bollinger e o ATR sugere volatilidade adequada. Por outro lado, um sinal de venda é gerado sob condições opostas.
  • Feedback Visual no Gráfico

Para aprimorar a experiência do usuário, o EA fornece feedback visual quando gera sinais. O código a seguir demonstra como isso é implementado com marcações claras no gráfico:

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);
    }
}

Em resumo, a lógica principal do EA Volatility Navigator gira em torno da avaliação sistemática dos dados de mercado atuais por meio de múltiplos indicadores. Ao combinar os insights do RSI, Bandas de Bollinger e ATR, o EA pode gerar sinais de negociação robustos enquanto também fornece feedback visual valioso no gráfico. Essa abordagem multifacetada aprimora as avaliações dos traders e, em última análise, auxilia na navegação eficaz de mercados voláteis.


Implementando Alertas e Notificações no EA Volatility Navigator

O Expert Advisor (EA) Volatility Navigator é equipado com um sistema integrado de alertas e notificações que aumenta a capacidade do trader de responder de forma eficaz às condições do mercado. Esse sistema é essencial para fornecer insights e alertas oportunos com base em sinais de negociação específicos gerados pelos principais indicadores do EA: o Índice de Força Relativa (RSI), Bandas de Bollinger e Average True Range (ATR).

  • Tipos de Alertas no EA

Alertas Sonoros: O EA está programado para emitir notificações sonoras sempre que um sinal de negociação significativo é acionado. Por exemplo, quando o RSI cruza acima de 70, indicando uma condição de sobrecompra, ou cai abaixo de 30, indicando condição de sobrevenda, um alerta sonoro será emitido. Esses alertas permitem que os traders reajam imediatamente, possibilitando uma tomada de decisão rápida com base nas oportunidades de mercado identificadas.

Alertas Visuais: Além dos avisos sonoros, o EA incorpora alertas visuais diretamente no gráfico de negociação. Por exemplo, quando um sinal de negociação é gerado, o EA pode mudar a cor da linha de preço ou exibir uma mensagem na tela destacando a natureza do sinal (compra ou venda). Esse recurso permite que os traders avaliem rapidamente as condições atuais do mercado em seus gráficos, sem depender exclusivamente de notificações sonoras.

  • Integração de Alertas na Lógica do EA

Os alertas e notificações no EA Volatility Navigator são integrados de forma transparente à sua lógica principal de negociação:

Durante cada execução do OnTick, o EA monitora continuamente os indicadores em busca de potenciais sinais de negociação. Quando o EA detecta que determinados limites foram atingidos, por exemplo, o RSI cruzando um nível pré-definido, uma sequência de alerta é acionada. Assim que um sinal de negociação é confirmado, o EA ativa os alertas correspondentes.

Esse processo de ativação pode incluir a reprodução de um som ou a geração de um marcador visual no gráfico. Os alertas fornecem feedback imediato sobre as condições de mercado, ajudando os traders a tomar decisões rápidas e informadas. Esse engajamento promove a participação ativa no processo de negociação, aumentando a probabilidade de capturar movimentos lucrativos do 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
}

O trecho de código fornecido é projetado para implementar alertas sonoros e visuais dentro do Expert Advisor (EA) Volatility Navigator com base no comportamento do Índice de Força Relativa (RSI). Primeiro, o código calcula o valor atual do RSI usando a função iRSI, que utiliza o símbolo do gráfico atual, timeframe, período (14) e preço de fechamento como entradas. Em seguida, verifica se o valor do RSI excede o limite de 70, significando condições de sobrecompra. Se essa condição for atendida, a função PlaySound é chamada para reproduzir um alerta sonoro, chamando a atenção imediata do trader.

Alertas Visuais

Fig 6. Alertas Visuais

Além disso, um alerta visual é criado no gráfico de negociação ao posicionar um objeto de texto no nível do preço máximo atual, indicando esse sinal de sobrecompra em texto vermelho para garantir destaque. Por outro lado, se o valor do RSI cair abaixo do limite de 30, indicando condições de sobrevenda, o mesmo procedimento é seguido: um alerta sonoro é emitido, e um objeto de texto é gerado no nível do preço mínimo atual, desta vez exibindo o sinal em verde.

Esse sistema duplo de alerta, composto por elementos sonoros e visuais, aumenta a capacidade do trader de se manter informado e reagir prontamente a movimentos significativos do mercado, melhorando assim a eficiência geral das negociações.

O sistema de alertas sonoros e visuais no EA Volatility Navigator foi projetado para facilitar respostas rápidas às mudanças nas condições de mercado. Ao implementar esses alertas, o EA capacita os traders a se manterem informados e prontos para agir, aumentando assim sua eficiência e sucesso nas operações. 

Abaixo está o código completo do Expert Advisor (EA). Este código contém todas as instruções e lógicas necessárias que regem suas operações de negociação.

//+------------------------------------------------------------------+
//|                                         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
}

//+------------------------------------------------------------------+


Teste

Para adicionar o Expert Advisor (EA) Volatility Navigator a um gráfico no MetaTrader 5 para testes, primeiro certifique-se de que seu arquivo EA está devidamente instalado na plataforma MetaTrader 5. Navegue até o painel "Navegador" no lado esquerdo e, na seção "Expert Advisors", encontre seu EA. Se ele não estiver visível, talvez seja necessário atualizar a lista clicando com o botão direito e selecionando "Atualizar", ou garantir que os arquivos do EA estejam na pasta correta (especificamente, em MQL5 > Experts dentro da instalação do MetaTrader).

Uma vez localizado, basta arrastar o EA para o gráfico desejado ou dar um duplo clique para abrir a janela de configurações. Lá, você pode configurar parâmetros como tamanho do lote e indicadores de acordo com sua estratégia. Após configurar as definições, certifique-se de habilitar a negociação automatizada clicando no botão "AutoTrading" na barra de ferramentas. Por fim, clique em "OK" para aplicar o EA, e ele começará a executar operações com base na estratégia pré-definida. Sempre verifique a aba "Trade" para monitorar sua atividade durante os testes. Neste projeto que desenvolvi, testei o Expert Advisor (EA) em uma conta demo. No entanto, você também pode realizar backtest usando dados históricos antes de arriscar dinheiro real.

Após arrastar o EA para o gráfico, é essencial aguardar pacientemente até que os sinais sejam gerados quando certas condições forem atendidas pelos indicadores, conforme explicado acima. Quando essas condições são satisfeitas, o EA exibirá três linhas no gráfico: o stop loss, o take profit e o ponto de entrada. Além disso, um alerta sonoro será emitido, sinalizando ao trader, e esse alerta persistirá até que o ponto de entrada mais preciso seja atingido.

Abaixo, ilustramos os resultados de nossos testes para sua análise

RESULTADO DO TESTE

Fig 7. Resultados dos Testes

No diagrama acima, podemos observar as ordens que executei após receber os sinais, todas atualmente em lucro. O diagrama também mostra os níveis indicados pelos sinais como linhas horizontais: o nível de take profit está em azul, o ponto de entrada em verde e o stop loss em vermelho. Vamos também dar uma olhada no GIF abaixo para uma visão mais ampla.

Resultados dos Testes

Fig 8. Resultados dos Testes



Conclusão

Esta ferramenta tem como foco principal fornecer pontos de entrada promissores e lucrativos, níveis de take profit e definições de stop loss. Ela pode ser aplicada a diferentes gráficos e suporta todos os períodos de tempo. Para entradas do tipo scalping, é recomendável usar períodos de tempo mais curtos, enquanto operações mais longas podem se beneficiar de períodos maiores. Além disso, é interessante usar esta ferramenta junto com suas próprias estratégias para potencializar os resultados.

Certifique-se de testar e experimentar a ferramenta antes de usar dinheiro real. Observe que esta ferramenta não abre operações; meu objetivo nesta série é apenas desenvolver ferramentas para análise de mercado.

DataNome da Ferramenta DescriçãoVersão Atualizações Notas
01/10/24Projetor de GráficosScript para sobrepor a ação de preço do dia anterior com efeito fantasma.1.0Lançamento InicialA primeira ferramenta do Lynnchris Tools Chest
18/11/24Comentário AnalíticoEle fornece informações do dia anterior em formato tabular, bem como antecipa a direção futura do mercado.1.0Lançamento InicialSegunda ferramenta no Lynnchris Tool Chest
27/11/24Mestre em AnáliseAtualização Regular das métricas de mercado a cada duas horas 1.01Segundo LançamentoTerceira ferramenta no Lynnchris Tool Chest
02/12/2024Previsor analítico Atualização regular das métricas de mercado a cada duas horas com integração ao Telegram1.1Terceira EdiçãoFerramenta número 5
 09/12/24Navegador de VolatilidadeO EA analisa as condições de mercado usando os indicadores Bandas de Bollinger, RSI e ATR1.0Lançamento InicialFerramenta número 6

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/16560

Arquivos anexados |
Últimos Comentários | Ir para discussão (6)
Fernando Carreiro
Fernando Carreiro | 31 jan. 2025 em 14:59
@Qhumanani #: O Sr. Benjamin ou alguém que esteja lendo este artigo poderia me dizer onde posso encontrar as Partes 1-3 deste artigo?

Basta acessar o perfil do autor e clicar em "Publications" (Publicações) ... Christian Benjamin (Publicações)

Christian Benjamin
Christian Benjamin | 31 jan. 2025 em 14:59
Qhumanani #:
O Sr. Benjamin ou alguém que esteja lendo este artigo poderia me dizer onde posso encontrar as Partes 1-3 deste artigo?

Olá, senhor, siga os links fornecidos abaixo.

https://www.mql5.com/pt/articles/16434

https://www.mql5.com/pt/articles/15927

https://www.mql5.com/pt/articles/16014

Christian Benjamin
Christian Benjamin | 31 jan. 2025 em 15:00
Fernando Carreiro #:

Basta acessar o perfil do autor e clicar em "Publicações" ... Christian Benjamin (Publicações)

Obrigado, senhor!

13691228031
13691228031 | 10 set. 2025 em 05:57
Posso saber o que esse EA está negociando? Não estou vendo.
Mustafa Nail Sertoglu
Mustafa Nail Sertoglu | 15 out. 2025 em 08:30
13691228031 #:
Posso saber o que esse EA está negociando? Não estou vendo.

(C.Benjamin) O autor diz no cabeçalho "TESTE":

"Depois de arrastar o EA para o gráfico, é essencial esperar pacientemente que os sinais sejam gerados quando determinadas condições forem atendidas pelos indicadores, conforme explicado acima. Quando essas condições forem atendidas, o EA exibirá três linhas no gráfico: o stop loss, o take profit e o ponto de entrada. Além disso, um alerta sonoro será emitido, sinalizando o trader, e esse alerta persistirá até que o ponto de entrada mais preciso seja alcançado."

O código do EA mostra graficamente APENAS A OPERAÇÃO SUGERIDA e também o alerta

Trading por algoritmo: IA e seu caminho para os topos dourados Trading por algoritmo: IA e seu caminho para os topos dourados
Neste artigo, é demonstrado um método de criação de estratégias de trading para o ouro usando aprendizado de máquina. Ao analisar o método proposto para a previsão de séries temporais sob diferentes ângulos, é possível identificar suas vantagens e desvantagens em comparação com outras formas de criação de sistemas de trading baseadas somente na análise e previsão de séries temporais financeiras.
Construindo um Modelo de Restrição de Tendência com Candlesticks (Parte 9): Expert Advisor de Múltiplas Estratégias (III) Construindo um Modelo de Restrição de Tendência com Candlesticks (Parte 9): Expert Advisor de Múltiplas Estratégias (III)
Bem-vindo à terceira parte da nossa série sobre tendências! Hoje, vamos nos aprofundar no uso de divergência como estratégia para identificar pontos de entrada ideais dentro da tendência diária predominante. Também apresentaremos um mecanismo personalizado de proteção de lucro, semelhante a um trailing stop-loss, mas com melhorias exclusivas. Além disso, vamos atualizar o Trend Constraint Expert para uma versão mais avançada, incorporando uma nova condição de execução de trade para complementar as já existentes. À medida que avançamos, continuaremos explorando a aplicação prática do MQL5 no desenvolvimento algorítmico, fornecendo a você percepções mais detalhadas e técnicas acionáveis.
Otimização de recifes de coral — Coral Reefs Optimization (CRO) Otimização de recifes de coral — Coral Reefs Optimization (CRO)
Neste artigo é apresentada uma análise abrangente do algoritmo de otimização de recifes de coral (CRO), um método meta-heurístico inspirado nos processos biológicos de formação e desenvolvimento de recifes de coral. Ele modela aspectos-chave da evolução dos corais: reprodução externa e interna, fixação de larvas, reprodução assexuada e competição por espaço limitado no recife. É dada atenção especial à versão aprimorada do algoritmo.
Análise angular dos movimentos de preço: um modelo híbrido de previsão dos mercados financeiros Análise angular dos movimentos de preço: um modelo híbrido de previsão dos mercados financeiros
O que é análise angular dos mercados financeiros? Como usar os ângulos de movimento de preço e o aprendizado de máquina para prever com precisão de 67? Como combinar um modelo de regressão e um modelo de classificação com características angulares e obter um algoritmo funcional? O que Gann tem a ver com isso? Por que os ângulos de movimento do preço são bons indicadores para o aprendizado de máquina?