Lot Size Library for Any Volume Step
- Bibliotecas
-
Jevon Naldo Yoshield
I build MetaTrader 5 tools I use on my own charts. Nine are on the Market.
Order Entry Panel sends market orders per click. Smart Risk and Lot Size Panel turns risk and stop into lots. Prop Firm Guard and Drawdown Lock caps my daily loss. - Versión: 1.0
Esta biblioteca devuelve el lote más grande cuya pérdida en el stop no supere el dinero que permites arriesgar, ajustado a cualquier paso de volumen, tamaño de tick y valor de tick que indique el símbolo.
La escribí para el desarrollador de MQL5 que ha pegado un bloque de normalización de lotes en cada EA y ya no sabe qué copia es la correcta. Una sola importación, una sola versión y una llamada que rechaza la operación en lugar de sobredimensionarla.
QUÉ HACE
- Rechaza en lugar de sobredimensionar: cuando el lote más pequeño que acepta el símbolo supondría un riesgo superior a tu límite, la llamada devuelve -6 en lugar de un lote mayor.
- Válido en cualquier paso: el tamaño se redondea a la baja al paso propio del símbolo y nunca se redondea al alza, por lo que un símbolo con un paso de 0,001 y un instrumento con un paso de 0,25 se gestionan sin necesidad de introducir manualmente ningún número decimal.
- Tres formas de indicar el riesgo: una cantidad monetaria, un porcentaje del saldo o del capital, o una distancia en puntos, además de la llamada inversa que indica qué riesgo supone un volumen determinado.
- No se puede pasar un tamaño de tick incorrecto: la biblioteca lee el volumen y la especificación de tick del propio símbolo en el momento de la llamada.
- Una frase para cada código: nueve valores de error, cada uno con un texto sencillo que indica qué hay que comprobar.
- Sin estado ni órdenes: devuelve un número, nunca envía, modifica ni cierra una orden, y dos llamadas con las mismas entradas en el mismo tick devuelven el mismo valor.
CÓMO FUNCIONA
1. Coloca chimaster_lots.ex5 en MQL5\Libraries, dentro de la carpeta de datos de tu terminal, y pega el bloque de importación que aparece a continuación en el EA.
2. Llama a una función de cálculo del tamaño de la posición con el símbolo, el capital que permites arriesgar y la distancia entre la entrada y el stop.
3. Lee el número: un valor positivo indica el tamaño, y un valor negativo es un código de error que CMS_ErrorText convierte en una frase.
LAS DOCE LLAMADAS
#import "chimaster_lots.ex5"
double CMS_VolumeMin(const string symbol);
double CMS_VolumeMax(const string símbolo);
double CMS_VolumeStep(const string symbol);
int CMS_VolumeDigits(const string symbol);
double CMS_NormalizeVolume(const string símbolo, const double volumenSolicitado);
double CMS_MoneyPerLot(const string símbolo, const double distanciaDePrecio);
double CMS_LotFromRiskMoney(const string símbolo, const double capitalDeRiesgo, const double distanciaDeStop);
double CMS_LotFromRiskPercent(const string símbolo, const double porcentajeDeRiesgo, const double distanciaDeParoEnPrecio, const int baseDeRiesgo);
double CMS_LotFromRiskPoints(const string símbolo, const double capitalDeRiesgo, const double puntosDeStop);
double CMS_RiskOfVolume(const string símbolo, const double volumen, const double distanciaDePrecio);
string CMS_ErrorText(const int código);
string CMS_Version();
#import
Las cuatro primeras leen la especificación de volumen del símbolo. CMS_MoneyPerLot convierte una distancia de precio en la pérdida de un lote. CMS_LotFromRiskMoney, CMS_LotFromRiskPercent y CMS_LotFromRiskPoints devuelven el tamaño a partir del dinero, de un porcentaje del saldo o del capital propio, y de puntos; la llamada de porcentaje toma 0 para el saldo y 1 para el capital propio como último argumento. CMS_RiskOfVolume es la inversa. CMS_ErrorText y CMS_Version son las dos llamadas de cadena.
LOS CÓDIGOS DE ERROR
-1 símbolo desconocido, -2 especificación de volumen no válida, -3 especificación de tick no válida, -4 distancia no positiva, -5 importe de riesgo fuera de rango, -6 el lote mínimo conlleva un riesgo superior al solicitado, -7 una entrada no es finita o está fuera de rango, -8 la base de riesgo no es 0 ni 1, -9 no hay saldo ni capital propio del que extraer un porcentaje.
BUENO SABER
- Se trata de código compilado, no fuente, y la cifra monetaria es una estimación: recibes la biblioteca compilada, y el dinero por lote utiliza la pérdida por valor de tick de la terminal en el momento de la llamada, sin comisiones, swaps ni gastos.
- No se realizan comprobaciones de stop ni de margen: tú proporcionas la distancia desde la entrada hasta el stop, y la biblioteca no valida los niveles de stop, los niveles de congelación ni el margen.
- Valor de una orden: se ajusta al volumen máximo del símbolo y no divide un tamaño mayor, y no aplica el límite de volumen total del símbolo.
- A un paso de mi panel: esta biblioteca establece un límite mínimo con una tolerancia relativa, por lo que 0,3 lotes en un símbolo con pasos de 0,1 se mantienen en 0,3, mientras que un límite mínimo simple daría 0,2. Mi panel «Smart Risk and Lot Size» establece el límite mínimo de forma simple, por lo que ambos pueden diferir en un paso en ese aspecto; ambos son válidos y ninguno asume un riesgo superior al de la fórmula.
ANTES DE CONFIAR EN ELLO
El compilador de MQL5 no comprueba los enlaces de una importación: una biblioteca que falte se compila igualmente sin errores, y el fallo aparece cuando la terminal carga el código. Así que comprueba el archivo. Pega el bloque de importación en un script vacío, añade Print(CMS_Version());, compílalo y ejecútalo en cualquier gráfico. Mostrará 1,00 cuando la terminal haya cargado esta versión.
PREGUNTAS QUE ESPERO
¿Se compilará mi EA sin la biblioteca? Sí, y ahí está la trampa: el compilador no lee el archivo .ex5, por lo que un archivo que falte se compila sin problemas y falla en el momento de la carga. La comprobación de la versión anterior es la respuesta rápida.
El mínimo de mi bróker no es un múltiplo del paso. En ese caso, la especificación del símbolo es inconsistente. La biblioteca devuelve ese mínimo sin cambios, y el servidor puede rechazar la orden cuando la envíes.
¿Realiza o gestiona operaciones? No. Devuelve un número, y tu EA decide qué hacer con él.
COMPATIBILIDAD
Cualquier tipo de cuenta MT5. MQL5 nativo, sin DLL.
ASISTENCIA
Preguntas a través del sistema de mensajes de MQL5. Primera respuesta en un plazo de dos días laborables.
Si lo has utilizado, te agradecería que escribieras una breve reseña sobre lo que ha funcionado y lo que no.
