English Русский 中文 Español Deutsch 日本語
preview
Price Action Analysis Toolkit Development (Part 3): Analytics Master — EA

Price Action Analysis Toolkit Development (Part 3): Analytics Master — EA

MetaTrader 5Exemplos |
33 9
Christian Benjamin
Christian Benjamin

Conteúdo:

Introdução

Tendo desenvolvido o script de comentário analítico no episódio anterior, identifiquei suas limitações em relação às propriedades do script, que detalharei abaixo. Embora eu reconheça o impacto considerável que o script de comentário analítico teve dentro da comunidade de negociação, desenvolvi um Expert Advisor (EA) chamado Analytics Master. Este EA oferece a mesma análise e ainda fornece métricas extras para melhores insights de negociação. Esta nova ferramenta oferece várias vantagens, incluindo a capacidade de atualizar continuamente as métricas a cada duas horas, em contraste com o script, que só podia escrever informações de métricas uma vez. O EA aprimora a análise e mantém os usuários atualizados.

Em alguns casos, um Expert Advisor (EA) pode integrar funções semelhantes a scripts para melhorar sua funcionalidade. Isso significa que você pode implementar tarefas específicas dentro do código do EA que se assemelham às ações normalmente executadas por scripts independentes. Um EA combina de forma eficaz codificação, configurações personalizáveis, lógica de negociação e gerenciamento de risco para automatizar estratégias de negociação de forma eficiente. Abaixo, tabulei uma comparação entre o script e o Expert Advisor (EA).

Script O Expert Advisor (EA)
Eles são projetados para executar uma tarefa específica e concluir a execução quase instantaneamente. Eles terminam assim que a tarefa é concluída e não podem rodar continuamente. Eles rodam continuamente em segundo plano, monitorando as condições de mercado e executando negociações com base em condições predefinidas. 
Eles não podem lidar com eventos como ticks ou temporizadores. Um script só pode executar seu código quando iniciado manualmente. Eles podem responder a eventos e mudanças de mercado (por exemplo, OnTick, OnTimer, OnTrade), permitindo maior capacidade de resposta em estratégias de negociação. 
Normalmente, um script pode executar negociações (abrindo, modificando ou fechando) mas não gerencia negociações em andamento. Uma vez executado, não pode monitorar ou reagir ao estado das negociações.  EAs podem gerenciar posições abertas dinamicamente, acompanhar condições de negociação, aplicar trailing stops e ajustar dinamicamente suas estratégias com base nas condições de mercado. 
Geralmente projetados para execução única e podem exigir configurações específicas (como parâmetros de entrada) cada vez que são executados manualmente pelo usuário.  Eles podem manter parâmetros definidos pelo usuário entre sessões e rodar sem interação do usuário uma vez iniciados. 
Mais adequados para tarefas simples baseadas em ações (por exemplo, fechamento em lote de ordens ou aplicação de indicadores). Eles podem incorporar lógica complexa, algoritmos e sistemas que exigem tomada de decisão contínua e adaptação às condições de mercado. 
Embora scripts possam analisar dados históricos, não podem se adaptar continuamente ou aprender com novos dados sem serem reexecutados. Eles podem analisar dados históricos e tomar decisões com base em dados em tempo real, permitindo estratégias adaptativas. 
Como executam e encerram rapidamente, também têm impacto de desempenho limitado em comparação com EAs em execução contínua. Como EAs rodam constantemente, podem levar a maior consumo de CPU e memória, especialmente se gerenciarem muitas negociações ou usarem algoritmos complexos.


Revisão da ferramenta anterior (Ferramenta de Comentário Analítico)

Nossa ferramenta anterior, o Script de Comentário Analítico, foi projetada para analisar métricas-chave do dia de negociação anterior, incluindo:

  1. Abertura do Dia Anterior
  2. Fechamento do Dia Anterior
  3. Volume do Dia Anterior
  4. Volume do Dia Atual
  5. Níveis de Suporte e Resistência

Estas informações são apresentadas em uma tabela organizada verticalmente. Além disso, uma previsão de possíveis movimentos de mercado foi calculada com base nos preços de abertura e fechamento anteriores, bem como nos volumes de negociação, conforme mostrado na Figura 1 abaixo.

Apresentação de Dados       

Fig 1. Apresentação de Dados

Nosso script desenhou com sucesso linhas de tendência no gráfico, destacando níveis-chave de suporte e resistência. A previsão da direção do mercado também parecia positiva. Na Figura 2, resumimos os resultados da nossa ferramenta de comentário analítico.

Resultado do Comentário Analítico

Fig 2. Resultado do Comentário Analítico 

Para saber mais sobre o Script de Comentário Analítico, clique no link a seguir:https://www.mql5.com/pt/articles/15927


Visão Geral do Analytics Master (EA)

À medida que fazemos a transição de um script para um Expert Advisor (EA), algumas informações anteriormente fornecidas pelo script continuarão acessíveis por meio do EA, conforme mencionado na revisão da ferramenta anterior. No entanto, o EA também fornecerá insights adicionais e executará tarefas que excedem as capacidades do script original.

Além disso, nosso EA agora pode calcular volatilidade de mercado, spread de mercado, patrimônio, saldo e os tamanhos mínimos e máximos de lote possíveis com base no saldo da conta. Fornecerei explicações adicionais sobre por que essas informações são essenciais de se conhecer.

  • Volatilidade de Mercado

Volatilidade é uma medida estatística da dispersão dos dados em torno de sua média em um período especificado. Calcular a volatilidade de mercado é crucial para gerenciamento eficaz de risco, execução de negociações e planejamento estratégico nos mercados financeiros. Este EA automatiza o cálculo da volatilidade de mercado, tornando o processo simplificado e fácil de usar. Embora a volatilidade de mercado seja tipicamente medida usando a fórmula abaixo, nosso EA simplifica esta função para facilitar o uso.

Fórmula da Volatilidade

Fig 3. Fórmula da Volatilidade

Para calcular a volatilidade, começamos determinando o desvio padrão conforme descrito acima. Para obter a volatilidade anualizada, você pode multiplicar o desvio padrão pela raiz quadrada do número total de dias de negociação em um ano, que é aproximadamente 252. Saiba mais: https://quantra.quantinsti.com/glossary/Volatility 

  • Spread de Mercado

O spread de mercado, frequentemente referido simplesmente como "spread", é a diferença entre os preços de compra (bid) e venda (ask) de um ativo específico em um mercado financeiro. Uma razão importante para conhecer o valor do spread de mercado é avaliar os custos de negociação. Compreender o spread ajuda traders e investidores a avaliar os custos associados à entrada e saída de posições.

Um spread mais estreito geralmente indica menores custos de transação e melhor execução de ordens, o que é particularmente crucial para traders de alta frequência ou aqueles que executam numerosas negociações diariamente. Por outro lado, um spread mais amplo pode sinalizar custos mais altos e levar traders a reconsiderar suas estratégias ou escolher ativos diferentes para negociação a fim de minimizar despesas. Assim, conhecer o valor do spread de mercado impacta diretamente a lucratividade das negociações e o desempenho geral do investimento.  

Fórmula do Spread de Mercado     

Fig 4. Fórmula do Spread de Mercado

  • Tamanhos Possíveis de Lote
Calcular com precisão os tamanhos possíveis de lote é essencial para gerenciamento eficaz de risco, negociação disciplinada e melhor desempenho geral. Isso permite que traders tomem decisões informadas, mantenham controle sobre seus investimentos e se adaptem à natureza dinâmica dos mercados. O cálculo dos tamanhos de lote possíveis no código fornecido é baseado em princípios de gerenciamento de risco. Especificamente, busca determinar o tamanho apropriado de lote para uma negociação com base no saldo da conta, no risco desejado por negociação e na distância até o stop loss. A função calcula a distância entre os níveis de suporte e resistência (ou o ponto de stop loss calculado e o ponto de entrada). O StopLossMultiplier fornece uma maneira de ajustar essa distância.

Para melhorar a experiência do trader, nosso Expert Advisor (EA) simplificará os cálculos das informações de mercado e atualizará esses dados a cada duas horas. Isso garante que os traders permaneçam informados com os insights de mercado mais atuais, permitindo uma tomada de decisão mais informada.


Explorando o Código do Expert Advisor (Funções e Recursos Principais)

O código inclui várias funcionalidades:

  • Recuperar e exibir dados de negociação dos dias anterior e atual.
  • Analisar a direção do mercado com base nos movimentos de preço.
  • Desenhar linhas de tendência no gráfico.
  • Calcular o tamanho da posição com base em princípios de gerenciamento de risco.

Abaixo está o código do nosso Expert Advisor (EA)

//+------------------------------------------------------------------+
//|                                           Analytics Master EA.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 "EA for market analysis and commenting"
#property version     "1.0"
#property strict

// Inputs for risk management
input double RiskPercentage = 1.0;        // Percentage of account balance to risk per trade
input double StopLossMultiplier = 1.0;    // Multiplier for determining the stop loss distance
input int ATR_Period = 14;                // Period for ATR calculation

// Global variables for storing values
datetime lastUpdateTime = 0;
double previousDayOpen, previousDayClose, previousDayHigh, previousDayLow;
double previousDayVolume;
double currentDayVolume;
double support, resistance;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   lastUpdateTime = 0; // Set the initial update time
   return INIT_SUCCEEDED;
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0); // Clean up any drawn objects on the current chart
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   UpdateMetrics(); // Call to the function that fetches and displays the metrics
  }

//+------------------------------------------------------------------+
//| Update metrics and display them                                  |
//+------------------------------------------------------------------+
void UpdateMetrics()
  {
// Check if 2 hours have passed since the last update
   if(TimeCurrent() - lastUpdateTime >= 2 * 3600)
     {
      // Fetch previous day's data
      datetime prevDay = iTime(NULL, PERIOD_D1, 1);
      previousDayOpen = iOpen(NULL, PERIOD_D1, 1);
      previousDayClose = iClose(NULL, PERIOD_D1, 1);
      previousDayHigh = iHigh(NULL, PERIOD_D1, 1);
      previousDayLow = iLow(NULL, PERIOD_D1, 1);
      previousDayVolume = iVolume(NULL, PERIOD_D1, 1);

      // Fetch current day's volume
      currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Volume for today

      // Calculate support and resistance
      support = previousDayLow - (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level
      resistance = previousDayHigh + (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level

      // Determine market direction
      string marketDirection = AnalyzeMarketDirection(previousDayOpen, previousDayClose, previousDayHigh, previousDayLow);

      // Calculate possible lot size based on risk management
      double lotSize = CalculateLotSize(support, resistance);

      // Retrieve account metrics
      double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
      double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY);

      // Calculate market spread manually
      double marketBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      double marketAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      double marketSpread = marketAsk - marketBid; // Calculate spread

      double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
      double maxLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);

      // Calculate market volatility using ATR
      int atrHandle = iATR(NULL, PERIOD_H1, ATR_Period); // Get the ATR handle
      double atrValue = 0.0;

      if(atrHandle != INVALID_HANDLE)  // Check if the handle is valid
        {
         double atrBuffer[]; // Array to hold the ATR values
         if(CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0)  // Copy the latest ATR value
           {
            atrValue = atrBuffer[0]; // Retrieve the ATR value from the buffer
           }
         IndicatorRelease(atrHandle); // Release the indicator handle
        }

      // Create the output string including the last update time
      string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES);
      string infoStr = StringFormat("Prev Day Open: %.2f\nPrev Day Close: %.2f\nPrev Day High: %.2f\nPrev Day Low: %.2f\n"
                                    "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\nMarket Direction: %s\n"
                                    "Support: %.2f\nResistance: %.2f\nAccount Balance: %.2f\nAccount Equity: %.2f\n"
                                    "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n"
                                    "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f",
                                    previousDayOpen, previousDayClose, previousDayHigh, previousDayLow,
                                    previousDayVolume, currentDayVolume, marketDirection,
                                    support, resistance, accountBalance, accountEquity, marketSpread,
                                    minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize);

      // Log the information
      Print(infoStr);

      // Display information on the chart
      Comment(infoStr);

      // Remove old trend lines and create new ones for previous day's high/low
      ObjectsDeleteAll(0);

      // Draw continuous trend lines
      DrawContinuousTrendLine("PrevDayHigh", previousDayHigh);
      DrawContinuousTrendLine("PrevDayLow", previousDayLow);

      // Update last update time
      lastUpdateTime = TimeCurrent();
     }
  }

//+------------------------------------------------------------------+
//| Analyze market direction                                         |
//+------------------------------------------------------------------+
string AnalyzeMarketDirection(double open, double close, double high, double low)
  {
   string direction;

   if(close > open)
     {
      direction = "Bullish";
     }
   else
      if(close < open)
        {
         direction = "Bearish";
        }
      else
        {
         direction = "Neutral";
        }

// Include current trends or patterns based on high and low for further analysis
   if(high > open && high > close)
     {
      direction += " with bullish pressure"; // Example addition for context
     }
   else
      if(low < open && low < close)
        {
         direction += " with bearish pressure"; // Example addition for context
        }

   return direction;
  }

//+------------------------------------------------------------------+
//| Draw a continuous trend line to the left on the chart            |
//+------------------------------------------------------------------+
void DrawContinuousTrendLine(string name, double price)
  {
   datetime startTime = TimeCurrent() - 720 * 3600; // Extend 24 hours into the past
   ObjectCreate(0, name, OBJ_TREND, 0, startTime, price, TimeCurrent(), price);
   ObjectSetInteger(0, name, OBJPROP_COLOR, (StringFind(name, "High") >= 0) ? clrRed : clrBlue);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2); // Set thickness of the line
   ObjectSetInteger(0, name, OBJPROP_XSIZE, 0); // Set this property to extend the line infinitely to the left
  }

//+------------------------------------------------------------------+
//| Calculate the lot size based on risk management                  |
//+------------------------------------------------------------------+
double CalculateLotSize(double support, double resistance)
  {
   double stopLossDistance = MathAbs((support - resistance) * StopLossMultiplier);
   double riskAmount = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercentage / 100.0);

// Get the tick size for the current symbol
   double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);

// Calculate the lot size based on the stop loss and tick size
   double lotSize = riskAmount / (stopLossDistance / tickSize); // Adjusted for the correct pip size
   lotSize = NormalizeDouble(lotSize, 2); // Normalize the lot size to two decimal places

// Ensure lot size is above minimum lot size allowed by broker
   double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   if(lotSize < minLotSize)
      lotSize = minLotSize;

   return lotSize;
  }

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


Quebra do Código

1. Inicialização e Propriedades

input double RiskPercentage = 1.0;         // Percentage of account balance to risk per trade
input double StopLossMultiplier = 1.0;     // Multiplier for determining the stop loss distance
input int ATR_Period = 14;                 // Period for ATR calculation

// Global variables for storing values
datetime lastUpdateTime = 0;
double previousDayOpen, previousDayClose, previousDayHigh, previousDayLow;
double previousDayVolume;
double currentDayVolume;
double support, resistance;

Parâmetros de entrada permitem que os usuários personalizem o comportamento do EA de acordo com suas preferências de negociação. Variáveis globais são declaradas para armazenar dados históricos, incluindo preços de abertura, fechamento, máxima e mínima do dia anterior, bem como volumes e níveis de suporte/resistência.

2. Funções OnInit e OnDeinit

int OnInit()
{
    lastUpdateTime = 0; // Set the initial update time
    return INIT_SUCCEEDED;
}

OnInit: Esta função é executada quando o EA é inicializado. Ela define o último horário de atualização como zero.

void OnDeinit(const int reason)
{
    ObjectsDeleteAll(0); // Clean up any drawn objects on the current chart
}

OnDeinit: Esta função é chamada quando o EA é removido ou interrompido, realizando a limpeza ao excluir todos os objetos do gráfico.

3. Lógica Principal em OnTick

void OnTick()
{
    UpdateMetrics(); // Call to the function that fetches and displays the metrics
}

Esta função é acionada a cada tick (mudança de preço). Ela chama a função UpdateMetrics para coletar e analisar dados.

4. Função UpdateMetrics

void UpdateMetrics()
{
    if (TimeCurrent() - lastUpdateTime >= 2 * 3600) // Check if 2 hours have passed since last update
    {
        // Fetch previous day's data
        datetime prevDay = iTime(NULL, PERIOD_D1, 1);
        previousDayOpen = iOpen(NULL, PERIOD_D1, 1);
        previousDayClose = iClose(NULL, PERIOD_D1, 1);
        previousDayHigh = iHigh(NULL, PERIOD_D1, 1);
        previousDayLow = iLow(NULL, PERIOD_D1, 1);
        previousDayVolume = iVolume(NULL, PERIOD_D1, 1);
        
        // Fetch current day's volume
        currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Volume for today
        
        // Calculate support and resistance
        support = previousDayLow - (previousDayHigh - previousDayLow) * 0.382;
        resistance = previousDayHigh + (previousDayHigh - previousDayLow) * 0.382;
        
        // Determine market direction
        string marketDirection = AnalyzeMarketDirection(previousDayOpen, previousDayClose, previousDayHigh, previousDayLow);
        
        // Calculate possible lot size based on risk management
        double lotSize = CalculateLotSize(support, resistance);
        
        // Retrieve account metrics
        double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
        double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
        
        // Calculate market spread manually
        double marketBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
        double marketAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
        double marketSpread = marketAsk - marketBid;

        // Calculate market volatility using ATR
        int atrHandle = iATR(NULL, PERIOD_H1, ATR_Period);
        double atrValue = 0.0;
        
        if (atrHandle != INVALID_HANDLE) // Check if the handle is valid
        {
            double atrBuffer[];
            if (CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0)
            {
                atrValue = atrBuffer[0];
            }
            IndicatorRelease(atrHandle); // Release the indicator handle
        }
        
        // Create the output string including the last update time
        string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES);
        string infoStr = StringFormat("Prev Day Open: %.2f\nPrev Day Close: %.2f\nPrev Day High: %.2f\nPrev Day Low: %.2f\n"
                                       "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\nMarket Direction: %s\n"
                                       "Support: %.2f\nResistance: %.2f\nAccount Balance: %.2f\nAccount Equity: %.2f\n"
                                       "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n"
                                       "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f",
                                       previousDayOpen, previousDayClose, previousDayHigh, previousDayLow, 
                                       previousDayVolume, currentDayVolume, marketDirection,
                                       support, resistance, accountBalance, accountEquity, marketSpread,
                                       minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize);
                                       
        // Log the information
        Print(infoStr);
        
        // Display information on the chart
        Comment(infoStr);
        
        // Remove old trend lines and create new ones for previous day's high/low
        ObjectsDeleteAll(0);
        
        // Draw continuous trend lines
        DrawContinuousTrendLine("PrevDayHigh", previousDayHigh);
        DrawContinuousTrendLine("PrevDayLow", previousDayLow);
        
        // Update last update time
        lastUpdateTime = TimeCurrent();
    }
}

  • Verificação de Tempo: A função só é executada se já tiverem se passado 2 horas desde a última atualização, minimizando cálculos excessivos.
  • Coleta de Dados: iTime, iOpen, iClose, iHigh, iLow e iVolume são usados para coletar dados do último dia e do dia atual.
  • Suporte e Resistência: O script calcula níveis de Fibonacci com base nos preços mínimo e máximo do dia anterior.
  • Análise da Direção do Mercado: Chama a função AnalyzeMarketDirection para avaliar as condições de mercado.
  • Cálculo do Tamanho do Lote: Chama a função CalculateLotSize para determinar quanto negociar com base nos princípios de gerenciamento de risco.
  • Métricas da Conta e do Mercado: Recupera saldo da conta, patrimônio e spread de mercado para melhores decisões de negociação.
  • Cálculo do ATR: Recupera o Average True Range (ATR) para medir a volatilidade do mercado.
  • Informações de Saída: Formata e exibe métricas relevantes na string infoStr e registra com Print.
  • Criação de Linhas de Tendência: Limpa linhas de tendência antigas e cria novas com base nos preços máximo e mínimo do dia anterior.

5. Análise da Direção do Mercado

string AnalyzeMarketDirection(double open, double close, double high, double low)
{
    string direction;
    
    if (close > open)
    {
        direction = "Bullish";
    }
    else if (close < open)
    {
        direction = "Bearish";
    }
    else
    {
        direction = "Neutral";
    }

    // Include current trends or patterns based on high and low for further analysis
    if (high > open && high > close)
    {
        direction += " with bullish pressure"; // Example addition for context
    }
    else if (low < open && low < close)
    {
        direction += " with bearish pressure"; // Example addition for context
    }
    
    return direction;
}

  • Determinar a Direção do Mercado: Esta função utiliza os preços de abertura, fechamento, máxima e mínima do dia anterior para determinar se o mercado está em alta, baixa ou neutro.
  • Insights Adicionais: Ela verifica indicadores de pressão com base em máximas e mínimas, fornecendo uma análise mais contextual das condições de mercado.

6. Desenho de Linhas de Tendência

void DrawContinuousTrendLine(string name, double price)
{
    datetime startTime = TimeCurrent() - 24 * 3600; // Extend 24 hours into the past
    ObjectCreate(0, name, OBJ_TREND, 0, startTime, price, TimeCurrent(), price);
    ObjectSetInteger(0, name, OBJPROP_COLOR, (StringFind(name, "High") >= 0) ? clrRed : clrBlue);
    ObjectSetInteger(0, name, OBJPROP_WIDTH, 2); // Set thickness of the line
    ObjectSetInteger(0, name, OBJPROP_XSIZE, 0); // Set this property to extend the line infinitely to the left
}

  • Desenhar Linhas de Tendência: Esta função cria uma linha de tendência no gráfico para a máxima ou mínima do dia anterior, estendendo-a para trás em 24 horas.
  • Personalização: Cada linha tem uma cor (vermelho para máxima, azul para mínima) e uma largura especificada.

7. Cálculo do Tamanho do Lote

double CalculateLotSize(double support, double resistance)
{
    double stopLossDistance = MathAbs((support - resistance) * StopLossMultiplier);
    double riskAmount = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercentage / 100.0);
    
    // Get the tick size for the current symbol
    double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
    
    // Calculate the lot size based on the stop loss and tick size
    double lotSize = riskAmount / (stopLossDistance / tickSize);
    lotSize = NormalizeDouble(lotSize, 2); // Normalize the lot size to two decimal places

    // Ensure lot size is above minimum lot size allowed by broker
    double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
    if (lotSize < minLotSize)
        lotSize = minLotSize;

    return lotSize;
}

  • Gerenciamento de Risco: Esta função calcula o tamanho do lote com base no percentual de risco definido em relação ao saldo da conta do usuário e à distância de stop loss calculada.
  • Normalização: Garante que o tamanho do lote esteja dentro dos limites aceitáveis definidos pelo corretor.


Implementação e Testes do Código

Implementando um Expert Advisor (EA) no MetaTrader 5: Um Guia Passo a Passo
  • Abrir o MetaTrader 5: Inicie a plataforma de negociação MetaTrader 5 em seu computador.
  • Acessar o MetaEditor: Para abrir o MetaEditor, vá até a barra de menu e clique em Ferramentas > MetaQuotes Language Editor, ou simplesmente pressione F4. Alternativamente, se tiver o MetaEditor instalado separadamente, você pode executá-lo diretamente.
  • Inserir o EA: No MetaEditor, selecione Arquivo > Novo > Expert Advisor ou abra um arquivo EA existente (.mq5). Se estiver criando um novo EA, siga as instruções para nomeá-lo e defini-lo.
  • Compilar o EA: Após editar o código do seu EA, clique no botão Compilar (ou pressione F7). Certifique-se de que não haja erros; uma compilação bem-sucedida gerará um arquivo executável.
  • Carregar o EA no MetaTrader 5: Retorne à plataforma MetaTrader 5 e abra o painel Navegador (Ctrl + N). Encontre seu EA compilado na seção Expert Advisors.
  • Anexar o EA a um Gráfico: Arraste e solte o EA no gráfico desejado ou clique com o botão direito no EA e selecione Anexar a um gráfico. Uma janela de configurações aparecerá para personalização de parâmetros.
  • Ativar Negociação Automática: Certifique-se de que a Negociação Automática esteja ativada clicando no botão verde AutoTrading na barra de ferramentas do MetaTrader 5. Se solicitado, marque a opção Permitir negociação automatizada nas configurações do EA.
  • Monitorar o Desempenho: Acompanhe o desempenho do EA no gráfico. Use o Testador de Estratégia para backtesting, se necessário.
  • Ajustar Configurações Conforme Necessário: Você pode modificar parâmetros ou configurações diretamente na janela de configurações do EA clicando com o botão direito no gráfico.

Analytics Master

Fig 5. Resultado da Análise  

A Figura 5 ilustra o anexo do EA ao gráfico, resultando nos resultados exibidos.

Resultado da Análise

Fig 6. Resultado da Análise 

A Figura 6 acima ilustra o desempenho geral do nosso Expert Advisor (EA), que é capaz de calcular automaticamente métricas-chave do mercado e apresentá-las em formato de gráfico. O EA desenha linhas de tendência com base nos níveis de suporte e resistência do dia anterior. Ele realiza atualizações regulares das informações de mercado a cada duas horas, conforme indicado nos dois últimos diagramas, que também exibem os horários mais recentes de atualização.                    

                                                                             

Conclusão

Em resumo, a implantação bem-sucedida do EA Analytics Master marca um avanço significativo na negociação automatizada. Este EA não apenas automatiza a análise das principais métricas de mercado, mas também fornece insights valiosos sobre níveis de suporte e resistência, ajudando os traders a tomarem decisões mais inteligentes. Ao integrar um gerenciamento de risco eficaz e fornecer atualizações em tempo real, ele apoia os traders na navegação pelas complexidades do mercado com confiança. No geral, esta ferramenta melhora a eficiência da negociação e capacita os usuários a se manterem informados e proativos em suas estratégias de negociação.

Reserve um tempo para realizar backtests do EA em dados históricos para entender seu desempenho em diferentes condições de mercado. Isso ajudará a ajustar suas configurações de acordo com o seu estilo de negociação. Revise regularmente as métricas e os insights fornecidos pelo EA. As condições de mercado podem mudar rapidamente, portanto, manter-se atualizado é crucial para tomar decisões oportunas. Sempre siga sua estratégia de gerenciamento de risco. Ajuste as configurações de percentual de risco para alinhar com sua tolerância pessoal ao risco e tamanho da conta. Engaje-se com recursos educacionais sobre estratégias de negociação, comportamento de mercado e análise técnica para complementar os insights do EA. Se encontrar problemas ou tiver sugestões de melhorias, considere fornecer feedback ao desenvolvedor. A contribuição dos usuários é inestimável para aprimoramentos futuros.

Seguindo essas recomendações, você pode maximizar a eficácia do EA Analytics Master e melhorar sua experiência geral de negociação.

Data Nome da Ferramenta  Descrição Versão  Atualizações  Notas
01/10/24 Projetor de Gráficos Script para sobrepor a ação de preço do dia anterior com efeito fantasma. 1.0 Lançamento Inicial A primeira ferramenta do Lynnchris Tools Chest
18/11/24 Comentário Analítico Ele fornece informações do dia anterior em formato tabular, bem como antecipa a direção futura do mercado. 1.0 Lançamento Inicial Segunda ferramenta no Lynnchris Tool Chest
27/11/24 Analytics Master Atualização Regular das métricas de mercado a cada duas horas  1.01 Segundo Lançamento Terceira ferramenta no Lynnchris Tool Chest

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

Arquivos anexados |
Últimos Comentários | Ir para discussão (9)
Ifeanyichukwu Ikwecheghe
Ifeanyichukwu Ikwecheghe | 1 dez. 2024 em 20:01
Christian Benjamin #:
Olá , Ifeanyichukwu Ikwecheghe,

Obrigado por seu feedback positivo! Fico feliz em saber que você considera a ferramenta valiosa.

Para responder às suas perguntas:

1. A ferramenta não abre negociações para você; em vez disso, ela fornece análises e sinais que você pode usar para tomar decisões de negociação informadas. Você executará manualmente as negociações com base em suas previsões.

2. Os sinais são atualizados periodicamente, aproximadamente a cada duas horas, permitindo que você se adapte às mudanças nas condições do mercado. Embora não reflitam as mudanças em tempo real durante a sessão, as atualizações o ajudarão a entender as mudanças de sentimento do mercado, seja um estado de baixa mudando para alta ou vice-versa.

Suas opiniões e outras sugestões são bem-vindas para discussão.
Obrigado, Christian, por sua resposta. Também li sua resposta a Qhumanani sobre a possibilidade de incluir a capacidade da ferramenta de abrir posições. Tenha certeza de que darei sugestões úteis à medida que a ideia passar pela minha cabeça. Além disso, a ferramenta emite um alerta sonoro quando o sentimento do mercado muda? Esse também seria um bom recurso.
veveza4
veveza4 | 28 dez. 2024 em 16:39
Olá, Christian

Essa é uma ferramenta muito interessante.
Desculpe, mas estou trabalhando com o MT4. Você tem desenvolvimento para o MT4?

Muito obrigado.
Dong Zheng
Dong Zheng | 15 ago. 2025 em 00:55
Olá! Estou feliz por poder ler seu artigo. Tenho uma pergunta a lhe fazer: a primeira ferramenta da caixa de ferramentas Lynnchris, a segunda ferramenta da caixa de ferramentas Lynnchris, dessas duas ferramentas, a segunda é uma atualização da primeira? Parece-me que as duas ferramentas são independentes e não têm nada a ver uma com a outra.
Miguel Angel Vico Alba
Miguel Angel Vico Alba | 2 set. 2025 em 16:06
Dong Zheng #:

As duas primeiras ferramentas são independentes:

  • O Chart Projector é um script para sobrepor a ação do preço do dia anterior como um efeito fantasma.
  • O Analytical Comment é um script diferente que exibe as principais métricas e prevê a direção.

Portanto, o segundo não é uma versão atualizada do primeiro. A verdadeira continuação é o Analytics Master EA, que expande o Analytical Comment.

Miguel Angel Vico Alba
Miguel Angel Vico Alba | 2 set. 2025 em 16:08
veveza4 #:

Esse script/EA está disponível apenas para o MT5. Não há versão para o MT4, pois o MT4 foi descontinuado e não é mais mantido, portanto, o desenvolvimento só faz sentido no MT5.

Do básico ao intermediário: Filas, Listas e Árvores (IV) Do básico ao intermediário: Filas, Listas e Árvores (IV)
Neste artigo iremos finalizar a parte referente a implementação e explicação sobre o que seria uma lista encadeada. Porém a implementação mostrada aqui, não irá mostrar um certo detalhe que podemos fazer dentro de uma lista encadeada. Isto será visto futuramente em um outro artigo.
Técnicas do MQL5 Wizard que você deve conhecer (Parte 50): Awesome Oscillator Técnicas do MQL5 Wizard que você deve conhecer (Parte 50): Awesome Oscillator
O Awesome Oscillator é outro indicador de Bill Williams que é usado para medir o momentum. Ele pode gerar múltiplos sinais e, portanto, revisamos estes com base em padrões, como em artigos anteriores, aproveitando as classes e a montagem do MQL5 wizard.
Simulação de mercado: Position View (XII) Simulação de mercado: Position View (XII)
No artigo, você aprenderá como criar uma indicação visual na sua plataforma de trading para saber se você está em uma posição comprada ou vendida no gráfico, sem precisar acessar o terminal. Além disso, o texto aborda a implementação de uma funcionalidade que melhora a visualização ao mover linhas de take profit e stop loss, ocultando a linha de preço do mouse durante a movimentação para evitar confusões. A leitura oferece insights práticos para customizar sistemas de simulação de mercado.
Migrando para o MQL5 Algo Forge (Parte 3): Uso de repositórios de terceiros em seu próprio projeto Migrando para o MQL5 Algo Forge (Parte 3): Uso de repositórios de terceiros em seu próprio projeto
Vamos analisar como já é possível conectar código de terceiros de qualquer repositório no armazenamento MQL5 Algo Forge ao seu projeto. Neste artigo, finalmente chegamos a uma tarefa promissora, mas também mais complexa: como, na prática, integrar e utilizar em seu projeto bibliotecas de repositórios alheios no MQL5 Algo Forge.