Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - biblioteca para MetaTrader 5

Visualizações:
15
Avaliação:
(2)
Publicado:
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

A CRiskCalculator é uma biblioteca de cabeçalhos MQL5 orientada a objetos, projetada para lidar com a gestão de risco e cálculos de volume para Expert Advisors e ferramentas de negociação . Ela calcula valores monetários por pip e tamanhos precisos de lotes com base em um valor de risco específico da conta e na distância do Stop Loss em pips .

Um problema comum na negociação automatizada é o cálculo do tamanho da posição em pares de moedas cruzadas (por exemplo, negociar GBPJPY em uma conta denominada em euros) . Essa classe resolve esse desafio combinando as propriedades nativas dos símbolos do MetaTrader 5 com um sistema de conversão alternativo para pares de moedas cruzadas .

Principais recursos

  • Cálculo com motor duplo: utiliza as propriedades nativas da corretora (SYMBOL_TRADE_TICK_VALUE e SYMBOL_TRADE_TICK_SIZE) como método principal de cálculo . Se esses parâmetros não estiverem disponíveis ou não forem inicializados pela corretora, o sistema recorre automaticamente à extração manual da moeda-base/moeda de cotação e às consultas de taxas de conversão .

  • Normalização de parâmetros da corretora: Limita automaticamente os volumes calculados entre SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX e os alinha ao SYMBOL_VOLUME_STEP para evitar erros de rejeição da corretora (como TRADE_RETCODE_INVALID_VOLUME) .

  • Design OOP limpo: Encapsulado dentro da classe CRiskCalculator, sem poluição no escopo global, facilitando sua integração em projetos de EAs existentes ou indicadores personalizados .

  • Autoconfiguração: detecta automaticamente a moeda base da conta atual (ACCOUNT_CURRENCY) na inicialização .

Exemplo de integração

Para usar esta classe em seu Expert Advisor ou script, coloque o arquivo CRiskCalculator.mqh dentro do diretório MQL5/Include/ e instancie o objeto :

#include <CRiskCalculator.mqh>

// Função auxiliar para renderizar um painel de alto contraste no gráfico
void DrawChartPanel(const string &lines[])
  {
   int x = 20, y = 30;
   int width = 280, lineHeight = 18;
   int height = (ArraySize(lines) * lineHeight) + 20;

   // 1. Criar caixa de fundo (visível em gráficos brancos, pretos ou personalizados)
   string bgName = "RiskCalc_BG";
   if(ObjectFind(0, bgName) < 0)
      ObjectCreate(0, bgName, OBJ_RECTANGLE_LABEL, 0, 0, 0);

   ObjectSetInteger(0, bgName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, bgName, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, bgName, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, bgName, OBJPROP_XSIZE, width);
   ObjectSetInteger(0, bgName, OBJPROP_YSIZE, height);
   ObjectSetInteger(0, bgName, OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_COLOR, clrDodgerBlue);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_TYPE, BORDER_FLAT);
   ObjectSetInteger(0, bgName, OBJPROP_SELECTABLE, false);

   // 2. Exibir linhas de texto dentro do painel
   for(int i = 0; i < ArraySize(lines); i++)
     {
      string lblName = "RiskCalc_Lbl_" + IntegerToString(i);
      if(ObjectFind(0, lblName) < 0)
         ObjectCreate(0, lblName, OBJ_LABEL, 0, 0, 0);

      ObjectSetInteger(0, lblName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
      ObjectSetInteger(0, lblName, OBJPROP_XDISTANCE, x + 12);
      ObjectSetInteger(0, lblName, OBJPROP_YDISTANCE, y + 10 + (i * lineHeight));
      ObjectSetString(0, lblName, OBJPROP_TEXT, lines[i]);
      ObjectSetString(0, lblName, OBJPROP_FONT, "Segoe UI");
      ObjectSetInteger(0, lblName, OBJPROP_FONTSIZE, 9);
      ObjectSetInteger(0, lblName, OBJPROP_COLOR, (i == 0) ? clrYellow : clrWhite);
      ObjectSetInteger(0, lblName, OBJPROP_SELECTABLE, false);
     }

   ChartRedraw(0);
  }

void OnStart()
  {
   // Instanciar a calculadora de risco
   CRiskCalculator riskCalc;

   string symbol     = _Symbol;
   double riskAmount = 100.0; // Risco-alvo na moeda da conta
   double slPips     = 25.0;  // Distância do Stop Loss em pips

   // Calcular parâmetros
   double lotSize      = riskCalc.CalculateLotSize(symbol, riskAmount, slPips);
   double pipValPerLot = riskCalc.GetPipValuePerLot(symbol);

   // Preparar as linhas de saída
   string info[6];
   info[0] = "=== RISK & POSITION CALCULATOR ===";
   info[1] = "Symbol: " + symbol;
   info[2] = "Account Currency: " + AccountInfoString(ACCOUNT_CURRENCY);
   info[3] = "Target Risk: $" + DoubleToString(riskAmount, 2);
   info[4] = "Calculated Lot Size: " + DoubleToString(lotSize, 2) + " lots";
   info[5] = "Pip Value (1 Lot): " + DoubleToString(pipValPerLot, 2);

   // Exibir o painel da interface gráfica no gráfico
   DrawChartPanel(info);
  }
Exemplo no gráfico

Referência da classe

Método Tipo de retorno Descrição
GetPipValuePerLot(string símbolo) double

Retorna o valor monetário de 1 pip para 1 lote padrão na moeda da conta .

GetPipValue(string símbolo, double volume) double

Retorna o valor monetário total de 1 pip para um volume especificado .

CalculateLotSize(string símbolo, double valorDeRisco, double slPips) double

Calcula e normaliza o tamanho do lote para um risco em dinheiro alvo e um Stop Loss em pips .


Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/77130

Gueta Position Sizer: Risk and Lot Guard HUD Gueta Position Sizer: Risk and Lot Guard HUD

Calculadora de risco em tempo real e HUD de controle do tamanho do lote para o MT5. Calcula o tamanho exato do lote com base no saldo da conta, na porcentagem de risco alvo e no Stop Loss dinâmico baseado no ATR, com aviso de ultrapassagem mínima do lote.

RJO Daily Pivot Levels  Classic and  Fibonacci for MT5 RJO Daily Pivot Levels Classic and Fibonacci for MT5

Indicador de Pontos de Pivô Diários para o MetaTrader 5 com os métodos Clássico e de Fibonacci. Exibe PP, R1-R3 e S1-S3 com base na vela diária anterior já fechada.

Accumulation/Distribution Accumulation/Distribution

O Indicador Accumulation/Distribution (Acumulação/Distribuição ou A/D) é determinado pelas mudanças de preço e volume.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.