Quizás puedas entender mejor un bucle for entendiendo primero un bucle while... un bucle for es sólo un bucle while con condición inicial e incremento incorporado...
Revise la documentación defor que dice. . .
"El operador for es equivalente a la siguiente sucesión de operadores:"
Expression1;
while(Expression2)
{
operator;
Expression3;
};
Específicamente relacionado con tu pregunta,"¿Por qué este primer ejemplocontiene una "condición" como segundo parámetro mientras que el segundo ejemplo contiene "Expresión2" comosegundo parámetro?"una expresión puede ser una condición, una condición resulta en un valor verdadero o falso, por ejemplo (a > b) o (c || d) o (OrdersTotal() >= 0) , además la documentación también dice . ."La expresión2 es la prueba condicional para la terminación del ciclo."
Simón,
una expresión puede ser una condición
Entonces, ¿el parámetro dos en un encabezado de operador 'for' puede ser una expresión O condición? Asumo que la Expresión_1 y la Expresión_3 deben seguir siendo expresiones y no cambiar a condiciones, ¿correcto? No veo por qué las expresiones 1 y 3 no podrían ser también condiciones. Ambas expresiones 1&3 son sólo parámetros a rellenar. (siendo una condición PODRÍA ser alternativamente el parámetro dos aka el propósito de la Expresión_2)
Por favor, confirme sus pensamientos.
Las expresiones pueden ser operaciones aritméticas (2+2=4), asignación, etc. (todos los enumerados en el Diccionario MetaEditor).
La condición es verdadera || falsa (ejemplos: a>b, a>=b, a==b, etc.).
Las operaciones están contenidas en el diccionario del MetaEditor también (ejemplos: Break, Continue, Return, while, for, etc.).
Gracias
Simón,
una expresión puede ser una condición
Entonces, ¿el parámetro dos en un encabezado de operador 'for' puede ser una expresión O condición? Asumo que la Expresión_1 y la Expresión_3 deben seguir siendo expresiones y no cambiar a condiciones, ¿correcto? No veo por qué las expresiones 1 y 3 no podrían ser también condiciones. Ambas expresiones 1&3 son sólo parámetros a rellenar. (siendo una condición PODRÍA ser alternativamente el parámetro dos aka el propósito de la Expresión_2)
Documentación - while
Libro - while
Simon, voy a practicar el uso de la operación while en el código. hazte un favor... ¡Me gusta como suena esto! :) Gracias.
William, El número, convertido en booleano es una condición ... (1=true,0=false). Muchas gracias.
Gracias.
Simón,
He escrito un EA que debería ;) ser capaz de hacer lo que pediste.
Estoy compartiendo una combinación de este EA junto con una captura del resultado de la pestaña "Expertos" en la Terminal.
El EA parece ser capaz de seleccionar la orden USDJPY e imprimir su información en la pestaña de Expertos. ¿Por qué el EA no cierra la orden además de imprimir la información de la misma?
Gracias.
Simón,
He escrito un EA que debería ;) ser capaz de hacer lo que pediste.
Estoy compartiendo una combinación de este EA junto con una captura del resultado de la pestaña "Expertos" en la Terminal.
El EA parece ser capaz de seleccionar la orden USDJPY e imprimir su información en la pestaña de Expertos. ¿Por qué el EA no cierra la orden además de imprimir la información de la misma?
Gracias.
Por favor, explique su código y lo que se supone que debe hacer ... en particular hablar de la mientras por favor.
Simon,
Por favor, explique su código y lo que está destinado a hacer ... en particular, me hablan a través de la mientras que por favor.
Haré todo lo posible para explicar el código y su propósito.
Propósito del código:
1. Seleccione la orden USDJPY de un grupo de tres órdenes.
2. 2. Modificar el TP y el SL de la orden USDJPY.
3. Ejecutar la función OrderPrint().
4. Cerrar la orden USDJPY.
Explicación del código:
En primer lugar, se declaran las variables.
int i; double bid_ask;
Ensegundo lugar, se ejecuta el bucle 'while'.
Lógica del bucle 'while':
Lafunción OrderSelect () utiliza la variable 'i' como sustituto de un número 1,2,3,etc.. (tenlo en cuenta por favor)
Entonces, si la variable i dentro de la función OrderSelect() y OrderSymbol() no es USDJPY, aumenta la variable i en 1. ( i++; )
while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")
i++;
El bucle 'while' incrementa la variable 'i' hasta que la función OrderSelect() selecciona la entrada de orden adecuada Y la función OrderSymbol() selecciona una orden USDJPY. Cuando ambos objetivos se han cumplido, el bucle while se convierte en falso y el control se pasa por debajo de i++; (el cuerpo del bucle while).
En tercer lugar, se ejecuta la función OrderModify().
OrderModify(i,OrderOpenPrice(),50*Point,50*Point,0,CLR_NONE);
En cuarto lugar, se ejecuta la función OrderPrint().
OrderPrint();
En quinto lugar, se incluyen los parámetros para discernir si la orden a cerrar es de compra o de venta.
if(OrderType()==OP_BUY){bid_ask=Bid;} if(OrderType()==OP_SELL){bid_ask=Ask;}
En sexto lugar, una vez que el programa distingue si la orden es de compra o de venta, se ejecuta la función OrderClose().
OrderClose(i,OrderLots(),bid_ask,3,CLR_NONE);
En séptimo lugar (y por último), el programa incluye un comentario que mostrará la variable 'i' para confirmar que el número de ticket es efectivamente el ticket en USDJPY durante la prueba visual en el probador de estrategias.
Comment("i = " ,i);
Gracias.
Simon,
la lógica del bucle 'while':
La función OrderSelect() utiliza la variable 'i' como sustituto de un número 1,2,3,etc.. (tenlo en cuenta por favor)
Entonces, si la variable i dentro de la función OrderSelect() y OrderSymbol() no es USDJPY, aumenta la variable i en 1. ( i++; )
El bucle 'while' incrementa la variable 'i' hasta que la función OrderSelect() selecciona la entrada de orden adecuada Y la función OrderSymbol() selecciona una orden USDJPY. Cuando ambos objetivos se han cumplido, el bucle while se convierte en falso y el control se pasa por debajo de i++; (el cuerpo del bucle while).
Si hubieras incluido la comprobación de los valores de retorno y la notificación de errores, probablemente habrías visto tu problema.
- 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
Hola comunidad MQL4,
Primera referencia: https://book.mql4.com/operators/for
Según la primera referencia, un ejemplo de formato del operador 'for' se escribe así:
Segunda referencia: https: //docs.mql4.com/basis/operators/for
Según la segunda referencia, el ejemplo proporcionado del operador 'for' se describe así:
¿Por qué este primer ejemplo contiene una "condición" como segundo parámetro mientras que el segundo ejemplo contiene "Expresión2" como segundo parámetro?
¿Qué significa esta contradicción?
¿Tiene alguna importancia?
Si voy a utilizar el operador de ciclo "for", creo que debo conocer bien todos sus parámetros.
Gracias.