Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - librería para MetaTrader 5
- Visualizaciones:
- 13
- Ranking:
- Publicado:
-
¿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); }

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
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
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
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)
El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.