Trate de imprimir los valores de marginAllot, PercentRisk y pipsToSL para reducir el origen del número negativo. Mi suposición especulativa es que pipsToSL está siendo pasado como un número negativo bajo ciertas circunstancias.
NormalizeDouble(posSize,2);
Esta línea no hace nada.- NO use NormalizeDouble, NUNCA. Por ninguna razón. Es una chapuza, no la use. Suuso es siempre incorrecto
- Los SL/TP (stops) deben ser normalizados al tamaño del tick.(En el Broker de 5 dígitos los Stops sólo pueden ser colocados en valores de pip completos. ¿Cómo averiguarlo en mql?-MQL4 forum) y cumplir con los límites Requisitos y limitaciones en la realización de operaciones - Apéndices - MQL4 Tutorial y que requiere la comprensión de la igualdad de punto flotante ¿Puede precio != precio ? - Foro MQL4
- Sólo es necesario ajustar el precio abierto de las órdenes pendientes. En Divisas, Punto == TickSize, por lo que obtendrá la misma respuesta, pero no funcionará en Metales. Así que hazlo bien: Trailing Bar Entry EA - Foro MQL4 o Bid/Ask: (No es necesario) usar NormalizeDouble en OrderSend - MQL4 forum
- El tamaño del lote también debe ajustarse a un múltiplo de LotStep. Si eso no es una potencia de 1/10 entonces NormalizeDouble está mal. Hágalo bien.
Trate de imprimir los valores de marginAllot, PercentRisk y pipsToSL para reducir el origen del número negativo. Mi suposición especulativa es que pipsToSL está siendo pasado como un número negativo bajo ciertas circunstancias.
En realidad pude encontrar algunos lugares en el resto del código donde pipsToSL fue calculado incorrectamente como negativo. Gracias.
- Esta línea no hace nada.
- NO use NormalizeDouble, NUNCA. Por cualquier razón. Es una chapuza, no la uses. Su uso es siempre incorrecto
- SL/TP (stops) necesitan ser normalizados al tamaño del tick.(En el Broker 5Digit los Stops solo pueden ser colocados en valores de pip completos. ¿Cómo averiguar en mql?-MQL4 forum) y respetar los límites Requisitos y limitaciones en la realización de operaciones - Apéndices - MQL4 Tutorial y que requiere la comprensión de la igualdad de punto flotante ¿Puede precio != precio ? - Foro MQL4
- Sólo es necesario ajustar el precio abierto de las órdenes pendientes. En Divisas, Punto == TickSize, por lo que obtendrá la misma respuesta, pero no funcionará en Metales. Así que hazlo bien: Trailing Bar Entry EA - Foro MQL4 o Bid/Ask: (No es necesario) usar NormalizeDouble en OrderSend - MQL4 forum
- El tamaño del lote también debe ajustarse a un múltiplo de LotStep. Si eso no es una potencia de 1/10 entonces NormalizeDouble está mal. Hazlo bien.
Ya he leído que has posteado sobre esto, pero no entendí tu punto hasta tu último enlace. Gracias.
¿Por qué sigo obteniendo respuestas con varios decimales si estoy usando MathRound()? He intentado usar DoubleToString pero eso no ha ayudado en absoluto. ¿Se debe esto a las limitaciones de Print() o hay algún otro problema?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitations : ¿Por qué sigo obteniendo respuestas con varios decimales si estoy usando MathRound() | MathRound devuelve un doble; número infinito de decimales. |
No según la página de documentación de la misma. https://docs.mql4.com/math/mathround
"Valordevuelto
Valor redondeado hasta el entero más cercano".
Si se supone que lo hace pero no lo hace, entonces MQ necesita ser notificado, o necesitan poner una etiqueta de advertencia en la función.
JD4 tiene razón, la página de documentación dice que redondea al entero más cercano. No estoy seguro de otra manera de lograr lo que estaba tratando de arriba sin redondear o cortar un cierto número de lugares decimales. ¿Cuál sería el punto de MathRound() o round() si no devuelven un número entero?
También acabo de intentar usar esto sin éxito. ¿Posiblemente DTS simplemente cambia la precisión de un valor para la apariencia y no el valor real? No veo ninguna otra opción.
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Dentro de mi estrategia, utilizo una función GetPosSize() para calcular el tamaño de las posiciones. Sólo estoy utilizando la estrategia con EURUSD en el momento y para la vida de mí no puedo averiguar por qué posSize está devolviendo un valor negativo, lo que resulta en un error 4051 OrderSend. Cualquier ayuda sería muy apreciada. Voy a publicar todo el código relevante aquí. No se hace ningún otro cálculo hacia posSize en todo el código, sólo se llama a la función. Las tres piezas de código separadas están dentro de la función.