Hola, parece que hay una lógica incorrecta con mi última respuesta. la función primero calculó el tamaño del lote no de la variable Lotes, sino de: lot = NormalizeDouble (AccountFreeMarg in () * MaximumRisk1000.0,1); en primer lugar, sobre NormalizeDouble (.., 1), devolverá el valor con precisión de 1 dígito. por ejemplo, var1 = 5/8 = 0.625. NormalizeDouble (var1,2) = 0.63 gt; gt; gt; 2 dígitos después del punto decimal NormalizeDouble (var1,1) = 0.6 gt; gt; gt; 1 dígito después del punto decimal forma su caso, AccountFreeMargin = 3000 MaximumRisk = 0.01 AccountFreeMargin * MaximumRisk1000 = 3000 * 0.011000 = 0.03 lot = NormalizeDouble (0.03,1) = 0.0 !!! el 3 se omite porque está en la segunda posición, contado desde la izquierda después del punto decimal, antes de devolver el resultado:/---- tamaño de lote de devolución si (lotlt; 0.01) lot = 0.01; regreso (lote); entonces, debido a que el lote calculado anterior es 0, que es más pequeño que 0.01, la función devolvió 0.01; Por último, debe usar if (DecreaseFactorgt; 0) en lugar de if (DecreaseFactorlt; 0), y asegúrese de que el valor de DecreaseFactor sea un valor positivo (por ejemplo 3) espero que esta ayuda