Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Librerías

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - librería para MetaTrader 5

Visualizaciones:
13
Ranking:
(2)
Publicado:
Include_test.mq5 (3.34 KB) ver
\MQL5\Include\
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

CRiskCalculator es una biblioteca de encabezados MQL5 orientada a objetos, diseñada para gestionar la gestión de riesgos y los cálculos de volumen para los Expert Advisors y las herramientas de negociación . Calcula el valor monetario de los pips y el tamaño exacto de los lotes en función de un importe de riesgo específico de la cuenta y de la distancia del Stop Loss en pips .

Un problema habitual en el trading automatizado es el cálculo del tamaño de las posiciones en pares de divisas cruzadas (por ejemplo, operar con el GBPJPY en una cuenta denominada en euros) . Esta clase aborda ese reto combinando las propiedades nativas de los símbolos de MetaTrader 5 con un sistema de conversión alternativo para los pares de divisas cruzadas .

Características principales

  • Cálculo de doble motor: utiliza las propiedades nativas del bróker (SYMBOL_TRADE_TICK_VALUE y SYMBOL_TRADE_TICK_SIZE) como método de cálculo principal . Si el bróker no proporciona esos parámetros o no los ha inicializado, recurre automáticamente a la extracción manual de la moneda base y la moneda de cotización, así como a consultas sobre los tipos de cambio .

  • Normalización de los parámetros del bróker: limita automáticamente los volúmenes calculados entre SYMBOL_VOLUME_MIN y SYMBOL_VOLUME_MAX, y los ajusta a SYMBOL_VOLUME_STEP para evitar errores de rechazo del bróker (como TRADE_RETCODE_INVALID_VOLUME) .

  • Diseño OOP limpio: encapsulado dentro de la clase CRiskCalculator sin saturar el ámbito global, lo que facilita su integración en proyectos de EA existentes o indicadores personalizados .

  • Autoconfigurable: detecta automáticamente la divisa base de la cuenta actual (ACCOUNT_CURRENCY) al iniciarse .

Ejemplo de integración

Para utilizar esta clase en tu asesor experto o script, coloca CRiskCalculator.mqh en tu directorio MQL5/Include/ y crea una instancia del objeto :

#include <CRiskCalculator.mqh>

// Función auxiliar para mostrar un panel de alto contraste en el gráfico
void DrawChartPanel(const string &lines[])
  {
   int x = 20, y = 30;
   int width = 280, lineHeight = 18;
   int height = (ArraySize(lines) * lineHeight) + 20;

   // 1. Crear un recuadro de fondo (visible en gráficos blancos, negros o 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. Mostrar líneas de texto dentro del panel
   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 la calculadora de riesgo
   CRiskCalculator riskCalc;

   string symbol     = _Symbol;
   double riskAmount = 100.0; // Riesgo objetivo en la moneda de la cuenta
   double slPips     = 25.0;  // Distancia del stop loss en pips

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

   // Preparar las líneas de salida
   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);

   // Mostrar el panel de la interfaz gráfica de usuario en el gráfico
   DrawChartPanel(info);
  }
Ejemplo en el gráfico

Referencia de la clase

Método Tipo de retorno Descripción
GetPipValuePerLot(string símbolo) double

Devuelve el valor monetario de 1 pip para 1 lote estándar en la divisa de la cuenta .

GetPipValue(string símbolo, double volumen) double

Devuelve el valor monetario total de 1 pip para un volumen especificado .

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

Calcula y normaliza el tamaño del lote para un riesgo en efectivo objetivo y un Stop Loss en pips .


Traducción del inglés realizada por MetaQuotes Ltd.
Artículo 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 riesgo en tiempo real y HUD de control del tamaño de lote para MT5. Calcula el tamaño exacto del lote en función del saldo de la cuenta, el porcentaje de riesgo objetivo y un stop loss dinámico basado en el ATR, con aviso de sobrepaso mínimo del lote.

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

Indicador de puntos de pivote diarios para MetaTrader 5 con los métodos clásico y de Fibonacci. Muestra los puntos de pivote (PP), R1-R3 y S1-S3 utilizando la vela diaria anterior cerrada.

Accumulation/Distribution Accumulation/Distribution

El indicador Accumulation/Distribution (Acumulación/Distribución) queda determinado por los cambios que se producen en el precio y en el volumen.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.