Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
De cualquier manera.
if(a==0){expresión} significa que si a es 0 entonces es verdadero, así que ejecuta {expresión}.
if(a=0){expresión} es equivalente a if(a){a=0;expresión} si a es verdadero, {a=0;expresión}.
La segunda está mal, debería escribirse así
if(a=x) { expresión } asigna el valor de x a la variable a, y si a no es 0 después, entonces ejecuta la expresión
if(a=0) { } después de la optimización sólo habrá a=0
La segunda es incorrecta, la forma correcta de escribirla es
if(a=x) { expresión } asigna el valor de x a la variable a, y si a no es 0 después, ejecuta la expresión
if(a=0) { } después de la optimización sólo habrá a=0
Lo siento, es cierto, las expresiones se ejecutan de izquierda a derecha.
Por eso empezamos con la asignación, y luego comprobamos la verdad.
Esto es más o menos así:
Este código no sólo calcula el volumen máximo, sino que lo ajusta exactamente a las limitaciones de la configuración del símbolo.Lo calcula pero se olvida de por qué lo calcula cuando lo inserta:
El valor del lote en este punto se calcula de forma que se consuma todo el margen disponible con un margen mínimo.
Si este valor se incrementa en al menos un paso de volumen, no habrá suficiente dinero para abrir una posición.
Pero la segunda línea del código citado REALIZA el valor del lote en caso de que se cumpla la condición bajo if, y puede aumentarlo en mucho más que el valor del paso de volumen, porque en realidad hay volumen min = 0,1 y paso de volumen = 0,01.
Y en este código de abajo, puede ocurrir una división por cero, contra la cual no hay protección:
Si SymbolInfoDouble() devuelve 0, ya está. Los programas MQL5 terminan con la división por 0, ¿verdad? ¿No puede devolver 0? La gente se queja aquí de que las funciones informativas devuelven muy a menudo 0. No se puede recurrir a "no devolverá 0" porque, en primer lugar, puede hacerlo, y en segundo lugar, la división por 0 es fatal.
Hay algunas observaciones menores sobre la "exactitud de la entrada", pero realmente no son demasiado significativas, es decir, no tienen consecuencias tan graves, puedes ignorarlas.
Anticipándome a los posibles argumentos de que el código es "aproximado", apunto: ¿cuántos usuarios del producto son capaces de encontrar y arreglar de forma competente esos "lugares malos"?
Para ellos, esto es "código de los desarrolladores". Un ejemplo a seguir.
¿Por qué no se activa el botón "Siguiente" cuando se rellenan todos los campos obligatorios?
¿Por qué no se activa el botón "Siguiente" cuando se rellenan todos los campos obligatorios?
Calcula, pero luego se olvida de lo que estaba calculando:
Anticipándome a los posibles argumentos de que el código es "aproximado", quiero señalar: ¿cuántos usuarios del producto pueden arreglar correctamente esos "malos lugares"?El código era aproximado (copiado de dos piezas), pero tus comentarios son correctos.
Aquí está la versión corregida:
Y por qué session_index++; cuando session_index=1 ya es falso:
No podemos saber de antemano cuál es el número de sesiones por herramienta. Así que consultamos cada sesión por número. Si es verdad
session_exist=SymbolInfoSessionQuote(symbol,day,session_index,start,finish);
nos interesa el momento de su comienzo y de su fin. Si obtenemos falso - ya está, no hay sesión con este número.
No podemos saber de antemano cuál es el número de sesiones de un instrumento. Por lo tanto, solicitamos cada sesión por número. Si es verdad
analizamos el momento de su inicio y de su fin. Si obtenemos falso - ya está, no hay sesión con este número.
A...... entonces ¿por qué todo termina el viernes a las 24:00 y en realidad a las 23:00?